Além do básico: aprimorando a API Kotlin Ktor com pesquisa vetorial
Ricardo Mello8 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
Avalie esse Tutorial
Neste artigo, abordaremos técnicas avançadas do MongoDB em conjunto com a API Kotlin Ktor, desenvolvendo sobre a base estabelecida em nosso artigo anterior, Mestre emKotlin: Criando uma API com Ktor e MongoDB Atlas. Nosso foco será a integração de funcionalidades robustas, como o Abraçar o Face, o Vector Search e as Atlas Triggers para aumentar a funcionalidade e o desempenho da nossa API.
Começaremos fornecendo uma visão geral dessas técnicas avançadas do MongoDB e seu papel crítico no desenvolvimento de API atual. Posteriormente, abordaremos implementações práticas, mostrando como você pode integrar perfeitamente o Hugging Face para o processamento de linguagem natural, aproveitar o Vector Atlas Search para recuperação rápida de dados e automatizar processos de banco de dados usando as funções e os gatilhos do Atlas.
- Observação: Comece a usar o MongoDB Atlas gratuitamente! Se você ainda não tiver uma conta, o MongoDB oferece um cluster Atlas gratuito para sempre.
- Abraçando a contado Face
- Código fonte do artigo anterior
Começaremos importando um conjunto de dados de exercícios de condicionamento físico para o MongoDB Atlas como documentos. Em seguida, criaremos um trigger que será ativado na inserção. Para cada documento do conjunto de dados, uma função será invocada para solicitar a API do Hugging Face. Esta função enviará a descrição do exercício para conversão em um array incorporado, que será salvo na coleção de exercícios como descEmbedding:
Na segunda parte, modificaremos o aplicativo Kotlin Ktor para incorporar chamadas de clientes HTTP, permitindo a interação com a API Hugging Face. Além disso, criaremos um endpoint /exercises/processRequest. Esse endpoint aceitará uma entrada de texto, que será processada usando a API Hugging Face para gerar uma matriz incorporada. Posteriormente, compararemos essa array com o descEmbedding gerado na primeira parte. Utilizando a pesquisa vetorial, retornaremos os três resultados mais próximos (neste caso, os exercícios de condicionamento físico mais relevantes para minha pesquisa):
A primeira etapa para atingir nosso objetivo é criar uma collection vazia chamada "exercícios" que posteriormente armazenará nosso conjunto de dados. Comece fazendo login em sua conta MongoDB Atlas. No dashboard do Atlas, navegue até seu cluster e selecione o banco de dados onde você deseja criar a collection. Clique na aba "Coleções" para gerenciar suas collections dentro desse banco de dados e criar um campo vazio collection deexercícios:
Em seguida, precisamos criar um trigger que será ativado sempre que um novo documento for inserido na collection deexercícios. Navegue até a guiaTriggers e crie um trigger chamado "Trigger_Exercises", conforme mostrado nas imagens abaixo:
Lembre-se de escolher a coleção " exercises ", selecionar " Inserir documento " para o tipo de operação e ativar " Documento completo.”
Por fim, cole o seguinte código de função no campo "Função" e clique em "Salvar":
Essa função serve como uma ponte entre o MongoDB e a API Hugging Face, aprimorando documentos armazenados em uma coleção do MongoDB com incorporações geradas pela API. A função é acionada por um evento de alteração na coleção MongoDB, especificamente quando um novo documento é inserido ou um documento existente é atualizado.
Agora, vamos explorar a funcionalidade desta função:
- Tratamento de eventos: a função extrai o documento completo do evento de alteração do MongoDB paraser processado.
- Interação da API Hugging Face: ela interage com a API Hugging Face para obter uma incorporação para a descrição do documento. Isso envolve o envio de uma solicitação HTTP POST para o endpoint de extração de recursos da API, com a descrição do documento como entrada.
- Atualização do MongoDB: ao receber uma resposta bem-sucedida da API Hugging Face, a função atualiza o documento na collection MongoDB com a incorporação extraída. Isso Enriquece o documento com informações adicionais úteis para várias tarefas de processamento de linguagem natural.
Para alinhar nosso ambiente com a imagem de demonstração, vamos alterar o nome da nossa função para Function_Exercises. Para fazer isso, acesse o menu "Functions" e edite a função:
Em seguida, digite o novo nome e clique em “Save:
A função que criamos anteriormente requer um token para acessar o Hugging Face. Precisamos obtê-lo e configurá-lo no Atlas. Para fazer isso, faça login na sua conta Hugging Face e acesse as configurações para criar sua chave:
Depois de copiar sua chave, vamos retornar ao MongoDB Atlas e configurar nossa chave para acesso. Clique no botão "Valores" no menu lateral e selecione "Create New Value":
Agora, precisamos criar um segredo e um valor que será associado a este segredo.
Primeiro, crie o segredo inserindo a chave a partir do Abraço do Face:
Em seguida, crie um valor chamado HF_value (que será usado em nossa função) e associe-o ao segredo, como mostra a imagem:
Se tudo tiver corrido perfeitamente, nossos valores ficarão assim:
Terminamos de configurar nosso ambiente. Para recapitular:
Criando a coleção vazia:
- Criamos uma coleção vazia denominada "exercícios" no MongoDB Atlas. Esta coleção receberá dados de entrada, acionando um processo para converter a descrição dos exercícios em valores incorporados.
** Configurando gatilhos e funções:
- Um trigger chamado "Trigger_Exercises" foi criado para ser ativado após a inserção do documento.
- O trigger chama uma função chamada "Function_Exercises" para cada documento inserido.
- A função processa a descrição usando a API Hugging Face para gerar valores incorporados, que são então adicionados à collection " exercises ".
Configuração final:
- Para concluir a configuração, associamos um segredo e um valor à chave Abraçando a face no MongoDB Atlas.
Nesta etapa, importaremos um conjunto de dados de documentos 50 contendo informações sobre exercícios:
Para atingir esse objetivo, usarei asferramentas do MongoDB para importar o arquivoconcerns.json por meio da linha de comando. Após instalar o MongoDB Tools, basta colar o arquivo "exercises.json" na pasta "bin" e executar o comando, conforme mostrado na imagem abaixo:
Aviso: lembre-se de alterar seu usuário, senha e cluster.
Se tudo correr bem, veremos que importamos os exercícios 50.
Agora, vamos verificar os registros de nossa função para garantir que tudo correu bem. Para fazer isso, navegue até a aba "App Services" e clique em "Logs":
E agora, vamos ver nossa coleção:
Como podemos ver, transformamos as descrições dos exercícios 50 em valores vetoriais e os atribuímos ao campo "descEmbedding".
Vamos prosseguir com as alterações em nosso aplicativo Kotlin. Se ainda não fez isso, você pode baixar o aplicativo. Nosso objetivo é criar um endpoint /processRequest para enviar uma entrada para o HuggingFace, como:
"Preciso de um exercício para os meus quadris e para perder a gordu ras da abdome."
Converteremos essas informações em dadosincorporados e utilizaremos o Vector Search para retornar os três exercícios que mais se aproximam dessa entrada. Para começar, vamos incluir duas dependências no arquivo build.gradle.kts que nos permitirão fazer chamadas HTTP para o Hugging Face:
build.gradle.kts
No pacote
ports
, criaremos um repositório que recuperará exercícios do banco de dados:domain/ports/ExercisesRepository
Criaremos uma resposta para exibir algumas informações ao usuário:
application/response/ExercisesResponse
Agora, crie a classeExercícios:
domínio/entidade/Exercícios
Em seguida, implementaremos nossa interface que se comunicará com o banco de dados executando uma query agregada usando a pesquisa vetorial que criaremos posteriormente.
infrastructure/ExercisesRepositoryImpl
Agora, vamos criar nosso endpoint para acessar o Hugging Face e chamar o método criado anteriormente:
application/routes/ExercisesRoutes (aplicativos/rotas/ExercíciosRotas)
Em seguida, vamos criar a solicitação que enviaremos para Abraçando a face. Nesta classe, além da entrada, temos um conversor para converter o retorno de String para Double:
application/request/SentenceRequest
Vamos incluir a rota criada anteriormente e um método
huggingFaceApiUrl
em nossa classe Aplicativo. Aqui está o código completo:Application.kt
Por fim, vamos incluir o ponto de extremidade do Hugging Face no arquivo application.conf.
application.conf
Agora, precisamos Go ao Atlas e criar nosso índice de pesquisa vetorial. Acompanhe as imagens abaixo:
Selecione o Atlas Vector Search:
Se estiver tudo bem, você verá uma mensagem de sucesso como a abaixo, indicando que o índice foi criado com sucesso no MongoDB Atlas:
Este trecho de código define um índice vetorial no campo descEmbedding em nossa collection de exercícios. O campo de tipo especifica que este é um índice de vetor. O campo de caminho indica o caminho para o campo que contém os dados do vetor. Neste caso, estamos usando o campo descEmbedding. O campo numDimensions especifica o número de dimensões
dos vetores, que é 384 neste caso. Por fim, o campo de similaridade especifica a métrica de similaridade a ser usada para comparar vetores, que é a distância euclidiana.
Depois de implementar as atualizações e configurações mais recentes, é hora de testar o aplicativo. Vamos começar executando o aplicativo. Abra o
Application.kt
e clique no botão Executar:Quando o aplicativo estiver instalado e funcionando, você poderá prosseguir com o teste usando o seguinte comando curl:
Este artigo mostrou como enriquecer documentos do MongoDB com incorporações da API Hugging Face, aproveitando seus poderosos recursos de processamento de linguagem natural. A função fornecida demonstra o tratamento de eventos de mudança em uma coleção do MongoDB e a interação com uma API externa. Essa integração oferece aos desenvolvedores oportunidades de aprimorar seus aplicativos com recursos de NLP, destacando o potencial de combinar tecnologias para aplicativos mais inteligentes.
Se você tiver alguma dúvida ou quiser discutir outras implementações, fique à vontade para entrar em contato com o fórum dacomunidade de desenvolvedores do MongoDB para obter suporte e orientação.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.