Menu Docs
Página inicial do Docs
/ /
Centro de Arquitetura Atlas
/ / /

RAG sensível ao contexto para documentos técnicos

Casos de uso: Inteligência artificial, Gerenciamento de conteúdo,Pesquisa inteligente

Setores: Manufatura e mobilidade

Produtos: MongoDB Atlas, Atlas Search, MongoDB Atlas Vector Search, Híbrida Search

Parceiros: Google Cloud

Setores de capital intensivo, como o autoespacial, o de energia, o automotivo e o de Manufatura, dependem de décadas de conhecimento técnico complexo. No entanto, esse conhecimento técnico é mantido em coleções de documentos estáticos, como manuais, guias de manutenção e wikis internos, que são armazenados como PDFs ou arquivos não estruturados que podem ser difíceis de acessar. Como resultado, os trabalhadores da linha de frente não podem recuperar informações precisas em tempo real.

Essa lacuna leva aos seguintes desafios para as empresas:

Para preencher esta lacuna, esta solução apresenta uma estrutura arquitetônica para transformar documentos inertes em uma base de conhecimento dinâmica usando RAG sensível ao contexto. Ao contrário dos sistemas RAG padrão que perdem o contexto crítico ao dividir documentos em partes, o RAG sensível ao contexto preserva a estrutura hierárquica e os relacionamentos na documentação técnica. Os usuários podem então fazer perguntas em linguagem natural e receber respostas precisas de sua documentação, com o sistema localizando e apresentando automaticamente as informações mais relevantes enquanto preserva seu contexto técnico original.

Ao manter a estrutura do documento durante o processo RAG, o sistema garante que os avisos de segurança permaneçam conectados a seus procedimentos e que as especificações técnicas mantenham seu escopo adequado. O sistema resultante torna as operações mais seguras, acelera a produtividade e abre o caminho para aplicativos de IA comercial da próxima geração.

A arquitetura para a criação de um sistema RAG sensível ao contexto consiste em três camadas principais:

  • Camada do pipeline de ingestão

  • Camada da plataforma de dados

  • Camada de query

Essas camadas trabalham juntas para transformar a documentação técnica estática em uma base de conhecimento inteligente. Cada camada mantém a estrutura do documento e permite a correspondência precisa de palavras-chave e a compreensão semântica. Esta seção discute as camadas de ingestão e query, enquanto a seção Approach de Modelo de Dados aborda a camada de plataforma de dados em mais detalhes.

O diagrama abaixo ilustra o fluxo de dados da ingestão de PDF para as respostas de consulta do usuário, mostrando os componentes técnicos e suas interações. Ele demonstra como cada camada processa, armazena e recupera documentação técnica enquanto preserva o contexto.

Uma imagem mostrando a arquitetura de referência de um sistema RAG sensível ao contexto para documentos técnicos
clique para ampliar

figura 1. RAG sensível ao contexto para arquitetura de documentos técnicos

A camada de pipeline de ingestão transforma PDFs brutos em dados estruturados que preservam conteúdo e contexto. Isso melhora a qualidade e a confiabilidade do seu sistema RAG, garantindo que os relacionamentos técnicos, as estruturas hierárquicas e as dependências contextuais permaneçam intactas durante o processo de chunking, evitando a perda de informações críticas. Use o Notebook de ingestão de dados manual do carro para desenvolver sua camada de pipeline de ingestão. Este arquivo fornece um guia detalhado sobre como implementar essa camada e o orienta no processo a seguir.

1. Converter documentos móveis em estruturas DataFrames

Para desenvolver sua camada de pipeline de ingestão, comece usando a biblioteca Python google-cloud-documentai para processar a origem do PDF. Analise a resposta da API em um Pandas DataFrame estruturado. Cada linha representa um bloco de texto distinto com colunas para:

  • Coordenadas da caixa delimitadora

  • Número da página

  • Conteúdo de texto

2. Aplicar Regras para Inferência Estrutural

