Entrar ou criar conta

ULC Lab · implementação reproduzível

Laboratório: Pipeline de Busca Semântica e QA com Haystack, Elasticsearch e FAISS

Você implementa um pipeline de busca semântica e perguntas e respostas usando Haystack, Elasticsearch e FAISS em ambiente local. Em cerca de 2 horas, terá um endpoint funcional para consultas em linguagem natural sobre documentos próprios.

Haystack intermediário: pipelines de busca semântica e QA corporativo
Ligado ao treinamento Haystack intermediário: pipelines de busca semântica e QA corporativo
ULC-LAB-IA-0002 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
11
Validações
4
Versões da documentação consultada
Haystack a versão estável atual · Elasticsearch 8.x · FAISS a versão estável atual · Docker a versão estável atual · Python 3.10 ou superior
Objetivo

O objetivo é construir um pipeline robusto de busca semântica e perguntas e respostas (QA) utilizando Haystack, com backend de armazenamento vetorial FAISS e Elasticsearch para indexação. Você vai entender como conectar todos os componentes, indexar documentos e testar respostas automáticas em linguagem natural, simulando um cenário corporativo real.

Topologia

O usuário acessa o pipeline Haystack via REST API (localhost:8000). O Haystack conecta-se ao Elasticsearch (localhost:9200) para indexação textual e ao FAISS (em disco local) para busca vetorial. Todos os serviços rodam em uma única máquina (exemplo: 192.168.56.10).

Usuário HTTP
     |
     v
Haystack API (localhost:8000)
     |
  +--+-------------+
  |                |
  v                v
Elasticsearch   FAISS (local)
(localhost:9200) (em disco)

Equipamentos e software

ItemRequisito, licença ou versão
VM ou PC2 vCPU, 4 GB RAM, 20 GB disco, porta 8000 e 9200 liberadas, Ubuntu 22.04 ou superior
HaystackApache 2.0 · a versão estável atual
ElasticsearchElastic License 2.0 (com partes Apache 2.0) · 8.x
FAISSMIT · a versão estável atual
DockerApache 2.0 · a versão estável atual
PythonPSF · 3.10 ou superior

