Construa um aplicativo RAG com Langchain e LLMs locais alimentados por Ollama

Os grandes modelos locais de idiomas (LLMs) fornecem vantagens significativas para desenvolvedores e organizações. Os principais benefícios incluem privacidade aprimorada de dados, pois as informações confidenciais permanecem inteiramente em sua própria infraestrutura e funcionalidade offline, permitindo um trabalho ininterrupto, mesmo sem acesso à Internet. Embora os serviços LLM baseados em nuvem sejam convenientes, a execução de modelos localmente oferece controle total sobre o comportamento do modelo, ajuste de desempenho e potencial economia de custos. Isso os torna ideais para experimentação antes de executar cargas de trabalho de produção. O ecossistema para LLMs locais amadureceu significativamente, com várias excelentes opções disponíveis, como Ollama, Foundry Local, Docker Model Runner e muito mais. As estruturas mais populares de IA/agente, incluindo Langchain e Langgraph, fornecem integração com esses corredores de modelos locais, facilitando a integração de seus projetos. O que você vai aprender? Esta postagem do blog ilustrará como usar o LLMS local com o Azure Cosmos DB como um banco de dados vetorial para cenários de geração de recuperação de recuperação (RAG). Ele o guiará através da configuração de uma solução LLM local, configurando o Azure Cosmos DB, carregando dados, executando pesquisas de vetores e executando consultas de RAG. Você pode usar o emulador do Azure Cosmos DB para desenvolvimento local ou conectar -se a uma conta do Azure Cosmos DB na nuvem. Você usará o Ollama (solução de código aberto) para executar o LLMS localmente em sua própria máquina. Ele permite baixar, executar e interagir com uma variedade de LLMs (como LLAMA 3, Mistral e outros) usando comandos simples, sem precisar de acesso em nuvem ou configuração complexa. No final desta postagem do blog, você terá uma configuração local de RAG local que aproveita o Ollama e o Azure Cosmos DB. O aplicativo de amostra usa a integração do Langchain com o Azure Cosmos DB para executar a incorporação, o carregamento de dados e a pesquisa de vetores. Você pode adaptá -lo facilmente a outras estruturas como o Llamaindex. Tudo bem, vamos mergulhar! Configure o ollama para começar o Ollama, siga o guia de instalação oficial no Github para instalá -lo no seu sistema. O processo de instalação é direto em diferentes plataformas. Por exemplo, em sistemas Linux, você pode instalar o Ollama com um único comando: curl -fssl | sh Enter fullscreen mode Exit fullscreen mode Once installed, start the Ollama service by running: ollama serve Enter fullscreen mode Exit fullscreen mode This blog post demonstrates the integration using two specific models from the Ollama library: mxbai-embed-large – A high-quality embedding model with 1024 dimensions, ideal for generating vector representations of text llama3 – The 8B parameter variant of Meta’s Llama 3, que serve como nosso modelo de bate -papo para o Pipeline RAG, baixando os dois modelos usando os seguintes comandos. Observe que esse processo pode levar alguns minutos, dependendo da sua velocidade de conexão com a Internet, pois são arquivos de modelo substanciais: o ollama pule mxbai-embebed-swarge ollama pule llama3: 8b Digite o modo de tela cheia de saída do modo de tela cheia algo para manter em mente … As ferramentas como o ollama fazem com que seja direto para executar o LLMS local. Modelos leves (como LLAMA 2 7B ou PHI-2) podem ser executados nas CPUs modernas com apenas 8 GB de RAM, embora o desempenho possa ser limitado. Modelos maiores (como llama 3 70b ou mixtral) geralmente requerem uma GPU dedicada com pelo menos 16 GB de VRAM para inferência eficiente. Ollama apoia a execução da CPU e da GPU. Nos sistemas somente CPU, você pode esperar tempos de resposta mais lentos, especialmente com modelos maiores ou solicitações simultâneas. O uso de uma GPU compatível acelera significativamente a inferência necessária para cargas de trabalho exigentes. Configurar o Azure Cosmos DB Como você está trabalhando com modelos locais, provavelmente desejará usar o emulador do Azure Cosmos DB para o desenvolvimento local. O emulador fornece um ambiente local que imita o serviço do Azure Cosmos DB, permitindo que você desenvolva e teste seus aplicativos sem incorrer em custos ou exigir uma conexão com a Internet. Como alternativa, você pode usar o serviço Azure Cosmos DB baseado em nuvem. Basta criar um DB do Azure Cosmos para a conta NoSQL e ativar o recurso de pesquisa vetorial. Certifique-se de fazer login usando a AZ CLI com uma identidade que possui permissões de RBAC para a conta, pois o aplicativo usa o DefaultAzureCredential para autenticação (não autenticação baseada em chave). O emulador está disponível como um contêiner do Docker, que é a maneira recomendada de executá -lo. Aqui estão as etapas para puxar e iniciar o emulador de DB do Cosmos. Os comandos mostrados são para Linux – consulte a documentação para outras opções de plataforma. Se você não possui o Docker instalado, consulte o guia de instalação do Docker. Docker Pull mcr.microsoft.com/cosmosdb/linux/azure-coosmos-emulator:latest Docker Run-Publish 8081: 8081 -e azure_cosmos_emulator_partition_count = 1 mcR.microsoft.com/COSMOSDB/LUXUZ/AZURIZ_COUNT = 1 mcR.microsoft.com/COSMOSDB/LUXUZ/AZUSTIÇÃO = 1 Em seguida, configure o certificado SSL do emulador. Por exemplo, no sistema Linux que eu estava usando, executei os seguintes comandos para baixar o certificado e regenerar o pacote de certificados: Curl-Insecure> ~/EmulatorCert.crt sudo update-Certifícios Enter o modo de tela inteira: Modo de seleção: CRL 1 adicionado, 0 removido; feito. GANHOS DE GANHOS EM /ETC/CA-CERTIFICATES/UPDATE.D … Concluído. Digite o modo de tela cheia Sair do modo de tela completa Carregar dados no Azure Cosmos DB Agora que o Ollama e o Azure Cosmos DB estão configurados, é hora de preencher nosso banco de dados vetorial com alguns dados de amostra. Para esta demonstração, usaremos a própria documentação do Azure Cosmos DB como nossa fonte de dados. O carregador buscará o conteúdo de marcação diretamente do repositório da Microsoft Docs, concentrando -se especificamente em artigos sobre a funcionalidade de pesquisa de vetores do Azure Cosmos DB. Nosso processo de carregamento de dados lerá esses artigos de documentação, gerará incorporações usando o modelo MXBAI-EBLED-LARGE e armazenará as representações de conteúdo e vetor no Azure Cosmos DB para recuperação. Comece clonando o repositório do GitHub que contém o aplicativo de amostra: CD CLON GIT CD LOCAL-LLMS-RAG-COSMOSDB Digite o modo de saída de tela cheia de tela cheia antes de executar o aplicativo Loader, verifique se você tem o Python 3 instalado no seu sistema. Crie um ambiente virtual e instale as dependências necessárias: python3 -m venv .venv fonte .venv/bin/ativar pip3 install -r requisitos.txt Enter o modo de saída do modo de tela cheia, configure as variáveis ​​de ambiente e execute o script de carregamento. O exemplo abaixo usa o emulador do Azure Cosmos DB para o desenvolvimento local. Se você preferir usar o serviço em nuvem, basta definir a variável COSMOS_DB_URL para o URL da conta do Azure Cosmos DB e remover a variável use_emulator. # Exportar cosmos_db_url = “exportar use_emulator =” true “exportar database_name =” rag_local_llm_db “exportar container_name =” docs “exportar incorporação moda) moderen =” the cenkypatring fullen3) Banco de dados e contêiner, se eles ainda não existem. [‘ ‘
Using database: rag_local_llm_db, container: docs
Using embedding model: mxbai-embed-large with dimensions: 1024
Created instance of AzureCosmosDBNoSqlVectorSearch
Loading 26 document chunks from 2 documents
Data loaded into Azure Cosmos DB

