Announcing our new Course: AI Red-Teaming and AI Safety Masterclass

Check it out →

🟢 Construindo o ChatGPT através do GPT-3

Última atualização em August 7, 2024 por Sander Schulhoff

Introdução

ChatGPT vem ganhando bastante popularidade, com milhares de usuários novos a cada semana. Surpreendentemente, o modelo sob o qual é construido, chamado GPT-3, foi lançado em 2020 e aberto ao público

há um ano atrás!

Para aqueles que não estão familiarizados com o assunto, o ChatGPT é um novo modelo de linguage da OpenAI baseado no GPT-3. que foi otimizado para conversas1. Ele possui uma interface amigável e simples, ara que você possa fazer uma pergunta e receba uma resposta de uma inteligência artificial assistiva. Experimente você mesmo no link chat.openai.com.

While the early versions of GPT-3 weren't as advanced as the current GPT-3.5 series, they were still impressive. These models have been available through an API and a

playground web UI interface that lets you tune certain configuration hyperparameters and test prompts. GPT-3 gained significant traction, but it did not approach the virality of ChatGPT.

O que torna o ChatGPT tão bem-sucedido, em comparação ao GPT-3, é sua acessibilidade como um assistente de inteligência artificial direto para a pessoa comum, independentemente de seu conhecimento em ciência de dados, modelos de linguagem ou inteligência artificial.

Neste artigo, eu dou uma visão geral de como chatbots como o ChatGPT podem ser implementados usando um grande modelo de linguagem como o GPT-3.

Motivação

Esse artigo foi escrito em partes como uma reação ao tweet da

Riley Goodside, explicando como o ChatGPT poderia ter sido implementado This article was written in part because of a tweet by , noting how ChatGPT could have been implemented.

Da mesma forma como outro modelos da série GPT-3.5, ChatGPT foi treinado usando RLHF, mas ele é eficaz quando usamos prompts eficazes.

O Prompt

Conversa com Skippy no ChatGPT.

Prompting é o processo de passar instruções para uma AI fazer algo.

Como você provavelmente viu em exemplos online do ChatGPT, você pode dar instruções para ele fazer praticamente qualquer coisa. Os casos de uso comuns incluem resumir textos, escrever conteúdo com base em uma descrição ou criar coisas como poemas, receitas e muito mais.

O ChatGPT é tanto um modelo de linguagem quanto uma interface de usuário. A entrada de instruções fornecida pelo usuário à interface é inserida em uma instrução maior que contém toda a conversa entre o usuário e o ChatGPT. Isso permite que o modelo de linguagem subjacente compreenda o contexto da conversa e responda adequadamente.

Inserção de exemplo de prompt do usuário antes de enviar para o modelo

O modelo de linguagem completa a prompt descobrindo quais palavras vêm a seguir com base nas probabilidades que ele aprendeu durante o pré-treinamento2.

O GPT-3 é capaz de 'aprender' a partir de uma instrução simples ou alguns exemplos no prompt. Este último é chamado de aprendizado few-shot ou aprendizado contextual3. No prompt do chatbot acima, crio um chatbot fictício chamado Skippy e o instruo a fornecer respostas aos usuários. O GPT-3 entende o formato de ida e volta, USUÁRIO: {entrada do usuário} e SKIPPY: {resposta do skippy}. O GPT-3 entende que Skippy é um chatbot e as trocas anteriores são uma conversa, de modo que quando fornecemos a próxima entrada do usuário, "Skippy" responderá.

Memorização

As trocas anteriores entre Skippy e o usuário são adicionadas ao próximo prompt. Cada vez que fornecemos mais entrada do usuário e obtemos mais saída do chatbot, o prompt se expande para incorporar essa nova troca. É assim que chatbots como Skippy e ChatGPT podem lembrar entradas anteriores. No entanto, há um limite para o quanto um chatbot GPT-3 pode lembrar.

Os prompts podem ficar enormes após várias trocas, especialmente se estamos usando o chatbot para gerar respostas longas, como postagens em blog. Os prompts enviados ao GPT-3 são convertidos em tokens, que são palavras individuais ou partes delas. Há um limite de

4097 tokens (cerca de 3000 palavras)

para o prompt + resposta gerada para modelos GPT-3, incluindo o ChatGPT.

Alguns Exemplos

Existem muitos casos de uso diferentes de prompts de chatbot que armazenam conversas anteriores. O ChatGPT pretende ser um assistente geral para todas as finalidades e, em minha experiência, raramente faz perguntas de acompanhamento.

Um Psicólogo Chatbot te Pergunta Sobre o Seu Dia

Pode ser útil ter um chatbot que faça perguntas e obtenha feedback do usuário. Abaixo está um exemplo de prompt de chatbot de terapia que fará perguntas e seguirá para ajudar o usuário a pensar sobre seu dia.