Em seguida, itere pelo DataFrame e aplique um mecanismo baseado em regras para inferir contexto, como segue:

  • Detecção de cabeçalho: blocos de texto em letras maiúsculas ou com tamanhos de fonte maiores são identificados como cabeçalhos de seção.

  • Recurso de lista e procedimento: As posições horizontais da caixa delimitadora revelam padrões de indentação que indicam listas ou etapas de procedimento.

  • Estratégia de chunking semântica: o texto é agregado em chunks significativos, continuando até que um cabeçalho principal seja encontrado, garantindo que os procedimentos e as tabelas permaneçam intactos.

3. Enriquecer dados para recuperação de alta qualidade

Crie uma variável de string denominada breadcrumb_trail para capturar o caminho hierárquico para cada chunk. Anexe essa string ao texto do bloco antes de enviá-lo para o modelo Google Vertex AI textembedding-gecko. Esse design melhora a relevância da pesquisa semântica codificando o texto do bloco e sua posição contextual na hierarquia do documento com incorporações vetoriais.

4. Usar uma abordagem alternativa

Utilize modelos de integração de chunks contextualizados, como preference-context-, para simplificar o processo. Esses modelos analisam o contexto global de um documento ao gerar uma incorporação e fornecem as seguintes 3vantagens:

  • Ingestão simplificada: reduza as etapas manuais de aumento de contexto, como criar e preceder a breadcrumb_trail variável . O modelo lida com a injeção de contexto automaticamente durante a incorporação.

  • Maior precisão de recuperação: gere incorporações detalhadas que melhoram a qualidade de recuperação para blocos que não têm contexto local.

  • Sensibilidade reduzida ao agrupamento: implemente um processo de recuperação menos dependente do agrupamento. A conscientização global do modelo compensa a segmentação abaixo do ideal.

A camada de query implementa uma abordagem de pesquisa em níveis que combina a correspondência exata com pesquisa semântica. Cada nível é executado de forma independente e seus resultados são combinados usando fusão de pontuação, como segue:

  • O nível 1 oferece correspondência de palavras-chave de alta precisão.

  • O nível 2 adiciona compreensão semântica à pontuação final da classificação.

Esta seção demonstra como criar uma camada de query que equilibra precisão e recuperação, mantendo a transparente da pontuação. Os sistemas de produção usam abordagens em camadas para relevância da pesquisa para medir a precisão de um documento recuperado em satisfazer a query do usuário.

Nível 1: precisão com pesquisa de texto composto

Os aplicativos comerciais exigem precisão para encontrar termos como códigos de erro ou números de peça. Você pode obter essa precisão usando uma estratégia de várias camadas dentro de um operador compound no Atlas Search, como segue:

{
"$search": {
"index": "manual_text_search_index",
"compound": {
"should": [
// High-Precision: Exact phrase matching with highest boost
{
"phrase": {
"query": "car won't start",
"path": "breadcrumb_trail",
"score": { "boost": { "value": 10 } }
}
},
// Balanced Relevance: Individual word matching with medium boost
{
"text": {
"query": "car won't start",
"path": "text",
"score": { "boost": { "value": 4 } }
}
},
// High-Recall: Fuzzy matching to catch typos with low boost
{
"text": {
"query": "car won't start",
"path": "text",
"fuzzy": {},
"score": { "boost": { "value": 1.5 } }
}
}
]
}
}
}

Esta query usa a cláusula should, que permite criar queries de pesquisa compostas. As pontuações resultantes são iguais à soma de todas as cláusulas correspondentes da seguinte forma:

  • Uma correspondência exata de frase aplica um multiplicador de pontuação de 10 para garantir a classificação mais alta para documentos com a frase exata.

  • A correspondência individual de palavras aplica um multiplicador de pontuação de 4 a documentos que contêm termos de pesquisa individuais. Esse recurso captura conteúdo relevante mesmo quando as palavras aparecem separadamente.

  • A correspondência difusa aplica um multiplicador de pontuação de 1.5. Esse recurso captura documentos com erros de digitação ou variações e impede que eles superem as correspondências exatas.