Enter fullscreen mode

Exit fullscreen mode

To confirm that your data has been loaded successfully, you can inspect the results using the Azure Cosmos DB Data Explorer. If you’re using the emulator, navigate to in your browser. You should see the same number of documents in your container as the number of chunks reported by the loader application.

Run vector search queries

Now that your data is loaded, let’s test the vector search functionality. Set the same environment variables used for data loading and run the vector search script with your desired query:

# export COSMOS_DB_URL=”
export USE_EMULATOR=”true”
export DATABASE_NAME=”rag_local_llm_db”
export CONTAINER_NAME=”docs”
export EMBEDDINGS_MODEL=”mxbai-embed-large”
export DIMENSIONS=”1024″

python3 vector_search.py “show me an example of a vector embedding policy”

Enter fullscreen mode

Exit fullscreen mode

The script will process your query through the embedding model and perform a similarity search against the stored document vectors. You should see output similar to the following:

Searching top 5 results for query: “show me an example of a vector embedding policy”

Using database: rag_local_llm_db, container: docs
Using embedding model: mxbai-embed-large with dimensions: 1024
Created instance of AzureCosmosDBNoSqlVectorSearch
Score: 0.7437641827298191
Content: “`

### A policy with two vector paths
//….

Enter fullscreen mode

Exit fullscreen mode

The output shows the top five results ordered by their similarity scores, with higher scores indicating better matches to your query.

To modify the number of results returned, you can add the top_k argument. For example, to retrieve the top 10 results, run: python3 vector_search.py “show me an example of a vector embedding policy” 10

Execute Retrieval-Augmented Generation (RAG) queries

Now we will put it all together with an simple chat based interface that leverages the llama3 model to generate responses based on the contextual information retrieved from Azure Cosmos DB.

Configure the environment variables needed for the RAG application and launch the script:

bash
# export COSMOS_DB_URL=”
export USE_EMULATOR=”true”
export DATABASE_NAME=”rag_local_llm_db”
export CONTAINER_NAME=”docs”
export EMBEDDINGS_MODEL=”mxbai-embed-large”
export DIMENSIONS=”1024″
export CHAT_MODEL=”llama3″

python3 rag_chain.py

Enter fullscreen mode

Exit fullscreen mode

Once the application initializes, you’ll see output confirming the RAG chain setup:

text
Building RAG chain. Using model: llama3
Using database: rag_local_llm_db, container: docs
Using embedding model: mxbai-embed-large with dimensions: 1024
Created instance of AzureCosmosDBNoSqlVectorSearch
Enter your questions below. Type ‘exit’ to quit, ‘clear’ to clear chat history, ‘history’ to view chat history.
[User]: Digite o modo de saída do modo de tela cheia, faça perguntas sobre a documentação de pesquisa de vetor do Azure Cosmos DB que você carregou. Por exemplo, tente perguntar, mostre -me um exemplo de uma política de incorporação de vetor, e você verá uma resposta como essa (observe que isso pode variar um pouco para o seu caso, mesmo em diferentes execuções): texto // …
[User]: Mostre -me um exemplo de uma política de incorporação de vetor
[Assistant]: Aqui está um exemplo de uma política de incorporação de vetor: {“VectorEmbeddings”: [
{
“path”:”/vector1″,
“dataType”:”float32″,
“distanceFunction”:”cosine”,
“dimensions”:1536
},
{
“path”:”/vector2″,
“dataType”:”int8″,
“distanceFunction”:”dotproduct”,
“dimensions”:100
}
]
} Esta política define duas incorporações de vetor: uma com o caminho `/vetor1`, usando o tipo de dados` float32`, função de distância cosseno e com 1536 dimensões; e outro com o caminho `/vector2`, usando o tipo de dados` int8`, a função de distância do produto DOT e com 100 dimensões. Digite o modo de saída do modo de tela cheia para explorar ainda mais os recursos do seu sistema de pano, tente estas consultas de exemplo adicionais: “Qual é a dimensão máxima suportada para incorporações de vetor no Azure Cosmos DB?” “É adequado para dados em larga escala?” “Existe um benefício em usar o tipo de índice plano?” Você pode inserir ‘Exit’ para sair do aplicativo, ‘Clear’ para limpar o histórico de bate -papo ou ‘histórico’ para ver suas interações anteriores. Sinta -se à vontade para experimentar diferentes fontes de dados e consultas. Para modificar o número de resultados de pesquisa vetorial usados ​​como contexto, você pode adicionar a variável de ambiente TOP_K (Padrões a 5). Ermilize-se neste passo a passo, você seguiu instruções passo a passo para configurar um aplicativo completo de RAG que executa inteiramente sua infraestrutura local-desde a instalação e configuração de Ollama com modelos de incorporação e bate-papo, para configurar o Azure Cosmos DB para armazenamento vetorial, carregar dados de documentação e executar usando RAG através de uma interface interativa de chat. A execução de modelos traz localmente vantagens em termos de custos, privacidade de dados e restrições de conectividade. No entanto, você precisa planejar o hardware apropriado, principalmente para modelos maiores que têm melhor desempenho com GPUs dedicadas e memória suficiente. A troca entre o tamanho do modelo, o desempenho e os requisitos de recursos é crucial ao planejar sua configuração local de IA. Você já experimentou LLMs locais em seus projetos? Que desafios ou benefícios você encontrou ao passar das soluções de IA baseadas em nuvem para a IA local? Talvez você tenha usado as duas abordagens? Compartilhe sua experiência e feedback!

Fonte

Você pode ter perdido