A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Desenvolvedor do MongoDB
Centro de desenvolvedores do MongoDB
chevron-right
Produtos
chevron-right
MongoDB
chevron-right

RAG priorizado localmente e aprimorado por meio do Rastreamento comDeepSeek e MongoDB

Thibaut Gourdel8 min read • Published Feb 01, 2025 • Updated Feb 06, 2025
MongoDBPython
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
O último lançamento do KerpSeek abalou o ecossistema de IA, e por um bom motivo. Ela introduziu modelos de ponta e os tornou open source, tornando a IA de ponta mais acessível do que nunca. Um desses modelos é um modelo de argumento comparável aos dos melhores laboratórios de IA — até agora, esses modelos autônomo e de peso aberto eram raros. Como se isso não bastasse, a deepseek afirma ter treinamento esses modelos a uma fração do custo das contrapartes de modelos principais, desafiando a economia do setor.
Neste artigo, exploraremos o que torna os modelos doDeepSeek únicos e como eles podem ser aproveitados localmente para a geração aumentada de recuperação (RAG) com o MongoDB.
O código completo do aplicação neste tutorial está localizado no Repositório de Exibição da GenAI.

Por que os modelos da deepseek se destacam?

O GeoSeek possui três modelos:
  • deepSeek-V3: LLM de uso geral no mesmo nível do GPT-4o e do laudo 3.5 Sonnet
  • Coder Kering: LLM especializado focado em gerar e concluir código
  • deepSeek-R1: modelo de argumento comparável ao OpenAI-o1
Os modelos GeoSeek são únicos em vários aspectos. Vamos começar com o deepseek-v3, que é elogiado por sua escalabilidade e eficiência de custos em comparação com alternativas devido à sua arquitetura de mistura de especialistas (MoE). Isso significa que, de seus 671 bilhões de parâmetros, apenas 37 bilhões são ativados por vez, dependendo das tarefas. Por essa razão, o GeoSeek-V3 representa uma verdadeira alternativa econômicas aos modelos de laboratório de ponta para lidar com tarefas gerais. Esse modelo é o resultado de várias otimizações e técnicas innovativas, incluindo o uso da depilação de conhecimento de outro modelo,DeepSeek-R1, durante o pós-treinamento.
Em termos simples, os pesquisas desenvolveram um novo método para aprimorar um modelo padrão como o GeoSeek-V,3 transferindo habili- dades de argumento de outro modelo de argumento, o1 GeoSeek-R. Como resultado,3 o deepseek-v torna-se significativamente melhor no argumento, mantendo sua eficiência de uso geral e usabilidade prática. Isso nos leva à1 família de modelos GeoSeek-R, marcando a primeira geração de modelos de argumentos desenvolvidos por esse laboratório de IA. Como sua3 contraparte padrão V, o R1 é baseado em uma arquitetura MoE, ativando 37 bilhões de parâmetros de um total de 671 bilhões. O que diferencia os modelos de argumento é sua capacidade de usar a cadeiathinking de reflexão (CoT) " " antes de gerar saídas, melhorando significativamente o desempenho e a precisão na resolução de problemas lógicos. Além de abrir o código dos modelos, a equipe da GeoSeek forneceu de forma transparente os diferentes métodos e técnicas por trás de suas descobertas técnicas.
Em especial, eles treinaram com sucesso um modelo para raciocinar passo a passo sem depender de massivos conjuntos de dados monitorados (que são caros de produzir). Em vez disso, eles usaram o aprendizado por esforço com um modelo de Recompensa Inovador, permitindo que o modelo refinasse seu argumento de forma autônoma e alocasse o tempo de computação necessário com base na query. Mas isso não é tudo. Embora o GeoSeek-R1 seja um modelo de argumento em grande escala, a equipe também aplicou sua técnica de destilação (conforme descrito acima) a outros modelos menores de código aberto, a saber, Qwn e Llama. Ao aproveitar amostras geradas pelo GeoSeek-R1, eles ajustaram modelos menores para imitar seu processo de argumento, melhorando significativamente o desempenho. De acordo com os parâmetros de comparação do Geodephyllum, esses modelos destilados mostram resultados notáveis, com o deepseek-r1-disystem-qwn-32b alcançando um desempenho comparável ao do OpenAI-mini-o1. Os modelos destituídos, que variam de 1.5 bilhões a 70 bilhões de parâmetros, também foram de código aberto pelaDeepSeek e desbloqueiam novos casos de uso aproveitando recursos de argumento de última geração por uma fração do custo localmente ou por auto-hospedagem.