Nível 2: decompondo a pesquisa híbrida para a transparente

Use $rankFusion para combinar a consulta de texto compound precisa do nível 1 com a pesquisa semântica vetorial do nível 2. Esse operador de agregação oferece precisão de correspondência de palavras-chave e compreensão semântica. Você também pode detalhar a pontuação final para mostrar exatamente como a pesquisa vetorial e de texto contribui para a classificação de cada resultado. Essa clareza permite que os desenvolvedores:

  • Depurar a relevância da pesquisa para identificar se a pesquisa de texto ou vetor gera o resultado da classificação.

  • Entenda por que determinados documentos têm uma classificação mais alta por meio de detalhamentos claros das pontuações.

  • Otimize os cenários de teste A/B com diferentes estratégias de ponderação.

Implemente a pesquisa híbrida usando o arquivo search_new.py. Este arquivo contém código que faz o seguinte:

  1. Executa $rankFusion com scoreDetails usando o seguinte agregação pipeline:

    {
    $rankFusion: {
    input: {
    pipelines: {
    <myPipeline1>: <expression>,
    <myPipeline2>: <expression>,
    ...
    }
    },
    combination: {
    weights: {
    <myPipeline1>: <numeric expression>,
    <myPipeline2>: <numeric expression>,
    ...
    }
    },
    scoreDetails: <bool>
    }
    }
  2. Extrai metadados usando o operador $addFields:

    {
    $addFields: {
    scoreDetails: {
    $meta: "scoreDetails"
    }
    }
    }
  3. Isola as contribuições do pipeline usando os operadores $filter e $arrayElemAt para analisar a array scoreDetails. Essa abordagem cria campos para classificações e pontuações específicas a partir de vectorPipeline e fullTextPipeline.

  4. Calcula a contribuição real de cada método de pesquisa usando a fórmula RRF,multiplicada por pesos definidos pelo usuário. Ela define a constante k como 60 para controlar a influencia do resultado de classificação inferior.

  5. Fornece resultados transparentes para classificações de pesquisa, como segue:

    SearchResult(
    score=0.0123, # Final combined RRF score
    vector_score=0.0086, # Vector pipeline contribution
    text_score=0.0037 # Text pipeline contribution
    )

A camada da plataforma de dados é o componente central da arquitetura de referência. Ele serve como armazenamento persistente para todas as saídas enriquecidas do pipeline de ingestão, fornecendo uma base unificada para a camada de query. Nessa solução, o modelo de documento do MongoDB capacita a plataforma de dados consolidando texto, incorporações, contexto hierárquico e metadados em uma única estrutura.

Essa abordagem elimina a necessidade de vários sistemas, como bancos de dados separados para metadados, incorporações e pesquisa de texto completo, reduzindo a complexidade e preservando o contexto avançado necessário para a recuperação precisa da documentação técnica.

Os projetos tradicionais de vários sistemas introduzem os seguintes desafios:

  • silos de dados: sincronizar e duplicar informações entre sistemas aumenta a fragmentação e cria gargalos operacionais.

  • Sobrecarga operacional: a execução, o dimensionamento e a proteção de serviços separados elevam os custos de infraestrutura.

  • Atrito do desenvolvedor: integrar e aprender APIs diferentes desacelera a pesquisa.

Por outro lado, o modelo de documento simplifica a arquitetura. A camada da plataforma de dados suporta nativamente o RAG sensível ao contexto, armazenando o conteúdo e seus relacionamentos contextuais, garantindo que a pesquisa e a recuperação preservem a hierarquia e o significado do documento .

Abaixo está uma amostra do modelo de documento que armazena o texto de um único bloco de documento técnico juntamente com seus metadados enriquecidos:

