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
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.
- 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()
- 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)
- 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)
- 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|>"],
)
- 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:
Pré-requisitos: Instalar o Docker, Milvus Standalone, Ollama, e as bibliotecas Python necessárias.
Indexação de dados: Usando ferramentas como PyPDFLoader e RecursiveCharacterTextSplitter para carregar, dividir e vetorizar dados.
Armazenamento de embeddding: Convertendo texto em embeddings com o modelo Jina AI e armazenando-os na loja de vectores Milvus.
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!
Continue lendo

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.