RAG local com um modelo de argumento

A geração com recuperação aumentada é uma abordagem de IA que combina a recuperação de documento com modelos generativos para gerar respostas mais precisas e contextualmente relevantes. Para saber mais sobre RAG, consulte Retrieval-Augmented Geração (RAG) com Atlas Vector Search.
Uma solução RAG local, em que os vários componentes da pilha de IA são executados em uma máquina local ou, mais amplamente, nas instalações, é econômicas e permite que todas as operações sejam executadas localmente.
Em muitos casos, essas soluções auto-hospedadas são essenciais, especialmente em setores com muitas regulamentações, como saúde e proteção. Essas soluções abordam preocupações críticas de segurança e privacidade e fornecem maior controle sobre a infraestrutura geral para organizações que ainda executam seus aplicativos on-premises. Ao lançar modelos com mais desempenho e eficiência, o GeoSeek abre novos caminhos para aplicativos, incluindo aplicativos avançados no dispositivo que podem ser executados em hardware de consumidor, como o Macbook M1+.No caso de integrar modelos como o GeoSeek-R1 destilado modelos, o uso de um modelo de argumento pode aprimorar as capacidades de resolução de problemas em assuntos técnicos ou de pesquisa. Além disso, ao contrário dos modelos proprietários, como a família OpenAI-o1, a família GeoSeek-R1 mostra a cadeia de ideias que ela usou para chegar a suas conclusoes, fornecendo maior explicabilidade e transparencia em seus resultados.

Implementação de RAG local com MongoDB e deepseek

Vamos agora mergulhar em um exemplo de implementação. Este tutorial tem como objetivo criar um miniaplicativo que permita fazer upload de seus próprios arquivos PDF, incluindo seus documentos privados ou confidenciais, e interagir com eles por meio de perguntas e respostas. Para atender aos requisitos locais, toda a pilha será implantada localmente usando:
  • Ollama para executar os modelos, Nomic-Text-Embed para o modelo de incorporação e deepSeek-R1-Distil-8B (dependendo da sua máquina, você pode ir até o 24B ou 32B).
  • Uma implantação local do MongoDB Atlas para armazenar documentos e vetores, bem como realizar pesquisa vetorial.
  • LangChain para orquestrar o backend e os LLMs.
  • Streamlit para criar a interface do usuário.
  • Data: Any PDF document.
Diagrama de visão geral ilustrando a arquitetura de um aplicação RAG local , integrando Nomic para incorporações, deepSeek-R1 como LLM (em execução local via Ollama), Streamlit para a interface de bate-papo, LangChain para recuperação e MongoDB Atlas como banco de dados vetorial.
Embora este tutorial apresente um sistema local-first, você tem a opção de criar um sistema local do Atlas usando o Atlas CLI ou implantar um cluster na nuvem. A Atlas CLI é a interface de linha de comando do MongoDB Atlas, e você pode usar a Atlas CLI para interagir com o Atlas a partir do terminal para várias tarefas, incluindo a criação de sistemas locais do Atlas . Para saber mais, consulte Gerenciar implantações locais e de nuvem a partir da Atlas CLI.Além disso, os diferentes modelos usados neste tutorial são baixados e executados usando o Ollama, um ecossistema de código aberto para o desenvolvimento local do LLM.

Pré-requisitos

Para concluir este tutorial, você deve ter o seguinte:

Configuração do ambiente

Para este tutorial, você irá criar um diretório onde poderá salvar os diferentes arquivos — por exemplo, local-rag-mongodb. Em seguida, baixe os dois modelos a seguir do Ollama:
1ollama pull nomic-embed-text
2ollama pull deepseek-r1:8b

