Você pode integrar o MongoDB ao Agno para configurar uma base de conhecimento pesquisável e um histórico de conversas persistente para seus agentes de IA. Este tutorial demonstra como configurar um agente Agno para usar o MongoDB para recuperação de conhecimento e armazenamento de sessões e, em seguida, usar essa configuração para criar um assistente de preparação. Especificamente, você executa as seguintes tarefas:
Configure seu ambiente.
Configure o MongoDB como uma base de conhecimento Agno.
Crie um assistente que responda às perguntas de seus documentos e se lembre das mudanças anteriores na conversa.
Execute o arquivo e revise a saída.
Plano de fundo
Agno é um framework Python de código aberto para construir agentes de IA multimodais. Um agente Agno é composto por componentes modulares, incluindo uma base de conhecimento opcional e um banco de dados opcional , que você configura independentemente e passa para o mesmo objetoAgent .
O MongoDB fornece dois desses componentes, que você pode usar importando as seguintes classes:
MongoVectorDbclasse: implementa a interface do banco de dados vetorial Agno com o MongoDB Vector Search, permitindo que um agente recupere documentos relevantes de uma coleção MongoDBMongoDbclasse: Implementa a interface de banco de dados do Agno, sessões de agente persistentes, memória e métricas como documentos nas coleções do MongoDB
Dica
O Agno nomeia ambas as classes do MongoDB MongoDb, então ele exporta a classe do banco de dados vetorial como MongoVectorDb para evitar uma colisão. Para saber mais, consulte Integrar MongoDB com o Framework Agno.
Este tutorial utiliza ambos os componentes e armazena seus dados no mesmo sistema MongoDB .
Pré-requisitos
Para concluir este tutorial, você deve ter os seguintes recursos:
Um dos seguintes tipos de cluster MongoDB :
Um cluster do Atlas executando a versão 6.0.11 do MongoDB, 7.0.2, ou posterior. Certifique-se de que seu endereço IP esteja incluído na lista de acesso do seu projeto Atlas.
Um sistema local do Atlas criado usando Python e Docker. Instale
atlas-local-lib-pyopip install atlas-local-lib-py() para criar e gerenciar implantações locais programaticamente. Para saber mais, consulte o repositório atlas-local-lib-py .Um cluster da MongoDB Community com o Search e o Vector Search instalados.
Uma chave de API da OpenAI. Você deve ter uma conta da OpenAI com créditos disponíveis para solicitações de API. Para saber mais sobre como registrar uma conta OpenAI, consulte o site da API OpenAI.
Python v3.9 ou posterior.
Configure seu ambiente
Defina suas variáveis de ambiente.
No seu diretório agno-mongodb-project, crie um arquivo .env e adicione o seguinte código:
OPENAI_API_KEY="<openai-api-key>" MONGODB_URI="<connection-string>"
Substitua <connection-string> pela string de conexão do seu cluster do Atlas ou da implantação local do Atlas.
Sua string de conexão deve usar o seguinte formato:
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
Para saber mais, consulte Conectar-se a um cluster por meio de bibliotecas de clientes.
Sua string de conexão deve usar o seguinte formato:
mongodb://localhost:<port-number>/?directConnection=true
Para saber mais, consulte Connection strings.
Crie um arquivo de projeto .
No seu diretório agno-mongodb-project, crie um arquivo denominado main.py. Adicione o seguinte código a este arquivo para carregar suas variáveis de ambiente:
import os from dotenv import load_dotenv from agno.agent import Agent from agno.db.mongo import MongoDb from agno.knowledge.knowledge import Knowledge from agno.models.openai import OpenAIChat from agno.vectordb.mongodb import MongoVectorDb load_dotenv()
Em etapas futuras, você adicionará código a este arquivo para construir sua base de conhecimento e assistente.
Construa sua base de conhecimento
Nesta seção, você configura o MongoDB como o armazenamento de vetor para uma base de conhecimento Agno, armazena dados nele e executa uma query de pesquisa semântica nele.
Configure o MongoDB como o armazenamento de vetores.
Adicione o seguinte código para configurar um armazenamento de vetores apoiado MongoDB para sua base de conhecimento:
vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", ) knowledge = Knowledge(vector_db=vector_db)
O código anterior cria uma instância MongoVectorDb e a passa para o parâmetro vector_db de um objetoKnowledge. Como esta é a primeira vez que você usa a collection agent_knowledge, o Agno a cria junto com um índice do MongoDB Vector Search chamado vector_index_1.
O índice deve levar cerca de um minuto para ser criado. Enquanto constrói, o índice está em um estado de sincronização inicial . Quando terminar de ser criado, você poderá começar a consultar os dados em sua coleção.
Carregar e armazenar dados.
Adicione o seguinte código ao seu arquivo main.py para carregar um arquivo PDF contendo receitas tailandesas em sua base de conhecimento:
knowledge.insert( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf", )
Agno baixa o arquivo, divide-o em blocos, gera uma incorporação para cada bloco com o incorporador OpenAI padrão e grava os resultados em sua coleção.
Dica
Para inspecionar os documentos armazenados, navegue pela coleção agno.agent_knowledge na UI do Atlas . Cada documento tem um campo content com um bloco do texto da receita e um campo embedding que contém o vetor gerado. Para saber mais, consulte Visualizar collections.
Execute uma query de pesquisa semântica .
Adicione o código a seguir ao arquivo main.py para consultar o banco de dados de vetores da sua base de conhecimento diretamente, antes de conectá-lo a um agente. Este exemplo procura os três chunks mais relevantes para uma pergunta sobre caril verde:
results = vector_db.search(query="How do I make a green curry?", limit=3) for doc in results: print(f"[{doc.name}] {doc.content[:80]}")
Os resultados incluem os chunks de receita que são mais semanticamente relevantes para a query, classificados por pontuação de similaridade.
Crie um assistente com sessões persistentes
Nesta seção, você combina sua base de conhecimento com um banco de dados MongoDB para construir um assistente completo. O agente recupera documentos relevantes de sua base de conhecimento para responder a perguntas e persiste seu histórico de conversas no MongoDB para que ele possa consultar voltas anteriores.
Defina o assistente.
Adicione o seguinte código ao seu arquivo main.py para configurar uma instância MongoDb para armazenamento de sessão e, em seguida, crie um agente que use esse armazenamento de sessão e a base de conhecimento configurada na seção anterior:
db = MongoDb( db_url=os.environ["MONGODB_URI"], db_name="agno", ) agent = Agent( model=OpenAIChat(id="gpt-4o"), knowledge=knowledge, db=db, search_knowledge=True, add_history_to_context=True, num_history_runs=5, instructions=[ "You are a helpful cooking assistant.", "Answer questions using only the recipes in your knowledge base.", "If the knowledge base does not contain a relevant answer, say so clearly.", ], )
Execute o assistente em dois retornos de conversa.
Adicione o seguinte código ao seu arquivo main.py para enviar duas mensagens ao agente:
SESSION_ID = "cooking-session-001" # First turn agent.print_response( "My favorite Thai dish is massaman curry.", session_id=SESSION_ID, ) # Second turn agent.print_response( "How do I make my favorite dish?", session_id=SESSION_ID, )
O agente recupera os chunks de receita mais relevantes da sua base de conhecimento a cada passo. Como ambas as chamadas usam o mesmo valor de session_id, o Agno também recupera dados da resposta anterior. O Agno recupera os metadados da sessão da coleção agno_sessions e o conteúdo da mensagem da coleção agno_runs. Se você omitir session_id ou passar um valor diferente na segunda chamada, o Agno iniciará uma nova sessão e o agente não terá registro da primeira vez.
Executar o arquivo
Para executar o arquivo main.py, execute o seguinte comando a partir do seu diretório agno-mongodb-project:
python main.py
Se o comando for executado com sucesso, a saída será semelhante ao seguinte:
INFO Connected to MongoDB successfully. INFO Creating collection 'agent_knowledge'. INFO Creating search index 'vector_index_1'. INFO Search index 'vector_index_1' is ready. INFO Search index 'vector_index_1' created successfully. INFO Adding content from URL https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf INFO Upserting 14 documents # Output from the vector_db.search() call [Recipes] INGREDIENTS (One serving) 150 grams chicken, cut into bite-size pieces 50 grams [Recipes] Thai SELECT Exotic, Healthy, Delicious Dining-Thai Style Thai food has rapidly g [Recipes] Directions: 1. Roughly pound the garlic with bird's eye chilies in a mortar. Add # Output from the agent.print_response() calls ┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ My favorite Thai dish is massaman curry. ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (gpt-4o) ────────────────────────────────────────────┓ ┃ Great choice — I found a recipe in the knowledge base for ┃ ┃ Massaman Gai (Massaman Curry with Chicken and Potatoes). ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ How do I make my favorite dish? ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (gpt-4o) ────────────────────────────────────────────┓ ┃ Here's how to make Massaman Gai (Massaman Curry with Chicken ┃ ┃ and Potatoes) from the knowledge base: ┃ ┃ **Ingredients** ┃ ┃ - 300 grams chicken rump ┃ ┃ - 80 grams Massaman curry paste ┃ ┃ - 100 grams coconut cream ┃ ┃ - 300 grams coconut milk ┃ ┃ - 250 grams chicken stock ┃ ┃ - 50 grams roasted peanuts ┃ ┃ - 200 grams potatoes, chopped into large chunks ┃ ┃ - 100 grams onion, chopped into large chunks ┃ ┃ ... ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Próximos passos
Para saber mais sobre as classes MongoVectorDb e MongoDb, incluindo seu parâmetro completo e referência de método, consulte Integrar MongoDB com o Framework Agno.
Para saber mais sobre o índice de Vector Search do MongoDB que o Agno cria em sua coleção, consulte Criar um índice de Vector Search do MongoDB .