Usando funções do Azure LLM com o Elasticsearch para experiências de consulta mais inteligentes

Explore um exemplo de aplicativo de busca imobiliária que usa as Funções LLM do Azure Gen AI com o Elasticsearch para fornecer resultados de busca híbridos e flexíveis. Veja passo a passo como configurar e executar o aplicativo de exemplo no GitHub Codespaces.

O Elasticsearch conta com integrações nativas com as principais ferramentas e provedores de IA generativa do setor. Confira nossos webinars sobre como ir além do básico do RAG ou criar aplicativos prontos para produção com o banco de dados vetorial da Elastic.

Para criar as melhores soluções de busca para seu caso de uso, inicie um teste gratuito na nuvem ou experimente o Elastic em sua máquina local agora mesmo.

Precisão. Quando importa, importa muito. Quando você está procurando por algo específico, a precisão é muito importante. No entanto, às vezes uma consulta muito precisa não retorna resultados, por isso é vantajoso ter a flexibilidade de ampliar o escopo de uma consulta para encontrar dados adicionais potencialmente relevantes.

Esta postagem do blog aborda o uso do Elasticsearch e do Azure Open AI para criar um aplicativo de exemplo que demonstra como encontrar resultados exatos ao pesquisar por propriedades imobiliárias muito específicas, ao mesmo tempo em que fornece resultados relevantes quando uma correspondência específica não está disponível. Percorreremos todas as etapas necessárias para criar um índice do Elasticsearch junto com um modelo de pesquisa. Em seguida, descreveremos todo o processo de como criar um aplicativo que usa o Azure OpenAI para receber consultas de usuários e transformá-las em consultas de modelo de pesquisa do Elasticsearch que podem produzir resultados incrivelmente personalizados.

Aqui está uma lista de todos os recursos que usaremos para criar nosso aplicativo de exemplo de busca de imóveis:

Fluxo de trabalho de consulta inteligente

Este fluxo de trabalho combina LLM, ferramentas LLM e pesquisa para transformar consultas de linguagem natural em resultados de pesquisa estruturados e relevantes:

  • LLM (Large Language Model) - Interpreta consultas complexas do usuário e orquestra ferramentas para extrair intenção de pesquisa e enriquecer o contexto.
  • Ferramentas LLM - Cada ferramenta LLM é um programa em C# que criamos para este post. Existem três ferramentas:
    • Ferramenta de extração de parâmetros: extrai atributos-chave como quartos, banheiros, recursos e preço da consulta.
    • Ferramenta GeoCode: converte nomes de locais em latitude/longitude para filtragem espacial.
    • Ferramenta de pesquisa: preenche um modelo de pesquisa do Elasticsearch com parâmetros de consulta e executa uma pesquisa. Pesquisa híbrida - Executa pesquisa híbrida (texto completo + vetor denso) com inferência de ML integrada. Essa abordagem em camadas garante experiências de consulta mais inteligentes e sensíveis ao contexto para o usuário final.

Arquitetura de aplicação

Aqui está um diagrama de arquitetura do sistema do aplicativo de exemplo. Usaremos um Jupyter Notebook do Codespaces para interagir com o Elastic Cloud.

Pré-requisitos

[@portabletext/react] Unknown block type "block", specify a component for it in the `components.types` prop

Clonar repositório de aplicativo de exemplo no Codespaces

Comece clonando o código do aplicativo de exemplo. Você pode fazer isso no GitHub Codespaces, que fornece uma maneira de clonar e executar aplicativos. Clique em Novo Codespace.

Em seguida, selecione o repositório jwilliams-elastic/msbuild-intelligent-query-demo no menu suspenso Repositório e clique em Criar Codespace.

Criar .env arquivo

Usaremos um Python Jupyter Notebook para acessar e interagir com o Elastic Cloud, e ele faz isso usando os valores de configuração armazenados em um arquivo de configuração. O arquivo de configuração do Notebook deve ter o nome de arquivo .env e você irá criá-lo agora.

  1. No GitHub Codespaces, clique no botão Novo arquivo e adicione um arquivo chamado .env
  2. Adicione o seguinte conteúdo ao .env recém-criado arquivo

Como você pode ver, temos alguns valores ausentes, ELASTIC_URL e ELASTIC_API_KEY, que precisam ser adicionados ao .env arquivo. Vamos fazer isso agora criando um projeto sem servidor Elasticsearch para servir como backend que alimentará a funcionalidade de pesquisa do nosso aplicativo de exemplo.

