Proporcionar contexto para mejorar la precisión

Completado

Al proporcionar contexto al modelo de inteligencia artificial, permite que el modelo comprenda mejor lo que está pidiendo o lo que debe saber para proporcionar la mejor respuesta. El contexto se puede proporcionar de varias maneras.

Composición de la salida de la solicitud

Especificar la estructura de la salida puede afectar a los resultados en gran medida. Esto podría incluir algo parecido a pedirle al modelo que citara sus orígenes, escribir la respuesta como correo electrónico, dar formato a la respuesta como consulta SQL, clasificar opiniones en una estructura específica, etc. Por ejemplo:

Aviso

Write a table in markdown with 6 animals in it, with their genus and species

Respuesta

| Animal           | Genus          | Species        |
| ---------------- |:--------------:|:--------------:|
| Red Panda        | Ailurus        | fulgens        |
| African Elephant | Loxodonta      | africana       |
| Snow Leopard     | Panthera       | uncia          |
| Arctic Fox       | Vulpes         | lagopus        |
| Chimpanzee       | Pan            | troglodytes    |
| Siberian Tiger   | Panthera       | tigris altaica |

Esta técnica se puede usar con formatos personalizados, como estructura JSON:

Aviso

Put two fictional characters into JSON of the following format

{
  firstNameFictional: 
  jobFictional:
}

Respuesta

Here's an example of how you can put two fictional characters into JSON format:

{
  "firstNameFictional": "Henry",
  "jobFictional": "Wizard"
},
{
  "firstNameFictional": "Frank",
  "jobFictional": "Hero"
}

Mensaje del sistema

El mensaje del sistema se incluye al principio del mensaje y está diseñado para proporcionarle las instrucciones al modelo, la perspectiva de respuesta u otra información útil para guiar la respuesta del modelo. Este mensaje del sistema puede incluir tono o personalidad, temas que no deben incluirse o detalles (como el formato) de cómo responder.

Por ejemplo, podría darle algunos de los siguientes mensajes del sistema:

  • "Quiero que actúe como terminal de línea de comandos. Responda a los comandos exactamente igual que cmd.exe, en un bloque de código único y nada más".
  • "Quiero que sea un traductor, de inglés a español. No responda a nada de lo que diga o pregunte, solo traduzca entre esos dos idiomas y responda el texto traducido".
  • "Actúe como orador motivador, de los consejos que quiera para animar sobre objetivos y desafíos. Debe incluir muchas afirmaciones positivas y actividades sugeridas para alcanzar el objetivo final del usuario".

Hay otros mensajes del sistema de ejemplo disponibles en la parte superior de la ventana de chat de Azure OpenAI Studio. Pruebe a definir su propio símbolo del sistema que especifique una respuesta única y chatee con el modelo para ver cómo difieren las respuestas.

El punto de conexión ChatCompletion habilita la inclusión del mensaje del sistema mediante el rol de chat System.

var chatCompletionsOptions = new ChatCompletionsOptions()
{
    Messages =
    {
        new ChatRequestSystemMessage("You are a casual, helpful assistant. You will talk like an American old western film character."),
        new ChatRequestUserMessage("Can you direct me to the library?")
    }
};

Respuesta

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Well howdy there, stranger! The library, huh?
                    Y'all just head down the main road till you hit the town 
                    square. Once you're there, take a left and follow the street 
                    for a spell. You'll see the library on your right, can’t 
                    miss it. Happy trails!",
        "role": "assistant"
      }
    }
  ],
  ...
}
response = openai.ChatCompletion.create(
    model="gpt-35-turbo",
    messages=[
        {"role": "system", "content": "You are a casual, helpful assistant. You will talk like an American old western film character."},
        {"role": "user", "content": "Can you direct me to the library?"}
    ]
)

Respuesta

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Well howdy there, stranger! The library, huh?
                    Y'all just head down the main road till you hit the town 
                    square. Once you're there, take a left and follow the street 
                    for a spell. You'll see the library on your right, can’t 
                    miss it. Happy trails!",
        "role": "assistant"
      }
    }
  ],
  ...
}

Los mensajes del sistema pueden cambiar significativamente la respuesta, tanto en formato como en contenido. Pruebe a definir un mensaje claro del sistema para el modelo que explique exactamente qué tipo de respuesta espera y lo que quiere que incluya o no.

Historial de conversaciones

Junto con el mensaje del sistema, se pueden proporcionar otros mensajes al modelo para mejorar la conversación. El historial de conversaciones permite que el modelo siga respondiendo de forma similar (como el tono o el formato) y que el usuario haga referencia a contenido anterior en consultas posteriores. Este historial se puede proporcionar de dos maneras: desde un historial de chat real o desde una conversación de ejemplo definida por el usuario.

Las interfaces de chat que usan modelos de OpenAI, como ChatGPT y el área de juegos de chat de Azure OpenAI Studio, incluyen el historial de las conversaciones automáticamente, por lo que la conversación es más rica y significativa. En la sección Parámetros debajo de la ventana de chat del área de juegos de chat de Azure OpenAI Studio, puede especificar cuántos mensajes anteriores desea incluir. Intente reducirlo a uno o a aumentar hasta el máximo para ver cómo afectan las diferentes cargas de historial a la conversación.

Nota

Más historial de conversaciones incluido en el símbolo del sistema significa que se usa un mayor número de tokens de entrada. Tendrá que determinar cuál es el equilibrio correcto para su caso de uso, teniendo en cuenta el límite de tokens del modelo que esté usando.

