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.
Neste artigo, aprenderemos como conectar modelos locais ao modelo de inferência do Elasticsearch usando o Ollama e, em seguida, fazer perguntas aos seus documentos usando o Playground.
O Elasticsearch permite que os usuários se conectem a LLMs usando a Open Inference API, oferecendo suporte a provedores como Amazon Bedrock, Cohere, Google AI, Azure AI Studio, HuggingFace - como serviço, entre outros.
Ollama é uma ferramenta que permite baixar e executar modelos LLM usando sua própria infraestrutura (sua máquina/servidor local). Aqui você encontra uma lista dos modelos disponíveis que são compatíveis com o Ollama.
O Ollama é uma ótima opção se você deseja hospedar e testar diferentes modelos de código aberto sem ter que se preocupar com as diferentes maneiras como cada um dos modelos pode ter que ser configurado ou sobre como criar uma API para acessar as funções do modelo, pois o Ollama cuida de tudo.
Como a API Ollama é compatível com a API OpenAI, podemos integrar facilmente o modelo de inferência e criar um aplicativo RAG usando o Playground.
Pré-requisitos
- Elasticsearch 8.17
- Kibana 8.17
- Python
Etapas
- Configurando o servidor Ollama LLM
- Criando mapeamentos
- Indexação de dados
- Fazendo perguntas usando o Playground
Configurando o servidor Ollama LLM
Vamos configurar um servidor LLM para conectá-lo à nossa instância do Playground usando o Ollama. Precisaremos:
- Baixe e execute o Ollama.
- Use o ngrok para acessar seu servidor web local que hospeda o Ollama pela internet
Baixe e execute o Ollama
Para usar o Ollama, primeiro precisamos baixá-lo. O Ollama oferece suporte para Linux, Windows e macOS, então basta baixar a versão do Ollama compatível com seu sistema operacional aqui. Depois que o Ollama estiver instalado, podemos escolher um modelo desta lista de LLMs suportados. Neste exemplo, usaremos o modelo llama3.2, um modelo multilíngue geral. No processo de configuração, você habilitará a ferramenta de linha de comando do Ollama. Depois que o download for concluído, você pode executar a seguinte linha:
O que produzirá:
Uma vez instalado, você pode testá-lo com este comando:
Vamos fazer uma pergunta:

Com o modelo em execução, o Ollama habilita uma API que seria executada por padrão na porta "11434". Vamos fazer uma requisição para essa API, seguindo a documentação oficial:
Esta é a resposta que obtivemos:
Observe que a resposta específica para esse ponto de extremidade é um streaming.
Exponha o endpoint à internet usando o ngrok
Como nosso endpoint funciona em um ambiente local, ele não pode ser acessado de outro ponto, como nossa instância do Elastic Cloud, pela Internet. O ngrok nos permite expor uma porta que oferece um IP público. Crie uma conta no ngrok e siga o guia oficial de configuração.
Depois que o agente ngrok for instalado e configurado, podemos expor a porta que o Ollama está usando:
Observação: o cabeçalho --host-header="localhost:11434" garante que o cabeçalho "Host" nas solicitações corresponda a "localhost:11434"
Executar este comando retornará um link público que funcionará enquanto o ngrok e o servidor Ollama forem executados localmente.
Em "Encaminhamento" podemos ver que o ngrok gerou uma URL. Guarde para mais tarde.
Vamos tentar fazer uma solicitação HTTP para o endpoint novamente, agora usando a URL gerada pelo ngrok:
A resposta deve ser semelhante à anterior.
Criando mapeamentos
Ponto final ELSER
Neste exemplo, criaremos um ponto de extremidade de inferência usando a API de inferência do Elasticsearch. Além disso, usaremos o ELSER para gerar os embeddings.
Para este exemplo, vamos imaginar que você tem uma farmácia que vende dois tipos de medicamentos:
- Medicamentos que exigem receita médica.
- Medicamentos que NÃO exigem receita médica.
Essas informações seriam incluídas no campo de descrição de cada medicamento.
O LLM deve interpretar esse campo, então estes são os mapeamentos de dados que usaremos:
O campo text_description armazenará o texto simples das descrições, enquanto semantic_field, que é um tipo de campo semantic_text , armazenará os embeddings gerados pelo ELSER.
A propriedade copy_to copiará o conteúdo dos campos name e text_description para o campo semântico para que os embeddings para esses campos sejam gerados.
Indexação de dados
Agora, vamos indexar os dados usando a API _bulk.
Resposta.
Fazendo perguntas usando o Playground
Playground é uma ferramenta do Kibana que permite criar rapidamente um sistema RAG usando índices do Elasticsearch e um provedor LLM. Você pode ler este artigo para saber mais sobre isso.
Conectando o LLM local ao Playground
Primeiro, precisamos criar um conector que use a URL pública que acabamos de criar. No Kibana, vá em Pesquisar>Playground e depois clique em "Conectar a um LLM".

