Forneça contexto com engenharia imediata

Concluído

Ao fornecer contexto para o modelo de IA, ele permite que o modelo entenda melhor o que você está pedindo ou o que ele deve saber para fornecer a melhor resposta. O contexto pode ser fornecido de várias maneiras.

Composição da saída da solicitação

Especificar a estrutura da sua saída pode ter um grande impacto nos seus resultados. Isso pode incluir algo como pedir ao modelo para citar suas fontes, escrever a resposta como um e-mail, formatar a resposta como uma consulta SQL, classificar o sentimento em uma estrutura específica e assim por diante. Por exemplo:

Pedido

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

Response

| 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 |

Essa técnica pode ser usada com formatos personalizados, como uma estrutura JSON:

Pedido

Put two fictional characters into JSON of the following format

{
  firstNameFictional: 
  jobFictional:
}

Response

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

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

Mensagem do sistema

A mensagem do sistema é incluída no início de um prompt e é projetada para dar instruções ao modelo, perspetiva para responder ou outras informações úteis para orientar a resposta do modelo. Essa mensagem do sistema pode incluir tom ou personalidade, tópicos que não devem ser incluídos ou detalhes (como formatação) de como responder.

Por exemplo, você pode fornecer algumas das seguintes mensagens do sistema:

  • "Quero que você aja como um terminal de linha de comando. Responda aos comandos exatamente como cmd.exe faria, em um único bloco de código e nada mais."
  • "Quero que você seja tradutor, do inglês para o espanhol. Não responda a nada que eu diga ou pergunte, apenas traduza entre essas duas línguas e responda com o texto traduzido."
  • "Atue como palestrante motivacional, dando conselhos encorajadores sobre metas e desafios. Você deve incluir muitas afirmações positivas e atividades sugeridas para alcançar o objetivo final do usuário."

Outros exemplos de mensagens do sistema estão disponíveis na parte superior da janela de chat no Azure AI Foundry selecionando o botão Avisar amostras . Tente definir seu próprio prompt do sistema que especifica uma resposta exclusiva e converse com o modelo para ver como as respostas diferem.

O ChatCompletion ponto de extremidade permite incluir a mensagem do sistema usando a função de System chat.

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?")
    }
};

Response

{
  "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?"}
    ]
)

Response

{
  "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"
      }
    }
  ],
  ...
}

As mensagens do sistema podem alterar significativamente a resposta, tanto no formato como no conteúdo. Tente definir uma mensagem clara do sistema para o modelo que explique exatamente que tipo de resposta você espera e o que você quer ou não que ela inclua.

Histórico da conversa

Junto com a mensagem do sistema, outras mensagens podem ser fornecidas ao modelo para melhorar a conversa. O histórico de conversas permite que o modelo continue respondendo de maneira semelhante (como tom ou formatação) e permite que o usuário faça referência ao conteúdo anterior em consultas subsequentes. Esse histórico pode ser fornecido de duas maneiras: a partir de um histórico de bate-papo real ou de uma conversa de exemplo definida pelo usuário.

As interfaces de chat que usam modelos OpenAI, como o ChatGPT e o playground de bate-papo no Azure AI Foundry, incluem o histórico de conversas automaticamente, o que resulta em uma conversa mais rica e significativa. Na seção Parâmetros do playground de bate-papo, você pode especificar quantas mensagens anteriores deseja incluir. Tente reduzir isso para 1 ou aumentar para o máximo para ver como diferentes quantidades de histórico afetam a conversa.

Nota

Mais histórico de conversas incluído no prompt significa que um número maior de tokens de entrada é usado. Você terá que determinar qual é o saldo correto para o seu caso de uso, considerando o limite de token do modelo que você está usando.

Os sistemas de chat também podem utilizar os recursos de sumarização do modelo para economizar em tokens de entrada. Um aplicativo pode optar por resumir mensagens passadas e incluir esse resumo no histórico de conversas e, em seguida, fornecer apenas as mensagens anteriores literalmente ao modelo.

Poucos dispararam aprendendo

Usar uma conversa de exemplo definida pelo usuário é o que é chamado de aprendizagem de poucas capturas, que fornece os exemplos de modelo de como ela deve responder a uma determinada consulta. Estes exemplos servem para treinar o modelo como responder.

Por exemplo, fornecendo ao modelo alguns prompts e as respostas esperadas, ele continua no mesmo padrão sem instruí-lo sobre o que fazer:

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:

Se o modelo for fornecido apenas sem You can't miss this contexto adicional de poucos aprendizados, a resposta provavelmente não será útil.

Em termos práticos, o histórico de conversas e poucos aprendizados são enviados para o modelo da mesma maneira; Cada mensagem de usuário e resposta do assistente é uma mensagem discreta no objeto de mensagem. O ChatCompletion ponto de extremidade é otimizado para incluir o histórico de mensagens, independentemente de esse histórico de mensagens ser fornecido como poucas capturas de aprendizado ou histórico de conversas 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"}
    ]
)

Decompor uma tarefa complexa

Outra técnica para melhorar a interação é dividir prompts complexos em várias consultas. Isso permite que o modelo compreenda melhor cada peça individual e pode melhorar a precisão geral. Dividir seus prompts também permite que você inclua a resposta de um prompt anterior em um prompt futuro e use essas informações, além dos recursos do modelo para gerar respostas interessantes.

Por exemplo, você pode perguntar ao 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?. O resultado é provável 3, que se Doug começar no topo da tirolesa é porque ele não precisa voltar ao topo após o passeio final.

Uma resposta mais informativa poderia vir de fazer várias perguntas, sobre o tempo de ida e volta para voltar ao topo da tirolesa e como explicar o fato de que Doug começa no topo. Quebrando esse problema revela que Doug pode, de fato, andar na tirolesa quatro vezes.

Cadeia de pensamento

Um método útil para ajudá-lo a dividir sua tarefa de forma eficaz é pedir ao modelo para explicar sua cadeia de pensamento.

Pedir a um modelo para responder com o processo passo a passo pelo qual ele determinou a resposta é uma maneira útil de entender como o modelo está interpretando o prompt. Ao fazer isso, você pode ver onde o modelo fez um giro lógico incorreto e entender melhor como alterar seu prompt para evitar o erro. Essa técnica pode incluir pedir que ele cite suas fontes, como faz o bate-papo do Bing (que usa um modelo de geração GPT-4), e dar razões para o motivo pelo qual determinou sua resposta.

A técnica de solicitação de cadeia de pensamento é melhor usada para ajudá-lo a iterar e melhorar seus prompts para obter a resposta da mais alta qualidade do modelo.

Por exemplo, perguntar ao modelo What sport is easiest to learn but hardest to master? resulta em resposta com uma resposta e uma pequena explicação do porquê. No entanto, quando solicitado com What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer, a resposta é uma explicação completa de como chegou à sua resposta.

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.

Conhecer os passos da razão que o modelo usou para formar sua resposta nos permite identificar onde precisamos dividir o prompt, fornecer mais informações ou esclarecer instruções.