Criar um sistema local utilizando o Atlas CLI

Execute o comando a seguir e siga as instruções para criar um sistema local.
1atlas deployments setup
configuração do sistema atlas
Para instruções detalhadas, consulte Criar um sistema local do Atlas .
Como alternativa, você também pode usar o Docker para executar uma implantação local do MongoDB Atlas:
1docker run -d -e JAVA_TOOL_OPTIONS="-XX:UseSVE=0" -p 27017:27017 mongodb/mongodb-atlas-local
Depois de executar, você pode se conectar ao seu sistema usando:
1atlas deployments connect
Várias opções estão disponíveis para conectar e gerenciar sistemas, incluindo o MongoDB Compass para interagir visualmente com os sistemas do MongoDB Atlas . Para mais comandos para gerenciar sistemas do Atlas ,consulte Gerenciar um sistema local do Atlas .
Em seguida, usando o MongoDB shell ou o MongoDB Compass, vamos criar um banco de dados, knowledge_base, e uma collection, documents.
Usando o shell do MongoDB , execute o comando mongosh, que deve localizar e se conectar automaticamente à sua implantação local.
1mongosh
1> use knowledgebase
2switched to db knowledgebase
3> db.createCollection("documents")`
Esta etapa é opcional, pois o banco de dados e a coleção são criados automaticamente quando o primeiro documento é adicionado.

Executar o aplicação RAG

Depois que o ambiente estiver configurado e com os modelos baixados localmente usando o Ollama e o MongoDB Atlas em execução local, podemos executar o aplicação.
Como observamos na lista inicial de componentes necessários, o aplicação é desenvolvido usando o LangChain para orquestrar solicitações LLM e integrado ao MongoDB Atlas Vector Search e Streamlit para a interface.
O código completo está disponível no repositório do Github para você executar. 
1git clone https://github.com/mongodb-developer/GenAI-Showcase.git cd GenAI-Showcase/apps/local-rag-pdf`
Primeiro, recomendamos executar o aplicação dentro de um ambiente virtual Python para isolar o projeto do ambiente Python global. Você pode usar o venv pacote , que vem com a instalação do Python. 
1python -m venv local-rag-env
2source local-rag-env/bin/activate
Dependendo de seus sistemas operacionais, o executável do Python pode ser em python3 vez de python.
Em seguida, instale as bibliotecas necessárias: pip install -r requirements.txt
Depois de instalado, você pode iniciar o aplicação: streamlit run app.py
Carregue seu próprio PDF ou baixe o documento de pesquisa deepseek-r1 como exemplo e comece a fazer perguntas diretamente sobre seu conteúdo:
Interface Streamlit de um aplicação RAG local abastecido por MongoDB Atlas e KerpSeek mostrando um upload de PDF e um histórico de chat exibindo queries e respostas do usuário

Principais componentes explicados

1. Inicialização