Criar um projeto Elastic Serverless

  1. Acesse cloud.elastic.co e clique em Criar novo projeto sem servidor
  2. Clique em Avançar para a solução Elasticsearch
  3. Selecione Otimizado para Vetores
  4. Defina o Provedor de Nuvem como Azure
  5. Clique em Criar projeto sem servidor
  6. Clique em Introdução no menu de navegação principal e role para baixo para copiar os Detalhes da Conexão
  7. Clique no botão Copiar para copiar o Endpoint do Elasticsearch dos Detalhes da Conexão
  8. Atualizar .env arquivo para definir o ELASTIC_URL como o Elasticsearch Endpointcopiado

Criar uma chave de API elástica

  1. Abra a página Introdução ao Elasticsearch, clique em Novo na seção Adicionar uma chave de API
  2. Digite um nomede chave
  3. Clique em Criar chave de API
  4. Clique no botão Copiar para copiar o valor da chave da API
  5. De volta ao Codespaces, onde temos o .env arquivo aberto para edição, cole o valor copiado para definir a ELASTIC_API_KEY

Abra o Codespaces Notebook e instale as dependências da biblioteca

No explorador de arquivos, selecione o arquivo VectorDBSetup.ipynb para abrir o Notebook. Após o carregamento do Notebook, localize a seção Notebook intitulada Instalar bibliotecas. Clique no botão de reprodução da seção.

Se esta for a primeira vez que você executa um Notebook no GitHub Codespaces, você será solicitado a selecionar um Kernel do Codespaces e configurar o ambiente Python.

Defina importações e carregue variáveis de ambiente usando o Codespaces Notebook

Vá para a próxima seção no Notebook intitulada Definir importações e carregar variáveis de ambiente. Clique no botão de reprodução da seção.

Este código importa as bibliotecas Python usadas pelo Notebook e carrega as variáveis de ambiente do .env que você criou anteriormente.

Crie um ponto de extremidade de inferência do Elastic ML usando o Codespaces Notebook

Vá para a próxima seção do Notebook intitulada Criar ponto de extremidade de inferência de ML. Clique no botão de reprodução da seção.

Isso criará um novo ponto de extremidade de inferência de ML no projeto Elasticsearch que usaremos para gerar incorporações de texto a partir dos nossos dados. Incorporações de texto são representações vetoriais de texto que serão armazenadas no Elasticsearch para potencializar a pesquisa semântica.

Crie um índice Elasticsearch usando o Codespaces Notebook

Vá para a próxima seção do Notebook intitulada Criar índice do Elasticsearch. Clique no botão de reprodução da seção.

Isso criará o índice do Elasticsearch que armazenará nossos dados de exemplo e quaisquer dados vetoriais associados gerados por meio do ponto de extremidade de inferência de ML.

Crie um modelo de pesquisa Elasticsearch usando o Codespaces Notebook

Continue para a próxima seção do Notebook intitulada Modelo de Pesquisa. Clique no botão de reprodução da seção.

Isso cria um modelo de pesquisa, que é o que nosso aplicativo de exemplo usará como modelo preenchido com as palavras analisadas da consulta de pesquisa de um usuário. Isso nos permite configurar e controlar o quão específicos somos ao consultar dados no índice do Elasticsearch.

Ingerir dados no índice do Elasticsearch usando o Codespaces Notebook

Vá para a próxima seção do Notebook intitulada Ingerir dados de propriedade. Clique no botão de execução da seção.

A execução desta seção de código carregará em massa os dados de exemplo contidos no arquivo properties.jsonl . Após alguns minutos, você verá uma confirmação de que o processo foi concluído com sucesso. Você pode confirmar se o índice contém o registro esperado acessando a seção Gerenciamento de Índice no Elastic Cloud.

Crie appsetting.json para configurar o aplicativo C#

Com nosso índice do Elasticsearch criado e preenchido com dados, agora estamos prontos para configurar o aplicativo de exemplo para funcionar com o Elastic e o Azure Cloud. O aplicativo de exemplo C# usa um arquivo chamado appsettings.json para armazenar e carregar suas informações de acesso, como chaves de API. Agora você criará o arquivo appsettings.json usando o editor no Codespaces.

1. Crie appsettings.json na pasta HomeFinderApp

2. Cole o seguinte código no arquivo appsettings.json

3. Encontre os valores Url e ApiKey na seção ElasticSettings . Defina-os para os mesmos valores que você definiu no .env arquivo em uma etapa anterior.

Criar serviço Azure OpenAI