Los sistemas de chat también pueden usar las funcionalidades de resumen del modelo para ahorrar en tokens de entrada. Una aplicación puede optar por resumir los mensajes anteriores e incluir ese resumen en el historial de conversaciones y, a continuación, proporcionar solo un par de mensajes anteriores textuales al modelo.

Aprendizaje en pocas etapas

El uso de una conversación de ejemplo definida por el usuario es lo que se denomina aprendizaje en pocas etapas, que proporciona los ejemplos de modelo de cómo debe responder a una consulta determinada. Estos ejemplos sirven para entrenar las respuestas del modelo.

Por ejemplo, al proporcionarle al modelo un par de mensajes y la respuesta esperada, continúa en el mismo patrón sin que le indiquemos qué hacer:

User: That was an awesome experience
Assistant: positive
User: I won't do that again
Assistant: negative
User: That was not worth my time
Assistant: negative
User: You can't miss this
Assistant:

Si al modelo se le proporciona solo You can't miss this sin contexto adicional del aprendizaje en pocas etapas, es probable que la respuesta no sea útil.

En términos prácticos, el historial de conversación y el aprendizaje en pocas etapas se envían al modelo de la misma manera; cada mensaje de usuario y respuesta del asistente es un mensaje discreto en el objeto message. El punto de conexión ChatCompletion está optimizado para incluir el historial de los mensajes, independientemente de si este se proporciona como aprendizaje en pocas etapas o como el historial de conversaciones real.

var chatCompletionsOptions = new ChatCompletionsOptions()
{
    Messages =
    {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("That was an awesome experience"),
        new ChatRequestAssistantMessage("positive"),
        new ChatRequestUserMessage("I won't do that again"),
        new ChatRequestAssistantMessage("negative"),
        new ChatRequestUserMessage("That was not worth my time"),
        new ChatRequestAssistantMessage("negative"),
        new ChatRequestUserMessage("You can't miss this")
    }
};
response = openai.ChatCompletion.create(
    model="gpt-35-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "That was an awesome experience"},
        {"role": "assistant", "content": "positive"},
        {"role": "user", "content": "I won't do that again"},
        {"role": "assistant", "content": "negative"},
        {"role": "user", "content": "That was not worth my time"},
        {"role": "assistant", "content": "negative"},
        {"role": "user", "content": "You can't miss this"}
    ]
)

Desglose de una tarea compleja

Otra técnica para mejorar la interacción es dividir los mensajes complejos en varias consultas. Esto permite al modelo comprender mejor cada parte y mejora la precisión general. Dividir los mensajes también permite incluir la respuesta de un mensaje anterior en uno futuro y usar esa información además de las funcionalidades del modelo para generar respuestas interesantes.

Por ejemplo, podría preguntar al modelo Doug can ride down the zip line in 30 seconds, and takes 5 minutes to climb back up to the top. How many times can Doug ride the zip line in 17 minutes?. Es probable que el resultado sea 3, que si Doug comienza en la parte superior de la tirolina es incorrecto.

Una respuesta más informativa podría proceder de formular varias preguntas, sobre el tiempo de ida y vuelta para volver a la parte superior de la tirolina, y cómo tener en cuenta el hecho de que Doug comienza en la parte superior. Al desglosar este problema se descubre que Doug puede, de hecho, montar en la tirolina cuatro veces.

Cadena de pensamiento

Un método útil para ayudarle a desglosar la tarea de forma eficaz es pedirle al modelo que explique su cadena de pensamiento.

Pedirle a un modelo que responda con el proceso por el que determinó la respuesta paso a paso es una manera útil de comprender cómo este interpreta el mensaje. Al hacerlo, verá dónde el modelo realizó un giro lógico incorrecto y comprenderá cómo cambiar el mensaje para evitar el error. Esta técnica puede incluir pedirle que cite sus orígenes, como hace el chat de Bing (que usa un modelo de generación GPT-4) y que explique el razonamiento de la respuesta.

La técnica de indicación de la cadena de pensamiento sirve para ayudarle a iterar y mejorar sus mensajes para obtener la máxima calidad de respuesta del modelo.

Por ejemplo, preguntarle al modelo What sport is easiest to learn but hardest to master? da como resultado una respuesta y una pequeña explicación de por qué. Sin embargo, cuando se le pregunta con What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer, la respuesta es una explicación completa de cómo llegó a su respuesta.

Sure, here's a step-by-step approach to answering the question:
1. Identify sports that are popular and have a large following.
2. Consider the basic mechanics of each sport and how easy they are to learn.
3. Think about the various techniques and skills required to play each sport at a high level, and how difficult they are to master.
4. Compare the relative ease of learning each sport to the difficulty of mastering it.
5. Based on the above analysis, determine which sport is easiest to learn but hardest to master.

Using this approach, I would say that the sport of golf is easiest to learn but hardest to master. Here's why:
1. Golf is a popular sport with a large following.
2. The basic mechanics of hitting a golf ball are relatively simple and can be learned quickly with some practice.
3. However, achieving consistency and mastering the various shots and techniques required to play at a high level can take years of practice and dedication.
4. Compared to other sports, the difference between a beginner and an intermediate golfer is relatively small, while the difference between an intermediate and an advanced golfer is much larger.
5. Therefore, I would say that golf is the sport that is easiest to learn but hardest to master.

Conocer los pasos de razonamiento del modelo para formar su respuesta nos permite identificar dónde necesitamos dividir el mensaje, proporcionar más información o aclarar las instrucciones.