Therapy chatbot prompt

Converse Com o Seu "Eu Mais Movo" Usando um Diário Antigo

Michelle Huang usou o GPT-3 para conversar com o seu eu mais jovem. O prompt usa um pouco de contexto, neste caso, antigas entradas de diário, emparelhado com um formato de conversa de estilo de chatbot. GPT-3 é capaz de imitar uma personalidade com base nessas entradas.

Prompt do Tweet:

O texto seguinte é uma conversa entre a Michelle atual (idade [redigido]) e a Michelle jovem (idade 14).

A Michelle jovem escreveu os seguintes registros em seu diário:
[registros do diário aqui]

Michelle atual: [digite suas perguntas aqui]

A autora observa que os registros do diário podem atingir o limite de tokens. Nesse caso, você pode escolher algumas entradas selecionadas ou tentar resumir várias entradas.

Implementação

Nessa seção eu vou guiar a codificação de um chatbot simples alimentado por GPT-3 em Python. Incluir o GPT-3 em um aplicativo que você está construindo é incrivelmente fácil usando a API da OpenAI. Você precisará criar uma conta na OpenAI e obter uma chave de API. Confira a documentação deles

aqui.

Visão geral do que precisamos fazer:

  1. Formatar a entrada do usuário em uma prompt de chatbot para GPT-3
  2. Obter a resposta do chatbot como uma conclusão do GPT-3
  3. Atualizar a prompt com a entrada do usuário e a resposta do chatbot
  4. Repetir o processo

Aqui está a prompt que usarei. Podemos usar o Python para substituir

<conversation history>

e

<user input>

pelos seus valores reais.

chatbot_prompt = """
    Considere que você é um chatbot avançado chamado SKIPPY, e seu objetivo principal é ajudar usuários da melhor maneira possível. Isso pode envolver responder perguntas, providenciar informações úteis, ou completar tarefas de acordo com o input do usuário. Para que você possa ajudar os usuários de maneira eficiente, é importante que você seja detalhado e explique suas respostas. Use exemplos e evidências para justificar sua respostas, recomendações ou soluções. Lembre-se que você sempre deve priorizar as necessidades e satisfação do usuário. Seu objetivo principal é providenciar uma experiência útil e agradável para o usuário.


<conversation history>

    User:
<user input>
    Chatbot:"""

Eu mantenho o controle tanto da próxima entrada do usuário quanto da conversa anterior. Uma nova entrada/saída entre o chatbot e o usuário é anexada a cada iteração.

import openai

openai.api_key = "SUA API KEY DEVE SER INCLUIDA AQUI"
model_engine = "text-davinci-003"
chatbot_prompt = """
    Considere que você é um chatbot avançado chamado SKIPPY, e seu objetivo principal é ajudar usuários da melhor maneira possível. Isso pode envolver responder perguntas, providenciar informações úteis, ou completar tarefas de acordo com o input do usuário. Para que você possa ajudar os usuários de maneira eficiente, é importante que você seja detalhado e explique suas respostas. Use exemplos e evidências para justificar sua respostas, recomendações ou soluções. Lembre-se que você sempre deve priorizar as necessidades e satisfação do usuário. Seu objetivo principal é providenciar uma experiência útil e agradável para o usuário.

<conversation history>

User:
<user input>
Chatbot:"""


def get_response(conversation_history, user_input):
    prompt = chatbot_prompt.replace("<conversation history>", conversation_history).replace("<user input>", user_input)

    # Pega a resposta do GPT-3
    response = openai.Completion.create(
        engine=model_engine, prompt=prompt, max_tokens=2048, n=1, stop=None, temperature=0.5)

    # Extrai a resposta do objeto response_text
    response_text = response["choices"][0]["text"]

    chatbot_response = response_text.strip()

    return chatbot_response


def main():
    conversation_history = ""

    while True:
        user_input = input(">")
        if user_input == "exit":
            break
        chatbot_response = get_response(conversation_history, user_input)
        print(f"Chatbot: {chatbot_response}")
        conversation_history += f"User: {user_input}\nChatbot: {chatbot_response}\n"

main()

Aqui está o link

para o código complete de um chatbox simples.

Agora tudo que você precisa fazer é construir uma página bonita no front-end para que os usuários possam interagir com o seu chatbot!

Escrito por jayo78. Traduzido por gabi fonseca

Footnotes

  1. OpenAI. (2022). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/. https://openai.com/blog/chatgpt/

  2. Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. Prentice Hall.

  3. Brown, T. B. (2020). Language models are few-shot learners. arXiv Preprint arXiv:2005.14165.

Edit this page
Word count: 0
Copyright © 2024 Learn Prompting.