ChatGPT e Elasticsearch: um plugin para usar o ChatGPT com seus dados do Elastic
Você pode ter lido este post anterior do blog sobre nossa jornada para conectar as funcionalidades de relevância do Elasticsearch com as funcionalidades de resposta a perguntas da OpenAI. A ideia principal naquele post era ilustrar como usar o Elastic com o modelo GPT da OpenAI para criar uma resposta e retornar conteúdo relevante ao contexto para os usuários.
A aplicação que construímos pode expor um endpoint de busca e ser chamada por qualquer serviço de frontend. A boa notícia é que agora a OpenAI lançou um alfa privado do futuro framework do plugin do ChatGPT.
Neste post, você verá como implementar o plugin e estender o uso do ChatGPT para qualquer conteúdo indexado no Elasticsearch, usando a documentação do Elastic.
O que é um plugin do ChatGPT?
Os plugins do ChatGPT são extensões desenvolvidas para auxiliar o modelo a completar seu conhecimento ou executar ações.
Por exemplo, sabemos que o ponto de corte do ChatGPT da perspectiva do conhecimento é setembro de 2021, portanto, qualquer pergunta sobre dados recentes não será respondida. Além disso, qualquer pergunta relacionada a algo muito específico além dos limites daquilo em que o modelo foi treinado não será respondida.
Os plugins podem ampliar o escopo das possíveis aplicações e aprimorar as funcionalidades dos modelos, mas, reciprocamente, a saída do plugin é aumentada pelo próprio modelo.
A lista oficial de plugins atualmente compatíveis com o ChatGPT está listada abaixo. Essa lista deverá se expandir rapidamente à medida que mais organizações forem fazendo seus experimentos com o ChatGPT:
Ao examinar a lista, você notará que os casos de uso estão se revelando aos poucos aqui. No caso da Expedia, por exemplo, seu plugin está estendendo o ChatGPT para auxiliar no planejamento de viagens, transformando o ChatGPT em um assistente de planejamento de viagens.
O objetivo deste post é alcançar objetivos semelhantes para a Elastic — permitir que o ChatGPT acesse a base de conhecimento atual da Elastic e ajude você com seus projetos da Elastic.
Arquitetura
Vamos trazer uma pequena modificação que tem um impacto positivo de custo na amostra de código apresentada na parte 1 pelo meu colega Jeff Vestal.
Vamos remover a chamada para a API da OpenAI, pois agora o ChatGPT cumprirá o papel de pegar o conteúdo do Elasticsearch e digeri-lo de volta para o usuário:
1. O ChatGPT faz uma chamada para o endpoint `/search` do plugin.
- Essa decisão é baseada nas “regras” do plugin `description_for_human` (veja o manifesto do plugin abaixo).
2. O código do plugin cria uma solicitação de busca que é enviada ao Elasticsearch.
3. O corpo da documentação e o URL original são retornados ao Python.
4. O plugin retorna o corpo do documento e o URL em forma de texto ao ChatGPT.
5. O ChatGPT usa as informações do plugin para criar sua resposta.
Novamente, este post pressupõe que você tenha configurado sua conta do Elastic Cloud, vetorizou seu conteúdo e tenha um cluster do Elasticsearch preenchido com dados prontos para serem usados. Se você não configurou tudo isso, consulte nosso post anterior para ver como seguir as etapas em detalhes.
Código do plugin
A OpenAI construiu um framework de plugin bastante simples de manusear para o ChatGPT. Ele implanta um serviço que expõe:
- O manifesto do plugin, explicando o que o plugin oferece aos usuários e ao ChatGPT
- A definição de openAPI do plugin, que é a descrição funcional que permite ao ChatGPT entender as APIs disponíveis
Estrutura do arquivo do plugin
A captura de tela abaixo mostra como é a estrutura:
- O manifesto do plugin é armazenado no arquivo ai-plugin.json no diretório .well-known de acordo com as práticas recomendadas da OpenAI.
- O código do serviço principal está em app.py.
- O Dockerfile será usado posteriormente para implantar o plugin no Google Cloud Compute.
- O logotipo do plugin (logo.ong) conforme exibido na loja de plugins do ChatGPT, aqui o logotipo da Elastic.
- A descrição da OpenAPI para o plugin.
Código Python
Para obter o código completo, consulte o repositório do GitHub. Vamos olhar apenas para a parte principal deste código:
…
@app.get("/search")
…
@app.get("/logo.png")
…
@app.get("/.well-known/ai-plugin.json")
…
@app.get("/openapi.yaml")
…
Tiramos todos os detalhes e mantivemos as partes principais aqui. Existem duas categorias de APIs aqui:
1. A exigida pela OpenAI para construir um plugin:
- /logo.png: recupera o logotipo do plugin
- /.well-known/ai-plugin.json: busca o manifesto do plugin
- /openapi.yaml: busca a descrição da OpenAPI para o plugin
2. A API do plugin:
- /search é a única aqui exposta ao ChatGPT que executa a busca no Elasticsearch
Manifesto do plugin
O manifesto do plugin é o que o ChatGPT usará para validar a existência (alcançável) do plugin. A definição é a seguinte:
{
"schema_version": "v1",
"name_for_human": "ElasticGPTDoc_Plugin",
"name_for_model": "ElasticGPTDoc_Plugin",
"description_for_human": "Elastic Assistant, you know, for knowledge",
"description_for_model": "Get most recent elasticsearch docs post 2021 release, anything after release 7.15",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "PLUGIN_HOSTNAME/openapi.yaml",
"is_user_authenticated": false
},
"logo_url": "PLUGIN_HOSTNAME/logo.png",
"contact_email": "info@elastic.co",
"legal_info_url": "http://www.example.com/legal"
}
Há algumas coisas a apontar aqui:
1. Existem duas descrições:
- description_for_human — Isso é o que o humano vê ao instalar o plugin na UI da web do ChatGPT.
- description_for_model — Instruções para o modelo entender quando usar o plugin.
2. Existem alguns espaços reservados, como PLUGIN_HOSTNAME, que são substituídos no código Python.
Definição da OpenAPI
Nosso código exporá apenas um único endpoint de API ao ChatGPT, permitindo que ele faça buscas na documentação da Elastic. Aqui está a descrição:
openapi: 3.0.1
info:
title: ElasticDocGPT
description: Retrieve information front the most recent Elastic documentation
version: 'v1'
servers:
- url: PLUGIN_HOSTNAME
paths:
/search:
get:
operationId: search
summary: retrieves the document matching the query
parameters:
- in: query
name: query
schema:
type: string
description: use to filter relevant part of the elasticsearch documentations
responses:
"200":
description: OK
Para o arquivo de definição, os pontos-chave são:
- Pegamos o conteúdo do prompt do ChatGPT e o passamos como uma consulta para nosso cluster do Elasticsearch.
- Alguns espaços reservados, como PLUGIN_HOSTNAME, são substituídos no código Python.
Implantando o plugin da Elastic no Google Cloud Platform (GCP)
Você pode escolher um método de implantação para expor seu plugin, bem como usar outro provedor de serviços em nuvem. Neste post, usamos o GCP, mais especificamente o Google Cloud Run e o Google Cloud Build. O primeiro é para expor e executar o serviço, e o segundo é para integração contínua.
Configuração
Esta configuração pressupõe que seu usuário do GCP tenha as permissões corretas para:
- Criar uma imagem de container com o Google Cloud Build no Google Container Registry
- Implantar um container no Google Cloud Run
Caso contrário, você precisará atualizar as permissões na página IAM do GCP.
Vamos usar a CLI gcloud para configurar nosso ambiente. Veja as instruções de instalação aqui.
Após a instalação, execute o seguinte comando para autenticar:
gcloud auth
Em seguida, defina o identificador para seu projeto do GCP:
gcloud config set project PROJECT_ID
Agora está tudo pronto para você criar e implantar.
Criar e implantar
A primeira etapa é criar a imagem do container usando o Cloud Build e enviá-la para o Google Container Registry:
gcloud builds submit --tag gcr.io/PROJECT_ID/my-python-app
Substitua PROJECT_ID pelo ID do projeto do GCP e my-python-app pelo nome que você deseja atribuir à imagem do container.
Exporte o ambiente exigido pelo código Python para criar o cliente do Elasticsearch:
export YOUR_CLOUD_ID=VALUE
export YOUR_CLOUD_PASS=VALUE
export YOUR_CLOUD_USER=VALUE
Por fim, implante a imagem do container no Cloud Run:
gcloud run deploy my-python-app \
--image gcr.io/PROJECT_ID/my-python-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars cloud_id=YOUR_CLOUD_ID,cloud_pass=YOUR_CLOUD_PASS,cloud_user=YOUR_CLOUD_USER
Você deverá ver seu serviço em execução no Cloud Run:
Observe que você também pode ativar a integração contínua para que qualquer commit no seu repositório do GitHub dispare uma reimplantação. Na página de detalhes do serviço, clique em Set up continuous deployment (Configurar implantação contínua).
Instalando o plugin no ChatGPT
Depois que o plugin for implantado e tiver um endpoint acessível publicamente, ele poderá ser instalado no ChatGPT. No nosso caso, como isso é implantado no Google Cloud Run, você pode obter o URL aqui:
Então, em ChatGPT, acesse a loja de plugins:
Escolha “Develop your own plugin” (Desenvolver seu próprio plugin):
Cole o URL que você copiou da página do Google Cloud Run:
Verifique se o plugin foi encontrado e está válido:
Siga as instruções de instalação até ver seu plugin disponível na lista:
Vamos testar nosso plugin!
OK, agora a melhor parte! Lembre-se de que o ChatGPT decide delegar se seu prompt vai além do conhecimento dele. Para garantir que isso aconteça, basta fazer uma pergunta semelhante a este exemplo:
Com as etapas fornecidas neste post, você pode criar seu próprio plugin e implantá-lo em um provedor de serviços em nuvem ou em seus próprios hosts. Assim, você poderá começar a explorar o aprimoramento do conhecimento e da funcionalidade do ChatGPT, melhorando uma ferramenta já incrível com conhecimento especializado e proprietário.
Você pode experimentar todas as funcionalidades discutidas neste post hoje! Comece inscrevendo-se para fazer uma avaliação gratuita do Elastic Cloud.
Aqui estão outros posts que você pode achar interessantes:
- ChatGPT and Elasticsearch: OpenAI meets private data (ChatGPT e Elasticsearch: o encontro da OpenAI com dados privados)
- Monitor OpenAI API and GPT models with OpenTelemetry and Elastic (Monitore a API do OpenAI e os modelos do GPT com o OpenTelemetry e a Elastic)
- Exploring the Future of Security with ChatGPT (Explorando o futuro da segurança com o ChatGPT)
Neste post do blog, podemos ter usado ferramentas de IA generativa de terceiros, que pertencem a seus respectivos proprietários e são operadas por eles. A Elastic não tem nenhum controle sobre as ferramentas de terceiros e não temos nenhuma responsabilidade por seu conteúdo, operação ou uso, nem por qualquer perda ou dano que possa surgir do uso de tais ferramentas. Tenha cuidado ao usar ferramentas de IA com informações pessoais, sensíveis ou confidenciais. Os dados que você enviar poderão ser usados para treinamento de IA ou outros fins. Não há garantia de que as informações fornecidas serão mantidas em segurança ou em confidencialidade. Você deve se familiarizar com as práticas de privacidade e os termos de uso de qualquer ferramenta de IA generativa antes de usá-la.
Elastic, Elasticsearch e marcas associadas são marcas comerciais, logotipos ou marcas registradas da Elasticsearch N.V. nos Estados Unidos e em outros países. Todos os outros nomes de empresas e produtos são marcas comerciais, logotipos ou marcas registradas de seus respectivos proprietários.