🟢 Construindo o ChatGPT através do GPT-3

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.
How to make your own knock-off ChatGPT using GPT‑3 (text‑davinci‑003) — where you can customize the rules to your needs, and access the resulting chatbot over an API. pic.twitter.com/9jHrs91VHW
— Riley Goodside (@goodside) December 26, 2022
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.
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 Huangusou 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.i trained an ai chatbot on my childhood journal entries - so that i could engage in real-time dialogue with my "inner child"
— michelle huang (@michellehuang42) November 27, 2022
some reflections below:
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:
- Formatar a entrada do usuário em uma prompt de chatbot para GPT-3
- Obter a resposta do chatbot como uma conclusão do GPT-3
- Atualizar a prompt com a entrada do usuário e a resposta do chatbot
- 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()
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
- OpenAI. (2022). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/. https://openai.com/blog/chatgpt/ ↩
- Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. Prentice Hall. ↩
- Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D. M., Wu, J., Winter, C., … Amodei, D. (2020). Language Models are Few-Shot Learners. ↩