Esta ação revelará um menu no lado esquerdo da interface do Kibana. Lá, clique em "OpenAI".

Agora podemos começar a configurar o conector OpenAI.
Vá para "Configurações do conector" e, para o provedor OpenAI, selecione "Outro (Serviço compatível com OpenAI)":

Agora, vamos configurar os outros campos. Para este exemplo, vamos nomear nosso modelo como "medicines-llm". No campo URL, use o gerado pelo ngrok (/v1/chat/completions). No campo "Modelo padrão", selecione "llama3.2". Não usaremos uma chave de API, então digite qualquer texto aleatório para prosseguir:

Clique em "Salvar" e adicione os medicamentos de índice clicando em "Adicionar fontes de dados":


Ótimo! Agora temos acesso ao Playground usando o LLM que estamos executando localmente como mecanismo RAG.

Antes de testar, vamos adicionar instruções mais específicas ao agente e aumentar o número de documentos enviados ao modelo para 10, para que a resposta tenha o maior número possível de documentos disponíveis. O campo de contexto será semantic_field, que inclui o nome e a descrição dos medicamentos, graças à propriedade copy_to.

Agora vamos fazer a pergunta: Posso comprar Clonazepam sem receita? e veja o que acontece:
Como esperado, obtivemos a resposta correta.
Próximas etapas
O próximo passo é criar seu próprio aplicativo! O Playground fornece um script de código em Python que você pode executar em sua máquina e personalizá-lo para atender às suas necessidades. Por exemplo, colocando-o atrás de um servidor FastAPI para criar um chatbot de medicamentos de controle de qualidade consumido pela sua interface de usuário.
Você pode encontrar esse código clicando no botão Exibir código na seção superior direita do Playground:

E você usa os Endpoints e as chaves de API para gerar a variável de ambiente ES_API_KEY necessária no código.
Para este exemplo específico, o código é o seguinte:
Para que funcione com o Ollama, você precisa alterar o cliente OpenAI para se conectar ao servidor Ollama em vez do servidor OpenAI. Você pode encontrar a lista completa de exemplos do OpenAI e endpoints compatíveis aqui.
E também altere o modelo para llama3.2 ao chamar o método de conclusão:
Vamos adicionar nossa pergunta: Posso comprar Clonazepam sem receita? Para a consulta do Elasticsearch:
E também para a chamada de conclusão com algumas impressões, para que possamos confirmar que estamos enviando os resultados do Elasticsearch como parte do contexto da pergunta:
Agora vamos executar o comando
pip install -qU elasticsearch openai
python main.py
Você deverá ver algo assim:
Conclusão
Neste artigo, podemos ver o poder e a versatilidade de ferramentas como o Ollama quando as usamos em conjunto com a API de inferência do Elasticsearch e o Playground.
Após alguns passos simples, tínhamos um aplicativo RAG funcional com um chat que usava um LLM em execução em nossa própria infraestrutura a custo zero. Isso também nos permite ter mais controle sobre recursos e informações confidenciais, além de nos dar acesso a uma variedade de modelos para diferentes tarefas.
Perguntas frequentes
O que é Ollama?
O Ollama é uma ferramenta que permite baixar e executar modelos LLM usando sua própria infraestrutura (sua máquina/servidor local).




