O que está por trás do sistema de plugins do ChatGPT

Este mês, a OpenAI apresentou um novo recurso para o ChatGPT: um sistema de plugins. De acordo com o material divulgado, o ChatGPT agora pode ser estendido e realizar novas tarefas, como:

  • Obter informações em tempo real - resultados de esportes, preços de ações, últimas notícias, etc.
  • Obter informações baseadas em conhecimento - documentos de empresas, anotações pessoais, etc.
  • Realizar ações em nome do usuário - reservar um voo, pedir comida, etc.

Sistema de plugins do ChatGPT

Ao utilizar esses plugins, o ChatGPT agora pode pesquisar na web por respostas atualizadas. Isso remove a dependência da sua base de conhecimento, que foi treinada com dados até setembro de 2021.

Sistema de plugins do ChatGPT

Crie seus próprios plugins

A OpenAI também permitiu que qualquer desenvolvedor crie seus próprios plugins. No momento, os desenvolvedores precisam entrar em uma lista de espera. No entanto, documentação para criar os plugins já está disponível.

Você pode encontrar aqui mais informações sobre como funciona o fluxo de criação de um plugin e aqui você pode encontrar alguns códigos de exemplo.


Infelizmente, a documentação mostra apenas como a integração de APIs de terceiros e o ChatGPT funcionam. Se você é curioso como eu, provavelmente está se perguntando como os detalhes internos dessa integração funcionam. Você deve estar se perguntando:

“Como é possível um modelo de linguagem grande realizar ações em vez de gerar texto quando não foram treinados para isso?”

Então, é isso que vamos investigar agora.

Conheça o LangChain

LangChain é uma ferramenta desenvolvida por Harrison Chase (hwchase17) em 2022. Seu objetivo é ajudar desenvolvedores a integrar aplicativos de terceiros em grande modelos de linguagem (LLMs).

Para explicar como funciona, vou usar um dos exemplos.

import os  
os.environ["SERPAPI_API_KEY"] = "<your_api_key_here>"  
os.environ["OPENAI_API_KEY"] = "<your_api_key_here>"   
  
from langchain.agents import load_tools  
from langchain.agents import initialize_agent  
from langchain.llms import OpenAI  
  
# Primeiro, vamos carregar o modelo de linguagem que vamos usar para controlar o agente.  
llm = OpenAI(temperature=0)  
  
# Em seguida, vamos carregar algumas ferramentas para usar. Observe que a ferramenta `llm-math` usa um LLM, então precisamos passar isso.  
tools = load_tools(["serpapi", "llm-math"], llm=llm)  
  
# Finalmente, vamos inicializar um agente com as ferramentas, o modelo de linguagem e o tipo de agente que queremos usar.  
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)  
  
# Agora vamos testá-lo!  
agent.run("Quem é o namorado de Olivia Wilde? Qual é a idade dele elevada à potência de 0,23?")

Deste exemplo, podemos ver três componentes principais:

  • LLM: LLMs são um componente central do LangChain. Ele ajuda o agente a entender a linguagem natural. Neste exemplo, o modelo padrão da OpenAI foi utilizado. De acordo com o código-fonte, o modelo padrão é o text-davinci-003.
  • Agente: Agentes usam um LLM para decidir quais ações tomar e em qual ordem. Uma ação pode ser usar uma ferramenta e observar sua saída ou retornar uma resposta ao usuário.
    • Estamos usando aqui zero-shot-react-description. Pela documentação, podemos entender que “Este agente usa o framework ReAct para determinar qual ferramenta usar com base apenas na descrição da ferramenta.” Usaremos essa informação mais tarde 😉 .
  • Ferramentas: Funções que os agentes podem usar para interagir com o mundo. Neste exemplo, duas ferramentas são usadas:
    • serpapi: um wrapper em torno da API https://serpapi.com/. É usado para navegar na web.
    • llm-math: permite ao agente responder a perguntas relacionadas à matemática, como “Qual é a idade dele elevada à potência de 0,23?” no prompt.

Ao executar o script, o agente faz várias coisas, como pesquisar quem é o namorado de Olivia Wilde, extrair seu nome, perguntar a idade de Harry Styles, realizar a busca e calcular 29^0,23, que é 2,16…, usando a ferramenta llm-math.

LangChain rodando no terminal LangChain rodando no terminal

A grande vantagem do LangChain é que ele não depende de um único provedor, como apresentado na documentação.

Por que eu acho que o LangChain alimenta o sistema de plugins do ChatGPT?

Em 21 de março, a Microsoft, parceira mais forte da OpenAI, lançou MM-REACT: Prompting ChatGPT for Multimodal Reasoning and Action.

Ao analisar as capacidades desse “paradigma de sistema”, como eles o chamam, podemos ver que cada exemplo envolve uma interação entre um modelo de linguagem e algum aplicativo externo.

Diagrama MM-React Créditos da imagem: https://multimodal-react.github.io/

Ao examinar o código de exemplo fornecido, podemos ver que a implementação da interação modelo+ferramentas foi feita usando LangChain. O arquivo README.md também afirma: “O código MM-REACT é baseado no langchain.”

Combinando essas evidências, além da seguinte frase da documentação dos plugins do ChatGPT, “A descrição do plugin, solicitações de API e respostas de API são todas inseridas na conversa com o ChatGPT.” Podemos presumir que o sistema de plugins adiciona os diferentes plugins como ferramentas para o agente, que é o ChatGPT.

É provável também que a OpenAI tenha transformado o ChatGPT em um agente do tipo zero-shot-react-description para suportar os plugins (o mesmo tipo que vimos no exemplo anterior). Digo isso porque a descrição da API é inserida na conversa, o que corresponde ao que o agente espera, como você pode ler no trecho da documentação abaixo:

Agente de descrição zero shot do LangChain

Conclusão

Embora o sistema de plugins ainda não esteja disponível para os usuários, podemos usar a documentação divulgada e a implementação do MM-REACT para entender o que alimenta o sistema de plugins do ChatGPT.

Até o próximo post! 👋

Caso queira entrar em contato, você pode me encontrar no Twitter ou no LinkedIn.