Nosso aplicativo de exemplo usará o Azure OpenAI para analisar a consulta do usuário do aplicativo e, em seguida, enviar uma solicitação ao Elasticsearch preenchendo o modelo de Pesquisa para tentar comunicar de forma flexível o que o usuário está pesquisando.

  1. Abra uma nova aba do navegador e acesse AI Foundry | Azure OpenAI no portal do Azure. Clique +Criar
  2. No formulário de criação, escolha um Grupo de Recursos.
  3. Digite um nome
  4. Escolha um nível de preço
  5. Clique em Avançar
  6. Na guia Rede , clique em Avançar
  7. Na aba Tags , clique em Avançar
  8. Na guia Revisar e enviar , clique em Criar
  9. Após a conclusão da criação, clique em Ir para o recurso
  10. Selecione Chaves e Ponto de Extremidade no menu de navegação à esquerda
  11. Copie o Endpoint e cole-o no arquivo appsettings.json que você criou na aba do seu navegador que tem o editor Codespaces aberto.
  12. Em seguida, volte para a aba do navegador que contém a chave do Azure OpenAI e a página do ponto de extremidade. Clique no botão copiar para Chave 1 e cole o valor copiado no arquivo appsettings.json , de volta na aba do seu navegador que tem o editor Codespaces aberto.

Adicionar implantação do modelo gpt-4o ao serviço Azure Open AI

Ótimo, agora temos um serviço Azure OpenAI em execução, mas ele ainda precisa de uma implantação de modelo para nos dar os recursos de LLM que nosso aplicativo de exemplo requer. Há uma infinidade de modelos para você escolher. Vamos implantar o gpt-4o, pois ele já está especificado no arquivo appsettings.json que você criou.

  1. Acesse o Azure AI Foundry e clique em Criar uma implantação
  2. Pesquise por gpt-4o e selecione-o nos resultados
  3. Clique em Confirmar para selecioná-lo
  4. Clique em Implantar para implantar o modelo

Depois de implantar com sucesso o modelo gpt-4o , você pode selecionar Implantações no menu de navegação à esquerda e confirmar se a implantação do gpt-4o está listada com o Estado Succeeded.

Criar conta do Azure Maps

Queremos que os usuários do nosso aplicativo de exemplo possam pesquisar propriedades imobiliárias em áreas específicas, mas sem precisar ser muito específicos. Se alguém quiser procurar uma propriedade perto do mercado local de produtores rurais, o Azure Maps é um serviço que o OpenAI LLM pode usar para obter coordenadas de latitude e longitude do mercado. As coordenadas podem então ser incluídas nas solicitações baseadas em modelo de pesquisa enviadas ao Elasticsearch para consultas de usuários que incluem localizações específicas e considerações de distância geográfica.

  1. Clique em Criar nas contas do Azure Maps
  2. Selecione um grupo de recursos
  3. Digite um nome
  4. Concordo com a declaração de licença e privacidade
  5. Clique em Revisar e criar
  6. Clique em Criar
  7. Após a criação da conta, clique em Ir para o recurso
  8. Clique em Autenticação no menu de navegação à esquerda
  9. Copie o valor da Chave Primária e cole-o para ser o valor da ApiKey na seção AzureMapsSettings do arquivo appsettings.json , de volta na guia do navegador que contém o editor Codespaces

Experimente o aplicativo de exemplo

Agora vem a parte divertida. É hora de executar o aplicativo de exemplo. Temos todos os detalhes de configuração prontos, juntamente com os recursos do Elastic Cloud e do Azure Cloud necessários para executar o aplicativo.

1. Abra uma janela do Terminal no editor Codespaces.

2. Use o seguinte comando para alterar o diretório ativo para ser a pasta do aplicativo de exemplo.

3. Use o seguinte comando dotnet para executar o aplicativo.

4. Clique no botão Abrir no navegador quando ele aparecer.

5. Teste a pesquisa padrão e depois experimente algumas de suas próprias pesquisas personalizadas. Se quiser ver mais detalhes sobre o que é executado no backend para gerar os resultados da pesquisa, clique no link Mostrar ao lado de Invocações de ferramentas.

Bônus: Se você realmente quiser testar o GPT-4o, tente a seguinte pesquisa: Estou procurando um imóvel perto da Disney World, Flórida, com mais de 30 quartos, mais de 20 banheiros, piscina, garagem e perto da praia por menos de 200 mil. Esta consulta retornará resultados após várias invocações da ferramenta de pesquisa.

Elastic é a sua solução para IA de pesquisa

O aplicativo em execução é um exemplo de pesquisa guiada do Gen AI LLM usando o Elasticsearch por meio de modelos de pesquisa como fonte de dados de base. Sinta-se à vontade para experimentar e personalizar o aplicativo de exemplo para criar uma experiência de pesquisa precisa e flexível, para ajudar seus usuários a encontrar o que procuram.

Obrigado pela leitura. Experimente o Elastic Cloud .

Conteúdo relacionado

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)