Responda perguntas a partir de uma tabela vetorial
Responda a uma pergunta a partir de uma function com os trechos mais próximos de uma tabela vetorial do SQL Database e um modelo de chat que os cita.
Você responde a uma pergunta a partir de uma function: ela gera o embedding da pergunta com um modelo no AI Inference, recupera os trechos mais próximos de uma tabela vetorial do SQL Database com vector_top_k e pede a um modelo de chat que responda a partir deles e os cite. Os trechos vêm de documentos em um bucket do Object Storage, que uma segunda function na mesma aplicação ingere. Para o padrão geral de ingestão, consulte Gere embeddings de documentos em uma tabela vetorial com AI Inference.
Pré-requisitos
- Uma aplicação e um workload que servem o seu domínio, com o Application Accelerator ativado, que o behavior Run Function exige. Para criá-los, consulte Primeiros passos com Applications.
- SQL Database habilitado na conta. O produto está em Preview e não vem habilitado por padrão, então solicite acesso pelo Technical Support.
- Uma tabela
passagescom um índice vetorialpassages_idxpara vetores de 1.024 dimensões. Para criá-los, consulte Crie a tabela vetorial. - Um bucket do Object Storage com
workloads_accessdefinido comoread_only, que guarda os documentos como arquivos de texto UTF-8 ou Markdown. Para criar o bucket e enviar os arquivos, consulte Primeiros passos com Object Storage. - Um personal token com a permissão Edit SQL Database, para as chamadas ao banco de dados. Para criar um, consulte Gerencie personal tokens.
- A Azion CLI, instalada e autorizada, para armazenar as variáveis de ambiente.
Os exemplos usam support-docs para o bucket, support-kb para o banco de dados, returns-policy.md para um documento dentro dele, /admin/ingest e /api/ask para os dois caminhos e www.example.com para o domínio. Substitua-os pelos seus valores.
Faça a ingestão dos documentos de um bucket
A function de ingestão transforma um documento em linhas de passages: ela lê o documento no bucket, o divide em trechos de até 1.500 caracteres, gera os embeddings de todos eles em uma chamada e os grava pela API da Azion, porque a conexão do runtime com um banco de dados é somente leitura. A rota grava no banco de dados, então ela recusa uma requisição sem o segredo de ingestão.
Para armazenar os quatro valores que a function lê, execute estes comandos com a Azion CLI. Uma key que contém token ou secret é armazenada como secret por padrão:
Crie as variáveis antes da function: uma function que já está em execução não lê um valor alterado até receber um novo deploy.
Crie uma function chamada support-ingest com este código:
Execute a function no caminho dela com estes valores, seguindo Primeiros passos com Functions:
- Instância da function:
support-ingest, sem Args. - Regra: uma regra de Request Phase chamada
support - ingest, com o critério${uri}starts with/admin/ingeste o behavior Run Function selecionando a instânciasupport-ingest.
Para criar a regra no Azion Console ou pela API, consulte Adicione a regra que executa a função.
Um POST para /admin/ingest com o segredo e a key de um documento substitui os trechos desse documento em passages e responde com o número de trechos armazenados. O DELETE faz com que uma segunda ingestão da mesma key substitua as linhas dela em vez de duplicá-las.
Para fazer a ingestão do documento de exemplo:
A function responde com a key e o número de trechos que armazenou, como {"key":"returns-policy.md","passages":3}. Uma requisição sem o header Authorization responde 401. Para contar as linhas do documento pela API do SQL Database:
A única entrada em data traz results, cuja única linha guarda o mesmo número que a ingestão retornou.
O caso de uso Criar e executar assistentes de IA para suporte ao cliente usa os valores deste exemplo.
Estas verificações confirmam o caso de uso Criar e executar assistentes de IA para suporte ao cliente.
Armazene o nome do banco de dados
A function abre o banco de dados pelo nome, por uma réplica de leitura.
Para armazenar o nome do banco de dados que a function abre, execute:
A conta guarda a variável SQL_DATABASE_NAME, que a function lê com Azion.env.get().
O caso de uso Criar e executar assistentes de IA para suporte ao cliente usa os valores deste exemplo.
Crie a function do assistente
A function gera o embedding da pergunta com o mesmo modelo e a mesma largura dos trechos, recupera os quatro trechos mais próximos e os envia ao modelo de chat com as seis últimas mensagens de history e a pergunta. Ela grava uma linha de log "event":"answer" por resposta, registrando se a resposta cita um trecho.
Crie uma function chamada support-assistant com este código:
Para criar a function e a sua instância, siga Primeiros passos com Functions com o nome support-assistant e dê à instância o nome support-assistant, sem Args.
A aplicação tem uma instância support-assistant que responde a uma pergunta a partir dos trechos mais próximos dela.
O caso de uso Criar e executar assistentes de IA para suporte ao cliente usa os valores deste exemplo.
Execute a function no caminho
Crie uma regra de Request Phase como mostra Adicione a regra que executa a função, com o nome support - ask, o critério ${uri} is equal /api/ask e o behavior Run Function selecionando a instância support-assistant.
Um POST para /api/ask com uma pergunta responde com a resposta do modelo, que cita trechos como [n], e com o documento de onde veio cada trecho citado. Uma regra nova leva alguns minutos para se propagar.
Confirme que as respostas citam os documentos
Para fazer uma pergunta que o documento responde:
A resposta traz answer, com pelo menos uma citação [n], e sources, cujas entradas indicam returns-policy.md.
Faça uma pergunta que nenhum documento cobre, como What is the capital of France?. A resposta diz que o assistente não sabe e não traz nenhuma citação.
A function responde a partir dos trechos da tabela, e apenas deles.
Estas verificações confirmam o caso de uso Criar e executar assistentes de IA para suporte ao cliente.