Os parâmetros principais são definidos no arquivo config.yaml:
1llm_model: "deepseek-r1:8b"
2embedding_model: "nomic-embed-text"
3mongo_connection_str: "mongodb://localhost:27017/?directConnection=true"
4database_name: "knowledge_base"
5collection_name: "documents"
Em seguida, o aplicação é inicializado recuperando as variáveis do arquivo de configuração, como os diferentes modelos usados por meio do Ollama — aqui, nomic-embed-text para o modelo de incorporação e deepseek-r:1 8b para o grandes modelos de linguagem, bem como as informações de conexão MongoDB , incluindo o nome do banco de dados e o nome da coleção.
1config = load_config(config_file)
2
3 # Read values from config
4 llm_model = config["llm_model"]
5 embedding_model = config["embedding_model"]
6 mongo_connection_str = config["mongo_connection_str"]
7 database_name = config["database_name"]
8 collection_name = config["collection_name"]
Os parâmetros de divisão para o agrupamento de documentos e o prompt usado para solicitar o LLM são os seguintes:
1self.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1024, chunk_overlap=100)
2self.prompt = ChatPromptTemplate.from_template(
3 """
4 You are a helpful assistant answering questions based on the uploaded document and the conversation.
5 Conversation History:
6 {conversation_history}
7 Context from Documents:
8 {context}
9 Question: {question}
10 """
Em seguida, a conexão do armazenamento de vetor e suas opções são definidas, seguidas pela criação do índice de pesquisa de vetor. Isso é necessário para realizar consultas de pesquisa vetorial em relação às incorporações vetoriais com base na similaridade semântica.
1# Initialize the vector store with MongoDB Atlas
2self.vector_store = MongoDBAtlasVectorSearch(
3 collection=self.collection,
4 embedding=self.embeddings,
5 index_name="vector_index",
6 relevance_score_fn="cosine"
7)
8self.vector_store.create_vector_search_index(dimensions=768)

2. Preparação de dados

1docs = PyPDFLoader(file_path=pdf_file_path).load()
2chunks = self.text_splitter.split_documents(docs)
Os documentos PDF são lidos usando o LangChain PyPDFLoader e divisão de acordo com o tamanho do bloco dos parâmetros e o tamanho da sobreposição definidos durante a inicialização. Por fim, os documentos, juntamente com suas incorporações, são armazenados no MongoDB Atlas.

3. Resposta a perguntas 

A última etapa é enviar a solicitação do usuário junto com os documentos recuperados com base na relevância da query. Primeiro, as incorporações para a query são geradas para que a pesquisa vetorial seja realizada e os documentos relevantes sejam recuperados.
1# Generate and log query embeddings
2query_embedding = self.embeddings.embed_query(query)
3
4retrieved_docs = self.retriever.invoke(query)
O número de documentos recuperados e o limite de pontuação de similaridade são definidos como 5 e 0.2 por padrão; fique à vontade para ajustá-los e avaliar os resultados. O prompt principal é estruturado usando o LangChain, incluindo o histórico da conversa, documentos de contexto recuperados e o prompt do usuário.
1# Format the input for the LLM, including conversation history
2formatted_input = {
3"conversation_history": "\n".join(conversation_history) if conversation_history else "",
4"context": "\n\n".join(doc.page_content for doc in retrieved_docs),
5"question": query,
6}
7
8# Build the RAG chain
9chain = (
10RunnablePassthrough() # Passes the input as-is
11 | self.prompt # Formats the input for the LLM
12 | self.model # Queries the LLM
13 | StrOutputParser() # Parses the LLM's output
14)

Conclusão

1 Es
Esses modelos não apenas fornecem resultados excepcionais, devido ao seu espaço ocupado mínimo, mas também democratizam o acesso ao argumentos avançados com alguns dos primeiros modelos de argumentos de alto desempenho e peso aberto disponíveis. Esses progressos são uma prova da natureza altamente concorrência dos modelos de base e preparam o caminho para um rápido desenvolvimento no futuro próximo. Em especial, esse progresso abre o caminho para a implantação de aplicativos RAG locais, aproveitando o MongoDB como base de conhecimento e esses modelos avançados de argumentos para obter desempenho comparável aos modelos de laboratório de ponta. Este tutorial demonstra como é acessível e prático implementar uma solução local com o deepseek e o MongoDB, mesmo em hardware de consumidor.

Saiba mais

Saiba como o MongoDB Atlas leva os aplicativos RAG para o próximo nível, explorando sistemas avançados de RAG e agentes no webinar de especialistas do MongoDB: Expanding LLM Applications:From RAG to Agentic Sistemas

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Crie um website de notícias sobre criptomoedas em C# usando o Microsoft Azure App Service e o MongoDB Atlas


Apr 18, 2025 | 9 min read
Início rápido

Java - Change Streams


Oct 01, 2024 | 10 min read
Artigo

Simplificando o desenvolvimento de aplicativos Java com o MongoDB: um guia abrangente para usar testcontainers


Jul 22, 2024 | 7 min read
Tutorial

Garantir alta disponibilidade para MongoDB no Kubernetes


Jul 12, 2024 | 11 min read
Sumário