ULC Lab · implementação reproduzível
Laboratório: Chatbot de Perguntas e Respostas sobre Documentos Locais com LangChain e Milvus
Você vai implementar um fluxo de perguntas e respostas sobre documentos PDF usando LangChain, modelos de linguagem abertos e Milvus como banco vetorial. Em cerca de 2 horas, terá um chatbot funcional consultando PDFs locais.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 5
- Versões da documentação consultada
- LangChain v0.1.16 · Milvus 2.3.x · Hugging Face Transformers a versão estável atual · Sentence Transformers a versão estável atual · PyPDF2 a versão estável atual
Demonstrar como integrar LangChain com um modelo de linguagem aberto (por exemplo, Hugging Face Transformers) e Milvus para criar um sistema de perguntas e respostas sobre documentos corporativos. O laboratório cobre desde a preparação do ambiente até a consulta de PDFs via chat, simulando um cenário real de integração em sistemas empresariais.
Topologia
Uma máquina virtual Ubuntu 22.04 (10.0.0.10) roda Milvus (banco vetorial) e um backend Python com LangChain. O backend carrega documentos PDF, gera embeddings usando Sentence Transformers e armazena no Milvus. Usuário interage via terminal local, enviando perguntas respondidas pelo modelo consultando os vetores.
Usuário (CLI)
|
v
[Python+LangChain] (10.0.0.10)
|
v
[Milvus]
^
|
[PDFs locais]Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Ubuntu 22.04 | 2 vCPU, 4GB RAM, 15GB disco, portas 19530 e 8000 abertas |
| PC local | Acesso SSH à VM |
| LangChain | MIT · v0.1.16 |
| Milvus | Apache 2.0 · 2.3.x |
| Hugging Face Transformers | Apache 2.0 · a versão estável atual |
| Sentence Transformers | Apache 2.0 · a versão estável atual |
| PyPDF2 | BSD · a versão estável atual |
Roteiro
- Preparar a VM Ubuntu
Atualize o sistema e instale dependências básicas. Isso garante ambiente limpo e atualizado.
sudo apt update && sudo apt upgrade -y sudo apt install python3 python3-pip git curl -yO que você deve ver: Sistema atualizado, Python 3 e pip instalados.
- Instalar e iniciar o Milvus Standalone
Milvus será o banco vetorial. Usaremos o modo standalone para facilitar o laboratório.
curl -fsSL https://milvus.io/install.sh | bash cd milvus-standalone && docker compose up -dO que você deve ver: Containers do Milvus rodando. Porta 19530 aberta.
- Clonar repositório de exemplo
Crie um diretório de trabalho e baixe um repositório de exemplo para facilitar o setup.
git clone https://github.com/langchain-ai/langchain.git cd langchain/examples/milvusO que você deve ver: Diretório com exemplos LangChain + Milvus disponível.
- Instalar dependências Python
Instale as bibliotecas necessárias para LangChain, Milvus, Sentence Transformers e leitura de PDF.
pip3 install langchain pymilvus sentence-transformers transformers pypdf2O que você deve ver: Pacotes instalados sem erros.
- Obter documentos PDF de teste
Baixe ou crie 2 PDFs simples para indexação. Use textos técnicos ou manuais.
curl -o doc1.pdf https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf curl -o doc2.pdf https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdfO que você deve ver: Dois arquivos PDF no diretório de trabalho.
- Carregar e particionar PDFs
Use PyPDF2 para ler os PDFs e dividir em chunks menores. Isso facilita a indexação vetorial.
python3 >>> from PyPDF2 import PdfReader >>> reader = PdfReader('doc1.pdf') >>> text = '' >>> for page in reader.pages: ... text += page.extract_text() >>> print(text[:200]) (exit com Ctrl+D)O que você deve ver: Texto extraído do PDF exibido no terminal.
- Gerar embeddings dos textos
Use Sentence Transformers para transformar os chunks de texto em vetores.
python3 >>> from sentence_transformers import SentenceTransformer >>> model = SentenceTransformer('all-MiniLM-L6-v2') >>> embeddings = model.encode([text]) >>> print(embeddings.shape) (exit com Ctrl+D)O que você deve ver: Shape dos embeddings exibido, por exemplo (1, 384).
- Configurar conexão LangChain com Milvus
Configure o LangChain para usar Milvus como backend vetorial. Isso conecta o pipeline de IA ao banco.
python3 >>> from langchain.vectorstores import Milvus >>> vector_db = Milvus(collection_name='docs', connection_args={'host': '127.0.0.1', 'port': '19530'}) (exit com Ctrl+D)O que você deve ver: Objeto vector_db criado sem erros.
- Indexar embeddings no Milvus
Armazene os vetores dos textos no Milvus. Isso permite consultas semânticas rápidas.
python3 >>> vector_db.add_texts([text], embeddings=[embeddings[0]]) (exit com Ctrl+D)O que você deve ver: Vetores indexados, sem mensagens de erro.
- Configurar pipeline de perguntas e respostas
Monte um pipeline LangChain que recebe uma pergunta, consulta Milvus e responde usando o modelo de linguagem.
python3 >>> from langchain.chains import RetrievalQA >>> from langchain.llms import HuggingFacePipeline >>> llm = HuggingFacePipeline.from_model_id('distilbert-base-uncased-distilled-squad') >>> qa = RetrievalQA.from_chain_type(llm=llm, retriever=vector_db.as_retriever()) (exit com Ctrl+D)O que você deve ver: Pipeline qa criado sem erros.
- Testar perguntas via terminal
Envie perguntas sobre o conteúdo dos PDFs e observe as respostas do modelo.
python3 >>> question = 'Sobre o que trata o documento?' >>> print(qa.run(question)) (exit com Ctrl+D)O que você deve ver: Resposta relevante ao conteúdo do PDF exibida.
- Automatizar o fluxo em script
Junte tudo em um script Python único para facilitar execuções futuras.
Consulte a documentação para exemplos de script completo: https://python.langchain.com/docs/integrations/vectorstores/milvusO que você deve ver: Script funcional, aceitando perguntas e respondendo via terminal.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar se Milvus está rodando | docker ps | grep milvus | Container milvus-standalone em estado 'Up' |
| Conferir conexão LangChain-Milvus | python3 -c "from langchain.vectorstores import Milvus; Milvus(collection_name='docs', connection_args={'host': '127.0.0.1', 'port': '19530'})" | Sem mensagem de erro |
| Checar se embeddings foram salvos | Consulte a documentação Milvus para listar coleções: https://milvus.io/docs/manage_collections.md | Coleção 'docs' existente e com registros |
| Receber resposta relevante do chatbot | python3
>>> print(qa.run('Qual o objetivo do documento?')) | Resposta coerente ao conteúdo do PDF |
| Rodar script de ponta a ponta | python3 seu_script.py | Script inicia, aceita perguntas e responde sem erro |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Erro de conexão ao Milvus | Porta 19530 bloqueada ou container não iniciado | Verifique firewall e status do container com 'docker ps' |
| ImportError ao rodar scripts Python | Bibliotecas não instaladas ou ambiente errado | Reinstale dependências com 'pip3 install ...' |
| Respostas vazias ou irrelevantes | Embeddings não gerados corretamente ou textos mal particionados | Revise extração de texto e geração de embeddings |
| Script trava ao carregar modelo | Pouca RAM ou modelo muito grande | Use modelo menor ou aumente recursos da VM |
Segurança e hardening
- Nunca exponha a porta 19530 do Milvus para a internet sem autenticação
- Remova PDFs sensíveis após testes
- Limite permissões de arquivos e scripts
- Use ambientes virtuais Python para evitar conflitos de dependências
Checklist final
Referências
- LangChain: Integração com Milvus · LangChain (python.langchain.com)
- Documentação oficial Milvus · Milvus (milvus.io)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