{
"_id": {
"$oid": "685011ade0cccc356ba545df"
},
"text": "WARNING: Switching off the engine when your vehicle is still ...",
"breadcrumb_trail": "ENGINE START STOP -- WHAT IS AUTOMATIC ENGINE STOP",
"heading_level_1": null,
"heading_level_2": "WHAT IS AUTOMATIC ENGINE STOP",
"heading_level_3": "Starting and Stopping the Engine",
"content_type": [
"procedure",
"safety"
],
"metadata": {
"source_pages": "122-122",
"chunk_length": 1459,
"systems": [
"engine",
"transmission"
]
},
"id": "chunk_00174",
"prev_chunk_id": "chunk_00173",
"next_chunk_id": "chunk_00175",
"embedding": [
-0.016625087708234787,
...,
0.005507152993232012,
-0.022588932886719704
]
}

O documento contém os seguintes campos relevantes:

  • text: Conteúdo de texto bruto, direcionado pelo Atlas Search.

  • breadcrumb_trail: Uma string legível por humanos preservando o contexto hierárquico completo. Esse campo mantém a estrutura de navegação do documento para RAG sensível ao contexto.

  • content_type: uma array de tags que alimenta os filtros de seleção múltipla na interface de navegação. Este campo utiliza um índice.

  • metadata.source_pages: um intervalo de números inteiros que vincula o chunk de volta à página original no PDF de origem.

  • metadata.systems: Uma array de tags usadas para filtragem e preenchidas por mapeamento de palavras-chave.

  • id: Um identificador exclusivo para o chunk que garante rastreabilidade.

  • embedding: Uma representação vetorial 768dimensional do texto contextualizado do bloco. Este campo utiliza um índice do Atlas Vector Search para recuperação de vetores.

Para implantar esta solução, siga as instruções do README neste repositório GitHub. Este repositório orienta você nas seguintes etapas.

1

Instale as seguintes dependências:

  • Python 3.10+

  • Node.js 18+

  • Poesia

  • Uma conta do MongoDB Atlas (versão 8.1+)

  • Docker (opcional, para implantação em contêiner)

2

Vá para o repositório GitHub e execute estes comandos no seu terminal:

git clone https://github.com/mongodb-industry-solutions/manufacturing-car-manual-RAG.git
cd manufacturing-car-manual-RAG
3

Crie um cluster gratuito do MongoDB Atlas e configure o acesso à rede para permitir conexões do seu ambiente de desenvolvimento.

4

Navegue até Atlas Search e crie índices de pesquisa de texto e vetor usando as configurações JSON fornecidas no repositório.

5

Instale dependências Python com a biblioteca poetry.

Configure variáveis de ambiente com sua string de conexão do MongoDB e inicie o servidor de backend FastAPI .

Instale os módulos de nó para o frontend e inicie o servidor frontend.

6

Execute o bloco de anotações Jupyter para processar documentos PDF de exemplo e preencher sua coleção do MongoDB com blocos contextualizados prontos para consulta.

  • Estabeleça um sistema dinâmico de registro para conhecimento técnico: transforme documentos estáticos em uma base de conhecimento estruturada e consultável, armazenando informações técnicas no MongoDB. O MongoDB serve como uma fonte unificada da verdade para as operações da sua organização, garantindo que todos os aplicativos de IA acessem informações consistentes e ricas em contexto. Esse sistema fornece uma base sólida para ferramentas downstream, como chatbots de diagnóstico e sistemas de manutenção preditiva.

  • Pesquisa híbrida de engenharia: combine texto e pesquisa $rankFusion vetorial com para pesquisa híbrida. Decomponha as pontuações finais para obter clareza na depuração e no ajuste de relevância.

  • Transformar sistemas RAG: use modelos de incorporação como voyage-context-3 para processar documentos inteiros e manter detalhes em nível de bloco. Essa implementação fornece um desempenho de 20recuperação até % melhor do que as abordagens padrão.

  • Mehar Grewal, MongoDB

  • Rami Pinto, MongoDB

Voltar

Diagnóstico automotivo

Nesta página