Dê o pontapé inicial na configuração do seu RAG local: Um guia para iniciantes no uso do Llama 3 LangChain com Ollama e Milvus

Apr 20, 20247 min read

Com o surgimento de LLMs de código aberto, como o Llama 3, Mistral, Gemma e outros, tornou-se evidente que os modelos de grandes línguas (LLMs) também podem ser úteis, mesmo quando executados localmente. Esta abordagem não só é prática, como também se torna essencial, uma vez que os custos podem disparar quando se aumenta a escala com LLMs comerciais como o GPT-3 ou o GPT-4.

Neste guia prático, veremos como implementar um [Retrieval Augmented Generation (RAG)] (https://zilliz.com/learn/Retrieval-Augmented-Generation) para criar um chatbot de resposta a perguntas (Q&A) que pode responder a perguntas sobre informações específicas. Esta configuração também utilizará o Ollama e o Llama 3, alimentado por Milvus, como armazenamento de vectores. Uma implementação típica envolve a criação de um pipeline de geração de texto para o Llama 3.

As diferentes ferramentas para construir esta configuração de geração aumentada de recuperação (rag) incluem:

  • Ollama: Ollama é uma ferramenta de código aberto que permite a gestão da Llama 3 em máquinas locais. Ele traz o poder dos LLMs para o seu laptop, simplificando a operação local.

  • LangChain LangChain é um framework que simplifica o desenvolvimento de aplicações com LLMs. É o que usamos para criar um agente e interagir com os nossos dados.

  • É a base de dados vetorial que usamos para armazenar e recuperar os seus dados relevantes de forma eficiente.

  • Llama 3 é um Modelo de Linguagem Grande de código aberto desenvolvido pela Meta e é a última iteração de uma linha de LLMs. Fornece um formato de prompt complexo para interações do utilizador e suporta vários papéis de utilizador, incluindo 'sistema', 'utilizador' e 'assistente'.

Perguntas e respostas com o RAG

Vamos construir um chatbot sofisticado de resposta a perguntas (Q&A) utilizando RAG (Retrieval Augmented Generation). Isto permitir-nos-á responder a perguntas sobre informações específicas.

O que é exatamente a geração aumentada de recuperação?

RAG, ou Retrieval Augmented Generation, é uma técnica que melhora os LLMs através da integração de fontes de dados adicionais. Uma aplicação típica de RAG envolve:

  • Indexação - um pipeline para ingerir dados de uma fonte e indexá-los, que geralmente consiste em Carregar, Dividir e Armazenar os dados no Milvus. Os dados armazenados no Milvus são a representação dos dados sob a forma de [vetor embeddings] (https://zilliz.com/glossary/vetor-embeddings). Os embeddings capturam a essência do conteúdo, permitindo resultados de pesquisa mais relevantes em comparação com as pesquisas por palavras-chave.

  • Recuperação e geração** - Os sistemas de geração aumentada de recuperação melhoram a qualidade das respostas, recuperando o contexto relevante de uma base de dados vetorial e transmitindo-o a um LLM antes de gerar respostas. Se lhe for dado contexto, o LLM evitará gerar alucinações. Mais especificamente, em tempo de execução, o RAG processa a consulta do utilizador, vai buscar dados relevantes ao índice armazenado no Milvus e o LLM gera uma resposta com base neste contexto enriquecido.

Este guia foi concebido para ser prático, mostrando-lhe como os LLMs locais podem ser utilizados para configurar uma aplicação RAG. Não é apenas para especialistas - mesmo os principiantes podem mergulhar e começar a criar o seu próprio chatbot de perguntas e respostas. Vamos lá começar!

Pré-requisitos

Antes de começar a configurar os diferentes componentes do nosso tutorial, certifique-se de que seu sistema tenha o seguinte:

Docker & Docker-Compose - Certifique-se de que o Docker e o Docker-Compose estão instalados no seu sistema. Milvus Standalone - Para nossos propósitos, usaremos o Milvus Standalone, que é fácil de gerenciar via Docker Compose; confira como instalá-lo em nossa documentação Ollama - Instale o Ollama no seu sistema; visite o website para obter o guia de instalação mais recente.

##Configuração da cadeia de linguagens

Depois de ter instalado todos os pré-requisitos, está pronto para configurar a sua aplicação RAG:

  • Inicie uma instância Milvus Standalone com: docker-compose up -d.
  • Este comando inicia sua instância do Milvus em modo desanexado, rodando silenciosamente em segundo plano.
  • Buscar um modelo LLM via: ollama pull <nome_do_modelo>
    • Ver a lista de modelos disponíveis através da sua library
    • e.g. ollama pull llama3
  • Este comando baixa a versão padrão (geralmente a mais recente e menor) do modelo.
  • Para conversar diretamente com um modelo a partir da linha de comando, utilize ollama run <nome-do-modelo>

Instalar dependências para o vetor store

Para executar este aplicativo, você precisa instalar as bibliotecas Python. Você pode usar o Poetry se usar o código no Github diretamente ou instalá-las com pip se preferir.

pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental

Aplicação RAG para aplicações com llm

Como já foi dito, um dos principais componentes do RAG é a indexação dos dados.

  1. Comece pela ingestão de dados do seu PDF usando PyPDFLoader
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
dados = loader.load()

  1. Dividindo os dados

Dividir os dados carregados em pedaços gerenciáveis usando o RecursiveCharacterTextSplitter

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
todos_splits = text_splitter.split_documents(data)
  1. Obtendo os Embeddings e armazenando os dados no Milvus

Em seguida, converta os dados de texto em embeddings vetoriais usando Jina AI's Small English embeddings, e armazene-os no Milvus.

from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus

embeddings = JinaEmbeddings(
   jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
  1. Carregue o seu LLM

Ollama torna fácil carregar e usar um LLM localmente. No nosso exemplo, vamos usar o Llama 3 by Meta, veja como carregá-lo:

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
            [StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
  1. Construa sua cadeia de QA com Langchain

Por fim, construa a sua cadeia de QA para processar e responder às questões dos utilizadores:

from langchain import hub
from langchain.chains import RetrievalQA

query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
    
qa_chain = RetrievalQA.from_chain_type(
    llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)

result = qa_chain({"query": query})
print(result)

Execute a sua aplicação

Execute a sua aplicação RAG pela última célula com a variável de resultado.

Execute a sua aplicação RAG executando: python rag_ollama.py

Exemplo de uma interação de GQ:

Consulta: De que trata este documento?

O documento parece ser um ficheiro de dados interativo de 104 páginas de rosto para um ficheiro SEC. Contém informações sobre as demonstrações financeiras e certificações da empresa.{'query': 'What is this document about?', 'result': "O documento parece ser um ficheiro de dados interativo de 104 páginas de rosto de um processo SEC. Contém informações sobre as demonstrações financeiras e certificações da empresa."}

E aí está! Você acabou de configurar um LLM local sofisticado usando Ollama com Llama 3, Langchain e Milvus. Esta configuração não só torna possível lidar com grandes conjuntos de dados de forma eficiente, mas também permite um sistema local de resposta a perguntas altamente responsivo.

Sinta-se à vontade para consultar Milvus, o código no Github, e partilhe as suas experiências com a comunidade juntando-se ao nosso Discord.

Recapitulação do contexto recuperado

Este guia forneceu um passo a passo para configurar um aplicativo Retrieval Augmented Generation (RAG) usando Modelos de Linguagem Grandes (LLMs) locais. Aproveitando ferramentas como Ollama, Llama 3, LangChain e Milvus, demonstrámos como criar um poderoso chatbot de resposta a perguntas e respostas (Q&A) capaz de lidar com consultas de informações específicas com contexto recuperado de um armazenamento de vectores.

As principais conclusões incluem:

  • Visão geral do RAG**: O RAG aprimora os recursos do LLM integrando fontes de dados externas. Envolve a indexação de dados em embeddings vectoriais utilizando Milvus e a recuperação de contexto relevante durante o processamento de consultas para gerar respostas precisas e informadas.

  • Destaques das ferramentas**:

    Ollama simplifica a gestão e a execução de modelos Llama 3 localmente.

    LangChain fornece uma estrutura intuitiva para o desenvolvimento de aplicações baseadas em LLM.

    Milvus, como armazenamento vetorial, armazena e recupera eficientemente [dados vectorizados] (https://zilliz.com/learn/an-ultimate-guide-to-vectorizing-structured-data), permitindo um tratamento preciso das consultas.

    • O Llama 3, desenvolvido pela Meta, suporta funcionalidades avançadas com caraterísticas como interações multi-funções e avisos de sistema personalizáveis.

O processo de configuração abrangeu passos essenciais:

  1. Pré-requisitos: Instalar o Docker, Milvus Standalone, Ollama, e as bibliotecas Python necessárias.

  2. Indexação de dados: Usando ferramentas como PyPDFLoader e RecursiveCharacterTextSplitter para carregar, dividir e vetorizar dados.

  3. Armazenamento de embeddding: Convertendo texto em embeddings com o modelo Jina AI e armazenando-os na loja de vectores Milvus.

  4. Construir uma cadeia de controlo de qualidade: Integrar o armazém de vectores com o Llama 3 através do LangChain, configurando um sistema personalizado para processar e responder às questões dos utilizadores.

Ao executar a aplicação, os utilizadores podem interagir com o seu chatbot local para obter respostas precisas e contextualmente relevantes a partir de conjuntos de dados específicos. Uma vez recuperados os documentos relevantes, estes são transmitidos ao LLM para a geração de respostas, um método comprovadamente eficaz. O guia privilegia o carácter prático, garantindo a acessibilidade tanto para principiantes como para especialistas. Tenha em mente que, para uma recuperação óptima, os parâmetros podem ter de ser ajustados com base nas especificidades da aplicação.

Com a crescente proeminência dos LLMs de código aberto, esta configuração destaca como as implementações localizadas reduzem os custos, aumentam a segurança e oferecem soluções escaláveis para [recuperação de informação] (https://zilliz.com/learn/what-is-information-retrieval) e geração. Explore o repositório GitHub e junte-se à nossa comunidade Discord para partilhar a sua experiência e ideias!

Atualizado em Apr 24, 2026