Se você deseja criar algo com inteligência artificial, o melhor caminho é saber como usar a API da OpenAI.
Nesse artigo vou te explicar como começar a usá-la e também quais são as melhores formas de integração com outros aparelhos, programas e APIs.
Para experimentar esses exemplos, você precisará de uma conta OpenAI.
Crie uma conta gratuita para começar. A maioria dos exemplos de código são escritos em Python, embora os conceitos possam ser aplicados em qualquer linguagem.
Da mesma forma que as receitas de um livro de receitas não abrangem todas as refeições ou técnicas possíveis, esses exemplos não abrangem todos os casos ou métodos de uso possíveis.
Use-os como pontos de partida sobre os quais elaborar, descobrir e inventar.
Como grandes modelos de linguagem funcionam
Modelos de linguagem grandes são funções que mapeiam texto para texto. Dada uma cadeia de entrada de texto, um grande modelo de linguagem tenta prever o texto que virá a seguir.
A mágica dos grandes modelos de linguagem é que, ao serem treinados para minimizar esse erro de previsão em grandes quantidades de texto, os modelos acabam aprendendo conceitos úteis para essas previsões.
Por exemplo, eles aprendem conceitos como:
- como soletrar
- como funciona a gramática
- como parafrasear
- como responder perguntas
- como manter uma conversa
- Como escrever em vários idiomas
- como codificar
- etc.
Nenhum desses recursos está explicitamente programado – todos eles surgem como resultado do treinamento.
Os recursos do GPT-3 agora alimentam centenas de diferentes produtos de software, incluindo aplicativos de produtividade, aplicativos de educação, jogos e muito mais.
Como usar modelos de linguagem
De todas as entradas para um grande modelo de linguagem, de longe o mais influente é o prompt de texto.
Grandes modelos de linguagem podem ser solicitados a produzir resultados de algumas maneiras:
- Instrução: Diga ao modelo o que você quer
- Conclusão: Induza o modelo a concluir o início do que você deseja
- Demonstração: Mostre ao modelo o que você quer, com:
- Alguns exemplos no prompt
- Muitas centenas ou milhares de exemplos em um conjunto de dados de treinamento de ajuste fino
Um exemplo de cada um é mostrado abaixo.
Prompts de Instrução
Modelos que seguem instruções (por exemplo, text-davinci-003
ou qualquer modelo que comece com text-
) são especialmente projetados para seguir instruções.
Escreva sua instrução na parte superior do prompt (ou na parte inferior, ou ambos), e o modelo fará o seu melhor para seguir a instrução e depois parar. As instruções podem ser detalhadas, portanto, não tenha medo de escrever um parágrafo detalhando explicitamente a saída desejada.
Exemplo de prompt de instrução:
Extraia o nome do autor da frase abaixo:
"Alguns humanos teorizam que espécies inteligentes são extintas antes que possam se expandir para o espaço sideral. Se eles estão corretos, então o silêncio do céu noturno é o silêncio do cemitério.
― Ted Chiang, Exhalation"
Resultado:
Ted Chiang
Prompts de Conclusão
Os prompts de estilo de conclusão tiram proveito de como os modelos de linguagem grandes tentam escrever texto que eles acham que é mais provável que venha a seguir.
Para orientar o modelo, tente iniciar um padrão ou frase que será concluída pela saída que você deseja ver. Em relação às instruções diretas, este modo de dirigir grandes modelos de linguagem pode ter mais cuidado e experimentação.
Além disso, os modelos não saberão necessariamente onde parar, portanto, muitas vezes você precisará de sequências de parada ou pós-processamento para cortar o texto gerado além da saída desejada.
Exemplo de solicitação de conclusão:
“Alguns humanos teorizam que espécies inteligentes são extintas antes que possam se expandir para o espaço sideral. Se eles estão corretos, então o silêncio do céu noturno é o silêncio do cemitério.”
― Ted Chiang, Exhalation
O autor dessa frase é
Resultado
Ted Chiang
Prompts de Demonstração
Semelhante aos prompts de estilo de conclusão, as demonstrações podem mostrar ao modelo o que você deseja que ele faça.
Essa abordagem às vezes é chamada de aprendizado de poucas tomadas, pois o modelo aprende com alguns exemplos fornecidos no prompt.
Exemplo de prompt de demonstração:
Citação:
"Quando a mente racional é forçada a confrontar o impossível de novo e de novo, ela não tem escolha a não ser se adaptar."
― N.K. Jemisin, The Fifth Season
Autor: N.K. Jemisin
"Alguns humanos teorizam que espécies inteligentes são extintas antes que possam se expandir para o espaço sideral. Se eles estão corretos, então o silêncio do céu noturno é o silêncio do cemitério."
― Ted Chiang, Exhalation
Autor:
Resultado:
Ted Chiang
Exemplo de prompt customizado
Com exemplos de treinamento suficientes, você pode ajustar um modelo personalizado. Nesse caso, as instruções tornam-se desnecessárias, pois o modelo pode aprender a tarefa a partir dos dados de treinamento fornecidos.
No entanto, pode ser útil incluir sequências separadoras (por exemplo, ->
ou ###
ou qualquer string que não apareça comumente em suas entradas) para informar ao modelo quando o prompt terminou e a saída deve começar.
Sem sequências separadoras, existe o risco de o modelo continuar elaborando o texto de entrada, em vez de começar com a resposta que você deseja ver.
Exemplo de prompt ajustado (para um modelo que foi treinado de forma personalizada em pares de conclusão de prompt semelhantes):
"Alguns humanos teorizam que espécies inteligentes são extintas antes que possam se expandir para o espaço sideral. Se eles estão corretos, então o silêncio do céu noturno é o silêncio do cemitério."
― Ted Chiang, Exhalation
###
Resultado:
Ted Chiang
Dicas de criação de prompts
Para obter mais exemplos de prompt, visite Exemplos do OpenAI.
Em geral, o prompt de entrada é a melhor alavanca para melhorar as saídas do modelo. Você pode tentar truques como:
- Dê instruções mais explícitas. Por exemplo, se você quiser que a saída seja uma lista separada por vírgulas, peça que ela retorne uma lista separada por vírgulas. Se você quiser que ele diga “Eu não sei” quando ele não sabe a resposta, diga-lhe “Diga” Eu não sei “se você não sabe a resposta.'
- Forneça exemplos melhores. Se você estiver demonstrando exemplos em seu prompt, certifique-se de que seus exemplos sejam diversos e de alta qualidade.
- Peça ao modelo para responder como se fosse um especialista. Pedir explicitamente ao modelo para produzir resultados de alta qualidade ou resultados como se tivesse sido escrito por um especialista pode induzir o modelo a dar respostas de maior qualidade que ele acha que um especialista escreveria. Por exemplo, “A resposta a seguir é correta, de alta qualidade e escrita por um especialista.
- Peça ao modelo que anote a série de etapas que explicam seu raciocínio. Por exemplo, preencha sua resposta com algo como “Vamos pensar passo a passo.Levar o modelo a dar uma explicação de seu raciocínio antes de sua resposta final pode aumentar a probabilidade de que sua resposta final seja consistente e correta.
Capacidades de texto
Abaixo vou explicar como funciona a capacidade de gerar texto a partir da API da OpenAI.
1. Escrever texto
Grandes modelos de linguagem são excelentes para escrever texto.
Eles podem ajudar com:
- Posts do blog
- Cópia do e-mail
- Copy do anúncio
- Texto do site
- Descrições de produtos
- Memorandos
- Storytelling
- Brainstorming
- Geração de perguntas
- Criação de histórias
- etc.
Um exemplo de prompt para um modelo de acompanhamento de instruções:
Escreva um e-mail para uma colega chamada Jill parabenizando-a por sua promoção. O tom deve ser quente, mas profissional. Mencione como você admira o trabalho que ela tem feito. Inclua uma piada sobre como seu lagarto de estimação Max gosta de comer gafanhotos. Mencione como você está ansioso para a equipe fora do local na próxima semana.
Resultado:
Querida Jill,
Parabéns pela sua promoção! Eu tenho admirado o grande trabalho que você tem feito e estou muito feliz pelo seu sucesso. Max, o lagarto, deve estar emocionado também - aposto que ele está ansioso para se banquetear com ainda mais gafanhotos!
Estou realmente ansioso para a equipe da próxima semana fora do local. Vai ser ótimo conversar com todos e debater algumas novas ideias.
Atenciosamente,
[Seu Nome]
Em geral, a escrita pode funcionar com qualquer estilo de prompt. Experimente para ver o que funciona melhor para o seu caso de uso.
Vantagens | Desvantagens | |
Modelos de acompanhamento de instruções (ex: text-davinci-003 ) | Mais fácil de usar | Menos criativo; menos diversificado; mais difícil de controlar tom, comprimento, etc. |
Modelos de mase (ex: davinci ) | Mais criativo | Mais caro (como incluir demonstrações de exemplos no prompt custará tokens) |
Modelos customizados | Pode treinar com muitos exemplos; mais barato do que incluir exemplos no prompt | É difícil coletar dados de treinamento; o treinamento torna a iteração mais lenta e mais cara |
2. Explicar texto
Uma capacidade de grandes modelos de linguagem é destilar informações de um pedaço de texto.
Isso pode incluir:
- Responder a perguntas sobre um texto, por exemplo:
- Consultar uma base de conhecimento para ajudar as pessoas a procurar coisas que não sabem
- Consultar um documento desconhecido para entender o que ele contém
- Consultar um documento com perguntas estruturadas para extrair tags, classes, entidades, etc.
- Resumindo o texto, por exemplo:
- Resumindo documentos longos
- Resumindo e-mails de ida e volta ou históricos de mensagens
- Resumindo notas detalhadas da reunião com pontos-chave e próximos passos
- Classificando texto, por exemplo:
- Classificando mensagens de feedback do cliente por tópico ou tipo
- Classificação de documentos por tópico ou tipo
- Classificar o tom ou o sentimento do texto
- Extraindo entidades, por exemplo:
- Extraindo informações de contato de uma mensagem do cliente
- Extrair nomes de pessoas ou empresas ou produtos de um documento
- Extrair coisas mencionadas nas avaliações ou comentários dos clientes
Responder a perguntas sobre um texto.
Exemplo de prompt para responder a perguntas sobre um texto:
Usando o texto a seguir, responda à seguinte pergunta. Se a resposta não estiver contida no texto, diga "Eu não sei.
Texto:
"""
Oklo Mine (às vezes Oklo Reactor ou Oklo Mines), localizado em Oklo, Gabão, na costa oeste da África Central, acredita-se ser o único reator de fissão nuclear natural.
Oklo consiste em 16 locais nos quais se acredita que as reações de fissão nuclear auto-sustentáveis ocorreram há aproximadamente 1,7 bilhão de anos e funcionaram por centenas de milhares de anos. Estima-se que tenha uma média de menos de 100 kW de energia térmica durante esse período.
"""
Pergunta: Quantos reatores de fissão natural já foram descobertos?
Resposta:
Um
Se o texto sobre o qual você deseja perguntar for maior que o limite do token (~4.000 tokens para texto-davinci-003 e ~2.000 tokens para modelos anteriores), recomendamos dividir o texto em partes menores, classificá-las por relevância e, em seguida, perguntar as partes mais relevantes.
Resumir um texto:
Um exemplo de prompt para resumo de texto com a API da OpenAI:
Resuma o seguinte texto.
Texto:
"""
Dois experimentos independentes relataram seus resultados esta manhã no CERN, o laboratório de física de alta energia da Europa, perto de Genebra, na Suíça. Ambos mostram evidências convincentes de uma nova partícula de bóson pesando cerca de 125 gigaelétron-volts, que até agora se encaixa nas previsões do Higgs feitas anteriormente por físicos teóricos.
“Como leigo, eu diria: 'Eu acho que nós temos isso'. Você concorda?“, Perguntou Rolf-Dieter Heuer, diretor-geral do CERN, ao auditório lotado. Os físicos reunidos lá explodiram em aplausos.
"""
Resumo:
Resultado:
O CERN anunciou a descoberta de uma nova partícula, o bóson de Higgs. Esta partícula foi prevista por físicos teóricos e é um grande passo em frente na nossa compreensão do universo.
Classificação
A melhor abordagem para classificar o texto depende se as classes são conhecidas com antecedência ou não.
Se suas classes são conhecidas com antecedência, a classificação é melhor feita com um modelo ajustado, como demonstrado em Fine-tuned_classification.ipynb.
Se suas classes não forem conhecidas com antecedência (por exemplo, elas são definidas por um usuário ou geradas instantaneamente), você pode tentar a classificação zero-shot dando uma instrução contendo as classes ou mesmo usando incorporações para ver qual rótulo de classe (ou outros textos classificados) são mais semelhantes ao texto (Zero-shot_classification.ipynb).
Extração de entidade
Um prompt de exemplo para extração de entidade:
Do texto abaixo, extraia as seguintes entidades no seguinte formato:
Empresas: <lista separada por vírgulas das empresas mencionadas>
Pessoas e títulos: <lista separada por vírgulas de pessoas mencionadas
(com seus títulos ou funções anexados entre parênteses
)>
Texto:
"""
Em março de 1981, Estados Unidos v. AT & T foi a julgamento sob o Procurador-Geral Adjunto William Baxter. O presidente da AT&T, Charles L. Brown, pensou que a empresa seria destruída. Ele percebeu que a AT&T perderia e, em dezembro de 1981, retomou as negociações com o Departamento de Justiça. Chegando a um acordo menos de um mês depois, Brown concordou com a alienação - a melhor e única alternativa realista. A decisão da AT&T permitiu que ela mantivesse seus braços de pesquisa e fabricação. O decreto, intitulado Modificação do Julgamento Final, foi um ajuste do Decreto de Consentimento de 14 de janeiro de 1956. O juiz Harold H. Greene recebeu a autoridade sobre o decreto modificado.
Em 1982, o governo dos EUA anunciou que a AT&T deixaria de existir como uma entidade monopolista. Em 1 de janeiro de 1984, foi dividido em sete empresas regionais menores, Bell South, Bell Atlantic, NYNEX, American Information Technologies, Southwestern Bell, US West e Pacific Telesis, para lidar com serviços telefônicos regionais nos EUA.
"""
Resultado:
Empresas: Estados Unidos v. AT&T, AT&T, Departamento de Justiça, Bell South, Bell Atlantic, NYNEX, American Information Technologies, Southwestern Bell, US West, Pacific Telesis
Pessoas e títulos: William Baxter (Procurador-Geral Adjunto), Charles L. Brown (presidente da AT&T), Harold H. Greene (Juiz)
3. Edição de texto
Além do ponto de extremidade da API de conclusão, o OpenAI agora oferece um ponto de extremidade da API de edição (postagem no blog).
Em contraste com as conclusões, que levam apenas uma única entrada de texto, as edições levam duas entradas de texto: a instrução e o texto a ser modificado.
Um exemplo de prompt de edição:
Entrada de instrução:
Corrija os erros de OCR
Entrada do texto:
Therewassomehostilityntheenergybehindthe researchreportedinPerceptrons....Part of ourdrivecame,aswequiteplainlyacknoweldgednourbook,fromhe facthatfundingndresearchnergywerebeingdissipatedon. . .misleadingttemptsouseconnectionistmethodsnpracticalappli-cations.
Resultado:
There was some hostility in the energy behind the research reported in Perceptrons....Part of our drive came, as we quite plainly acknowledged in our book, from the fact that funding and research energy were being dissipated on...misleading attempts to use connectionist methods in practical applications.
Tradução
A tradução é outra capacidade emergente de grandes modelos de linguagem.
Em 2021, o GPT-3 foi usado para estabelecer um novo recorde de última geração em tradução não supervisionada no benchmark inglês-francês WMT14.
Exemplo de solicitação de tradução usando o ponto de extremidade de edições:
Entrada de instrução:
tradução para o francês
Input de texto:
É a vida
Resultado:
C'est la vie.
Dicas para tradução de texto com GPT e inteligência artificial
Dicas para tradução:
- O desempenho é melhor nos idiomas mais comuns.
- Vimos melhor desempenho quando a instrução é dada no idioma final (portanto, se traduzir para o francês, dê a instrução
Traduire le texte de l 'anglais au français
em vez deTraduzir o seguinte texto do inglês para o francês
.) - A retrotradução (conforme descrito aqui) também pode aumentar o desempenho
- Texto com dois pontos e pontuação pesada pode desarmar os modelos de instrução seguinte, especialmente se a instrução está usando dois pontos (por exemplo,
Inglês: {texto em inglês} Francês:
) - O ponto de extremidade de edições foi visto às vezes repetindo a entrada de texto ao lado da tradução
Quando se trata de tradução, grandes modelos de linguagem brilham particularmente na combinação de outras instruções ao lado da tradução. Por exemplo, você pode pedir ao GPT-3 para traduzir o esloveno para o inglês, mas manter todos os comandos de composição tipográfica do LaTeX inalterados.
4. Comparação de textos
O ponto de extremidade de incorporações da API da OpenAI pode ser usado para medir a semelhança entre partes de texto (postagem no blog).
Ao alavancar a compreensão do texto pelo GPT-3, essas incorporações alcançaram resultados de última geração em benchmarks em ambientes de aprendizado não supervisionado e de transferência de aprendizado.
As incorporações podem ser usadas para pesquisa semântica, recomendações, análise de cluster, detecção quase duplicada e muito mais.
Busca semântica:
As Embeddings de pesquisa semântica podem ser usadas para pesquisa sozinhas ou como um recurso em um sistema maior.
A maneira mais simples de usar incorporações para pesquisa é a seguinte:
- Antes da pesquisa (pré-calcular):
- No momento da pesquisa (computação ao vivo):
- Incorporar a consulta de pesquisa
- Encontre as incorporações mais próximas em seu banco de dados
- Retorne os melhores resultados, classificados por similaridade de cosseno
Um exemplo de como usar incorporações para pesquisa é mostrado em Semantic_text_search_using_embeddings.ipynb.
Em sistemas de pesquisa mais avançados, a semelhança de cosseno de incorporações pode ser usada como um recurso entre muitos no ranking de resultados de pesquisa.
Recomendações
As recomendações são bastante semelhantes à pesquisa, exceto que, em vez de uma consulta de texto de forma livre, as entradas são itens em um conjunto.
Um exemplo de como usar incorporações para recomendações é mostrado em Recommendation_using_embeddings.ipynb.
Semelhante à pesquisa, essas pontuações de similaridade de cosseno podem ser usadas sozinhas para classificar itens ou como recursos em algoritmos de classificação maiores.
Personalização de incorporações
Embora os pesos do modelo de incorporação do OpenAI não possam ser ajustados, você ainda pode usar dados de treinamento para personalizar incorporações ao seu aplicativo.
No bloco de anotações a seguir, fornecemos um método de exemplo para personalizar suas incorporações usando dados de treinamento. A ideia do método é treinar uma matriz personalizada para multiplicar os vetores de incorporação, a fim de obter novas incorporações personalizadas. Com bons dados de treinamento, essa matriz personalizada destacará os recursos relevantes para seus rótulos de treinamento e suprimirá o resto.
Você pode equivalentemente considerar a multiplicação de matrizes como (a) uma modificação das incorporações ou (b) uma modificação da função de distância usada para medir as distâncias entre incorporações. Customizing_embeddings.ipynb
Capacidades de Código
Modelos de linguagem grandes não são apenas ótimos em texto – eles também podem ser ótimos em código. O modelo de código especializado da OpenAI é chamado Codex.
O Codex alimenta mais de 70 produtos, incluindo:
- GitHub Copilot (autocompleta código em VS Code e outros IDEs)
- Pygma (transforma projetos Figma em código)
- Replit (tem um botão ‘Explicar código' e outros recursos)
- Warp (um terminal inteligente com pesquisa de comando AI)
- Machinet (escreve modelos de teste de unidade Java)
Observe que, ao contrário dos modelos de texto que seguem instruções (por exemplo, text-davinci-003
), o Codex não é treinado para seguir instruções. Como resultado, projetar bons prompts pode ter mais cuidado.
1. Escrever código
Um exemplo de prompt para escrever código com code-davinci-002
:
SQL tables (and columns):
* Customers(customer_id, signup_date)
* Streaming(customer_id, video_id, watch_date, watch_minutes)
Uma consulta SQL bem escrita que lista os clientes que se inscreveram durante março de 2020 e assistiram a mais de 50 horas de vídeo nos primeiros 30 dias:
```
Resultado:
SELECT c.customer_id
FROM Customers c
JOIN Streaming s
ON c.customer_id = s.customer_id
WHERE c.signup_date BETWEEN '2020-03-01' AND '2020-03-31'
AND s.watch_date BETWEEN c.signup_date AND DATE_ADD(c.signup_date, INTERVAL 30 DAY)
GROUP BY c.customer_id
HAVING SUM(s.watch_minutes) > 50 * 60
code-davinci-002
é capaz de fazer inferências a partir de nomes de variáveis; por exemplo, ele infere que watch_minutes tem unidades de minutos e, portanto, precisa ser convertido por um fator de 60 antes de ser comparado com 50 horas.
2. Explicar código
A explicação do código pode ser aplicada a muitos casos de uso:
- Gerando documentação em código (por exemplo, docstrings Python, mensagens git commit)
- Geração de documentação fora de código (por exemplo, páginas de manual)
- Em uma ferramenta interativa de exploração de código
- Comunicar os resultados do programa aos usuários por meio de uma interface de linguagem natural
Um exemplo de prompt para explicar o código com o código-davinci-002
:
Uma query SQL:
```
SELECT c.customer_id
FROM Customers c
JOIN Streaming s
ON c.customer_id = s.customer_id
WHERE c.signup_date BETWEEN '2020-03-01' AND '2020-03-31'
AND s.watch_date BETWEEN c.signup_date AND DATE_ADD(c.signup_date, INTERVAL 30 DAY)
GROUP BY c.customer_id
HAVING SUM(s.watch_minutes) > 50 * 60
```
Perguntas:
1. O que essa query faz?
2. Por que alguém se interessaria por esse período?
3. Por que uma empresa se interessaria por essa query de SQL?
Resultado:
1. A consulta SQL encontra todos os clientes que se inscreveram em março de 2020 e assistiram a mais de 50 horas de conteúdo nos primeiros 30 dias após a inscrição.
2. O período de tempo é interessante porque é o primeiro mês da pandemia de COVID-19.
3. Uma empresa pode estar interessada nesta consulta SQL porque pode ajudá-los a entender como a pandemia afetou seus negócios.
3. Edição de código
O ponto de extremidade de edição do OpenAI é particularmente útil para editar código.
Exemplo de entrada de texto para code-davinci-edit-001
:
def tribonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n == 2:
return 1
elif n == 3:
return 2
else:
return tribonacci(n-1) + tribonacci(n-2) + tribonacci(n-3)
Exemplo de entradas de instruções:
Add a docstring
Add typing
Improve the runtime
Add a test
Translate to JavaScript (or Rust or Lisp ou qualquer outra linguagem de programação que deseje)
Exemplo de saída após melhorar o tempo de execução e traduzir para JavaScript:
function tribonacci(n) {
let a = 0;
let b = 1;
let c = 1;
for (let i = 0; i < n; i++) {
[a, b, c] = [b, c, a + b + c];
}
return a;
}
Como você pode ver, o code-davinci-edit-001
foi capaz de reduzir com sucesso o tempo de execução da função de exponencial para linear, bem como converter de Python para JavaScript.
4. Compare código
A API OpenAI também apresenta incorporações de pesquisa de código, que podem medir a relevância de uma seção de código para uma consulta de texto ou a semelhança entre duas seções de código.
As incorporações de pesquisa de código OpenAI melhoraram significativamente o estado da arte na suíte de avaliação CodeSearchNet, marcando 93,5% contra o recorde anterior de 77,4%.
Leia mais sobre as incorporações de código da OpenAI na documentação ou no anúncio no post do blog. Incorporações de código podem ser úteis para casos de uso como:
- Pesquisa de código
- Agrupamento e análise de base de código
Um exemplo de pesquisa de código é mostrado em Code_search.ipynb.
Não escrevemos um exemplo de cluster de código, mas a ideia é a mesma do cluster de texto em Clustering.ipynb.
Conclusão
Esse foi o guia introdutório de como usar a API da OpenAI. Espero que tenha começado a explicar esse universo de IA para criar integrações e serviços baseados nos produtos da OpenAI.
Há algo que deseje saber sobre o assunto? Não deixe de comentar abaixo e também aproveite para seguir outros conteúdos sobre Inteligência Artificial aqui no blog.
Divirta-se!