Você pode integrar o MongoDB com o 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ão e, em seguida, usar essa configuração para criar um assistente de culinária. Especificamente, você executa as seguintes tarefas:
Configure seu ambiente.
Configure o MongoDB como uma Base de Conhecimento do Agno.
Crie um assistente que responda a perguntas de seus documento e lembre-se de turnos 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: Implementar a interface de banco de dados vetorial do Agno com o MongoDB pesquisa vetorial, permitindo que um agente recupere documentos relevantes de uma coleção do MongoDBMongoDbclasse: Implementar a interface de banco de dados do Agno, persistindo sessões de agente, memórias e métricas como documentos em coleções do MongoDB
Dica
O Agno nomeia ambas as classes do MongoDB como MongoDb, portanto, ele exporta a classe de banco de dados vetorial como MongoVectorDb para evitar uma colisão. Para saber mais, consulte Integrar o MongoDB com o Agno Framework.
Este tutorial usa ambos os componentes e armazena seus dados na mesma implantação do 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 do MongoDB 6.0.11, 7.0.2, ou posterior. Certifique-se de que seu endereço IP esteja incluído na lista de acesso do seu projeto Atlas.
Uma implantação local do Atlas criada usando Python e Docker. Instale
atlas-local-lib-py(pip 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 MongoDB Community com Search e pesquisa vetorial 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 aprender mais sobre como registrar uma conta OpenAI, consulte o website de 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.netIMPORTANTE: certifique-se de que a string de conexão inclua as credenciais do usuário de banco de dados. Para aprender mais sobre como localizar sua string de conexão, 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=truePara saber mais, consulte Connection strings.
Crie um arquivo de projeto.
No seu diretório agno-mongodb-project, crie um arquivo chamado main.py. Adicione o seguinte código a este arquivo para carregar suas variáveis de ambiente:
import osfrom dotenv import load_dotenvfrom agno.agent import Agentfrom agno.db.mongo import MongoDbfrom agno.knowledge.knowledge import Knowledgefrom agno.models.openai import OpenAIChatfrom agno.vectordb.mongodb import MongoVectorDb
load_dotenv()Em etapas futuras, você adicionará código a este arquivo para criar sua Base de Conhecimento e assistente.
Crie sua Base de Conhecimento
Nesta seção, você configura o MongoDB como o armazenamento de vetores 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 vector store baseado em 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 de MongoVectorDb e a passa para o parâmetro vector_db de um objeto Knowledge. Como esta é a primeira vez que você usa a coleção agent_knowledge, o Agno a cria junto com um índice de pesquisa vetorial do MongoDB chamado vector_index_1.
O índice deve levar cerca de um minuto para criar. 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.
Carregue e armazene dados.
Adicione o código a seguir ao seu arquivo main.py para carregar um arquivo PDF contendo receitas tailandesas na sua Base de Conhecimento:
knowledge.insert( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",)O Agno baixa o arquivo, faz a divisão dele em partes, gera um embedding para cada parte com o embedder padrão da OpenAI e grava os resultados na sua coleção.
Dica
Para inspecionar os documentos armazenados, navegue pela coleção agno.agent_knowledge na IU do Atlas. Cada documento tem um campo content com uma parte do texto da receita e um campo embedding que contém o vetor gerado. Para aprender mais, veja Visualizar coleções.
Execute uma query de pesquisa semântica.
Adicione o seguinte código ao seu arquivo main.py para fazer query no banco de dados vetorial da sua Base de Conhecimento diretamente, antes de conectá-lo a um agente. Este exemplo pesquisa as três partes mais relevantes para uma pergunta sobre curry 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 as partes da receita que são mais semanticamente relevantes para a query, classificadas 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 criar um assistente completo. O agente recupera documentos relevantes da sua Base de Conhecimento para responder a perguntas e persiste seu histórico de conversas no MongoDB para que possa consultar turnos 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 turnos de conversa.
Adicione o seguinte código ao seu arquivo main.py para enviar duas mensagens ao agente:
SESSION_ID = "cooking-session-001"
# First turnagent.print_response( "My favorite Thai dish is massaman curry.", session_id=SESSION_ID,)
# Second turnagent.print_response( "How do I make my favorite dish?", session_id=SESSION_ID,)O agente recupera as partes de receita mais relevantes da sua Base de Conhecimento a cada turno. Como ambas as chamadas usam o mesmo valor 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 chamar, o Agno inicia uma nova sessão e o agente não tem registro do primeiro turno.
Execute o arquivo
Para executar o arquivo main.py, execute o seguinte comando do seu diretório agno-mongodb-project:
python main.pySe o comando for executado com êxito, a saída se assemelha 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.pdfINFO 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 aprender mais sobre as classes MongoVectorDb e MongoDb, incluindo sua referência completa de parâmetros e métodos, consulte Integrar o MongoDB ao Agno Framework.
Para aprender mais sobre o índice de pesquisa vetorial do MongoDB que o Agno cria em sua coleção, consulte Criar um índice de pesquisa vetorial do MongoDB.