您可以将MongoDB与 Agno 集成,为AI助手配置可搜索的知识库和持久的对话历史记录。本教程演示如何配置 Agno代理以使用MongoDB进行知识检索和会话存储,然后使用该配置构建烹饪助手。具体而言,您将执行以下任务:
设置您的环境。
将MongoDB配置为 Agno 知识库。
构建一个助手,回答文档中的问题并记住之前的对话轮次。
运行该文件并查看输出。
背景
Agno 是一个开源Python框架,用于构建多模式AI助手。 Agno代理由模块化组件组成,包括一个可选的知识库和一个可选的数据库,您可以独立配置这些组件并传递给同一个 Agent对象。
MongoDB提供了其中两个组件,您可以通过导入以下类来使用它们:
MongoVectorDb类:使用MongoDB Vector Search 实现 Agno 的矢量数据库接口,从而允许代理从MongoDB集合中检索相关文档MongoDbclass:实现 Agno 的数据库接口,将代理会话、内存和指标持久保存为MongoDB集合中的文档
提示
Agno 将这两个MongoDB类命名为 MongoDb,因此它将矢量数据库类导出为 MongoVectorDb 以避免冲突。要学习;了解更多信息,请参阅将MongoDB与 Agno 框架集成。
本教程使用这两个组件,并将其数据存储在同一MongoDB 部署中。
先决条件
要完成本教程,您必须拥有以下资源:
以下MongoDB 集群类型之一:
使用Python和Docker创建的本地Atlas部署。安装
atlas-local-lib-pypip install atlas-local-lib-py(),以编程方式创建和管理本地部署。要学习;了解更多信息,请参阅 atlas-local-lib-py存储库。安装了Search 和向量搜索的 MongoDB Community 集群。
一个 OpenAI API 密钥。您必须拥有一个 OpenAI 帐户,该帐户具有可用于 API 请求的信用额度。要了解有关注册 OpenAI 账号的更多信息,请参阅 OpenAI API 网站。
Python v3.9 或更高版本。
设置您的环境
设置环境变量。
在 agno-mongodb-project目录中,创建 .env文件并添加以下代码:
OPENAI_API_KEY="<openai-api-key>" MONGODB_URI="<connection-string>"
将 <connection-string> 替换为您的 Atlas 集群或本地部署的连接字符串。
连接字符串应使用以下格式:
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
要学习;了解更多信息,请参阅通过客户端库连接到集群。
创建项目文件。
在 agno-mongodb-project目录中,创建名为 main.py 的文件。将以下代码添加到此文件以加载环境变量:
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()
在后续步骤中,您将向此文件添加代码,以构建您的知识库和助手。
构建您的知识库
在本部分中,您将MongoDB配置为 Agno 知识库的向量存储,在其中存储数据,并对其运行语义搜索查询。
将MongoDB配置为向量存储。
添加以下代码,为您的知识库配置MongoDB支持的向量存储:
vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", ) knowledge = Knowledge(vector_db=vector_db)
前面的代码创建一个 MongoVectorDb实例并将其传递给 Knowledge对象的 vector_db 参数。由于这是您第一次使用 agent_knowledge集合,Agno 将其与名为 vector_index_1 的MongoDB Vector Search索引一起创建。
构建索引大约需要一分钟时间。在构建时,索引处于初始同步状态。构建完成后,您可以开始查询集合中的数据。
使用持久会话构建助手
在本节中,您将把自己的知识库与MongoDB 数据库结合起来,构建一个完整的助手。该代理会从您的知识库中检索相关文档以回答问题,并将其对话历史记录保留在MongoDB中,以便可以引用较早的对话。
定义助手。
将以下代码添加到 main.py文件中,为会话存储配置 MongoDb实例,然后创建一个使用此会话存储和上一节中配置的知识库的代理:
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.", ], )
在两个对话回合中运行助手。
将以下代码添加到 main.py文件中,以向代理发送两条消息:
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, )
代理每回合都会从您的知识库中检索最相关的菜谱块。由于这两个调用使用相同的 session_id 值,因此 Agno 还会从先前的响应中检索数据。 Agno 从 agno_sessions集合中检索会话元元数据,并从 agno_runs集合中检索消息内容。如果省略 session_id 或在第二次调用时传递不同的值,Agno 将启动一个新会话,并且代理没有第一个回合的记录。
运行文件
要运行main.py文件,请从 agno-mongodb-project目录运行以下命令:
python main.py
如果该命令成功运行,输出将类似于以下内容:
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 ┃ ┃ ... ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
后续步骤
要学习;了解有关 MongoVectorDb 和 MongoDb 类的更多信息,包括其完整参数和方法参考,请参阅将MongoDB与 Agno 框架集成。
要学习;了解有关 Agno 在您的集合上创建的MongoDB Vector Search索引的更多信息,请参阅创建MongoDB Vector Search 索引。