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

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud now operates in Azure Central India, offering AI and vector workloads with reduced latency, enhanced data sovereignty, and cost efficiency, empowering businesses to scale AI applications seamlessly in India. Ask ChatGPT

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.