Roteiro

  1. Preparar ambiente e dependências

    Garanta um sistema limpo, atualizado e com Docker, Python 3.10+ e pip instalados. Isso evita conflitos e facilita o gerenciamento dos serviços.

    sudo apt update && sudo apt install -y docker.io docker-compose python3 python3-pip

    O que você deve ver: Docker, Docker Compose e Python instalados sem erros.

  2. Subir Elasticsearch via Docker

    Elasticsearch é necessário para indexação e busca textual. Usar Docker simplifica a instalação e isolamento.

    docker run -d --name elasticsearch -e "discovery.type=single-node" -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:8.13.4

    O que você deve ver: Container 'elasticsearch' rodando. Porta 9200 aberta.

  3. Testar Elasticsearch

    Confirme que o Elasticsearch está acessível e pronto.

    curl -X GET 'localhost:9200/'

    O que você deve ver: Resposta JSON com 'cluster_name' e 'tagline'.

  4. Instalar Haystack e FAISS

    Haystack orquestra todo o pipeline. FAISS é o backend vetorial para busca semântica. Instale ambos no Python.

    pip3 install farm-haystack[faiss]

    O que você deve ver: Pacotes instalados sem erros.

  5. Baixar modelo de embeddings

    O modelo de embeddings converte texto em vetores. Usar um modelo aberto garante reprodutibilidade.

    python3 -c "from haystack.utils import fetch_archive_from_http; fetch_archive_from_http(url='https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip', output_dir='.')"

    O que você deve ver: Arquivo do modelo baixado e descompactado.

  6. Criar script de pipeline Haystack

    Monte um pipeline simples com DocumentStore FAISS, Retriever e Reader. O script conecta ao Elasticsearch e FAISS.

    cat > haystack_lab.py <<'EOF'
    from haystack.document_stores import FAISSDocumentStore
    from haystack.nodes import EmbeddingRetriever, FARMReader
    from haystack.pipelines import ExtractiveQAPipeline
    from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http
    
    doc_store = FAISSDocumentStore(faiss_index_factory_str="Flat", sql_url="sqlite:///faiss_lab.db")
    retriever = EmbeddingRetriever(document_store=doc_store, embedding_model="sentence-transformers/all-MiniLM-L6-v2")
    reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")
    pipeline = ExtractiveQAPipeline(reader, retriever)
    
    # Indexar documentos de exemplo
    docs = [{"content": "A rede de fibra dedicada da Upnetix cobre toda a zona industrial de Manaus."},
            {"content": "Haystack permite implementar pipelines de perguntas e respostas com modelos abertos."}]
    doc_store.write_documents(docs)
    doc_store.update_embeddings(retriever)
    
    # Testar pipeline
    prediction = pipeline.run(query="Quem cobre a zona industrial de Manaus?", params={"Retriever": {"top_k": 2}, "Reader": {"top_k": 1}})
    print(prediction)
    EOF

    O que você deve ver: Arquivo haystack_lab.py criado com pipeline funcional.

  7. Executar pipeline localmente

    Rode o script para garantir que o pipeline está funcionando e retornando respostas.

    python3 haystack_lab.py

    O que você deve ver: Saída JSON com resposta à pergunta e contexto do documento.

  8. Subir API REST do Haystack

    Haystack oferece API REST para integração. Use o comando oficial para expor o pipeline.

    pip3 install uvicorn fastapi
    haystack server start

    O que você deve ver: Servidor iniciado em http://localhost:8000.

  9. Testar API REST com curl

    Valide o endpoint enviando uma pergunta para o pipeline via HTTP.

    curl -X POST 'http://localhost:8000/query' -H 'Content-Type: application/json' -d '{"query": "O que é Haystack?"}'

    O que você deve ver: Resposta JSON com resposta extraída dos documentos.

  10. Indexar novos documentos via API

    Garanta que é possível adicionar documentos dinamicamente pelo endpoint.

    curl -X POST 'http://localhost:8000/documents' -H 'Content-Type: application/json' -d '{"documents": [{"content": "FAISS é uma biblioteca eficiente para busca vetorial."}]}'

    O que você deve ver: Confirmação de indexação sem erro.

  11. Consultar novamente após indexação

    Teste se o novo conteúdo é recuperado pelo pipeline.

    curl -X POST 'http://localhost:8000/query' -H 'Content-Type: application/json' -d '{"query": "O que é FAISS?"}'

    O que você deve ver: Resposta contendo 'FAISS é uma biblioteca eficiente para busca vetorial.'

Como saber que funcionou

TesteComandoCritério
Acesso ao Elasticsearchcurl -X GET 'localhost:9200/'Resposta JSON com 'cluster_name' e 'tagline'.
Execução local do pipelinepython3 haystack_lab.pyResposta JSON com campo 'answers' não vazio.
API REST funcionalcurl -X POST 'http://localhost:8000/query' -H 'Content-Type: application/json' -d '{"query": "Quem cobre a zona industrial de Manaus?"}'Resposta JSON com texto relevante.
Indexação dinâmica via APIcurl -X POST 'http://localhost:8000/documents' -H 'Content-Type: application/json' -d '{"documents": [{"content": "FAISS é uma biblioteca eficiente para busca vetorial."}]}'Confirmação de indexação e recuperação posterior.

Troubleshooting

SintomaCausa provávelCorreção
Erro de conexão ao ElasticsearchElasticsearch não está rodando ou porta 9200 bloqueadaVerifique status do container e firewall. Use 'docker ps' e 'sudo ufw status'.
Erro ao instalar farm-haystack[faiss]Dependências de compilação ausentesInstale build-essential e tente novamente: 'sudo apt install build-essential'
API REST não iniciaPorta 8000 já em uso ou dependências faltandoLibere a porta ou instale dependências: 'pip3 install fastapi uvicorn'
Respostas vazias no pipelineDocumentos não indexados ou embeddings não atualizadosReindexe documentos e execute 'doc_store.update_embeddings(retriever)'

Segurança e hardening

  • Nunca exponha Elasticsearch ou API Haystack sem autenticação em redes públicas.
  • Utilize firewall para restringir acesso às portas 9200 e 8000.
  • Remova documentos sensíveis após testes.
  • Atualize todos os componentes antes de uso produtivo.

Checklist final

Referências

  1. FAISS Documentation · Faiss.ai (faiss.ai)
Verificação editorial
Publicado
09/09/2026
Última revisão
09/09/2026
Versão do conteúdo
1.0
Referências
1 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.