您可以将MongoDB与 Agno 集成,Agno 是一个用于构建多模式AI代理的开源Python框架。 Agno 提供两种MongoDB集成:
Vector数据库,用于存储客服人员的知识库并使用MongoDB Vector Search 进行检索。
会话和内存数据库,用于在MongoDB集合中持久保存代理会话、用户内存、指标和评估运行。
您可以单独使用任一集成,也可以在同一代理中同时使用这两种集成。
开始体验
要完成将 Agno 配置为使用MongoDB 的教程,请参阅开始使用MongoDB Agno 集成。
安装
Agno 需要Python v3.9 或更高版本。要安装最新的 Agno 和PyMongo版本,运行以下命令:
pip install agno pymongo
本页上的示例使用 OpenAI 模型,Agno默认使用该模型。要安装 OpenAI客户端库,运行以下命令:
pip install openai
本页上的 Custom configuration 示例使用 Voyage AI嵌入。要安装 Voyage AI客户端库,运行以下命令:
pip install voyageai
环境变量
在运行此页面上的示例之前,设立以下环境变量:
连接字符串:将
MONGODB_URI设置为MongoDB 部署的连接字符串。模型API密钥:将
OPENAI_API_KEY或VOYAGE_API_KEY设置为模型提供商程序的API密钥。
向量数据库
MongoVectorDb 类使用MongoDB Vector Search 实现 Agno 矢量数据库接口。要对文档进行代理语义搜索,请将此类的实例传递给 Agno Knowledge对象的 vector_db 参数,然后将该对象传递给代理的 knowledge 参数。
重要
MongoDB类名
Agno 将这两个MongoDB类命名为 MongoDb,但从不同的模块导入它们。从 agno.vectordb.mongodb 导入矢量数据库类,从 agno.db.mongo 导入数据库类。为了避免名称冲突,Agno 还将矢量数据库类导出为 MongoVectorDb。本页上的示例使用该别名。
选择 Basic initialization标签页以查看最小配置示例,或选择 Custom configuration标签页以查看如何使用自定义设置来配置集成。
要初始化向量数据库,请指定存储嵌入和MongoDB连接字符串的集合。以下示例创建了一个知识库,添加了一个文档,并授予代理访问权限数据的权限:
import os from agno.agent import Agent from agno.knowledge.knowledge import Knowledge from agno.vectordb.mongodb import MongoVectorDb vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", ) knowledge = Knowledge(vector_db=vector_db) knowledge.insert( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf", ) agent = Agent(knowledge=knowledge, search_knowledge=True)
以下示例启用混合搜索,使用 Voyage AI生成嵌入而不是 OpenAI默认嵌入,并指定MongoDB Vector Search索引名称:
import os from agno.agent import Agent from agno.knowledge.embedder.voyageai import VoyageAIEmbedder from agno.knowledge.knowledge import Knowledge from agno.vectordb.mongodb import MongoVectorDb from agno.vectordb.search import SearchType embedder = VoyageAIEmbedder( id="voyage-4-large", dimensions=1024, api_key=os.environ["VOYAGE_API_KEY"], request_params={"output_dimension": 1024}, ) vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", embedder=embedder, search_type=SearchType.hybrid, hybrid_vector_weight=0.7, hybrid_keyword_weight=0.3, search_index_name="agno_vector_index", ) knowledge = Knowledge(vector_db=vector_db) agent = Agent(knowledge=knowledge, search_knowledge=True)
如果您指定嵌入器,Agno 将使用嵌入器在创建MongoDB Vector Search索引时生成的维数。 request_params 字典将特定于提供程序的关键字参数传递给嵌入调用。对于 Voyage AI,output_dimension 控制支持可变维度的模型返回的向量的大小。
当您创建 Knowledge对象时,Agno 会验证该集合是否已存在。如果没有,Agno 将创建集合和MongoDB Vector Search索引。如果集合存在,Agno 不会检查索引是否存在,即使您单独删除索引也是如此。
创建索引后,Agno 会等待索引出现在集合中。但是,它不会验证索引状态,因此在索引构建完成后,立即运行的查询可能不会返回任何结果。
MongoVectorDb 类接受以下参数:
Parameter | 必要性 | 说明 |
|---|---|---|
| 必需 | 存储文档及其嵌入的集合的名称。 |
| Optional | MongoDB 部署的连接字符串。默认为 |
| Optional | 现有的 |
| Optional | 保存该集合的数据库的名称。默认为 |
| Optional | Agno 用于嵌入文档和查询的嵌入模型。默认为 |
| Optional | MongoDB Vector Search索引使用的相似度函数。目前仅支持默认值 |
| Optional | 检索策略。接受 |
| Optional | 混合搜索应用于语义结果的权重。默认为 |
| Optional | 混合搜索应用于关键字结果的权重。默认为 |
| Optional | 混合搜索在计算倒数排名融合分数之前添加到每个排名的常量。默认为 |
| Optional | 集合上的MongoDB Vector Search索引的名称。默认为 |
| Optional | 创建MongoDB Vector Search索引后,Agno 是否等待索引名称出现在集合的搜索索引中。将此参数设置为正数以等待,或设置为 |
| Optional | Agno 插入文档后的等待时间(以秒为单位)。默认为 |
| Optional | 驾驶员连接池的最大连接数。默认为 |
| Optional | 驾驶员是否重试支持的写入操作。默认为 |
| Optional | Agno 是否以Azure Cosmos DB for MongoDB vCore 格式而不是MongoDB Vector Search 格式创建索引。默认为 |
| Optional | 矢量数据库实例的标识元数据。如果您不指定 |
向量数据库方法
当您向知识库添加内容或代理搜索知识库时,Knowledge 类会调用以下方法。仅当您在 Knowledge对象之外管理文档时才直接调用这些方法。
要将写入或搜索操作限制为一个用户的文档,请将 user_id 值传递给操作方法。
方法 | 说明 |
|---|---|
| 嵌入 |
| 将每个文档嵌入 |
| 替换股票 |
| 删除集合中的每个文档,但保留集合及其MongoDB Vector Search索引。 |
| 删除具有指定 |
| 删除具有指定 |
| 删除 |
| 删除您的集合及其MongoDB Vector Search索引。 |
| 如果您的集合存在,则返回 |
| 返回集合中的文档数。 |
提示
异步方法
上表中描述的以下方法都有一个相应的异步方法:
search():使用async_search()insert():使用async_insert()upsert():使用async_upsert()drop():使用async_drop()exists():使用async_exists()
会话和内存数据库
agno.db.mongo 模块中的 MongoDb 类实现了 Agno数据库接口。要在MongoDB中持久保存助手的会话、用户记忆、指标和评估运行,请将此类的实例传递给 Agent、Team 或 Workflow 对象的 db对象。
选择 Basic initialization标签页以查看最小配置示例,或选择 Custom configuration标签页以查看如何使用自定义设置来配置集成。
要初始化数据库,请指定MongoDB连接字符串。以下示例创建一个代理,将其会话历史记录存储在MongoDB中,并将该历史记录包含在模型上下文中:
import os from agno.agent import Agent from agno.db.mongo import MongoDb db = MongoDb(db_url=os.environ["MONGODB_URI"]) agent = Agent(db=db, add_history_to_context=True)
以下示例指定数据库名称以及存储会话、内存和指标的集合的名称:
import os from agno.agent import Agent from agno.db.mongo import MongoDb db = MongoDb( db_url=os.environ["MONGODB_URI"], db_name="agno_prod", session_collection="agent_sessions", memory_collection="agent_memories", metrics_collection="agent_metrics", ) agent = Agent(db=db, add_history_to_context=True)
Agno 会在您配置的每个集合首次写入时创建该集合。
MongoDb 类接受以下参数:
Parameter | 必要性 | 说明 |
|---|---|---|
| 可选的 | MongoDB 部署的连接字符串。如果未指定 |
| 可选的 | 现有的 |
| Optional | 保存集合的数据库的名称。默认为 |
| Optional | 存储代理、团队和工作流会话的集合的名称。默认为 |
| Optional | 存储运行的集合的名称,每次运行一个文档。默认为 |
| Optional | 存储用户记忆的集合的名称。默认为 |
| Optional | 存储聚合使用指标的集合的名称。默认为 |
| Optional | 存储评估运行的集合的名称。默认为 |
| Optional | 存储知识内容元数据的集合的名称。默认为 |
| Optional | 存储跟踪和跨度的集合的名称。默认为 |
| Optional | 存储计划和安排运行的集合的名称。默认为 |
| Optional | 存储学习内容的集合的名称。默认为 |
| Optional | 数据库实例的标识符。如果您不指定此参数,Agno 将从连接字符串和数据库名称中派生。 |
当代理运行时,Agno 会自动读取和写入本节中描述的会话、内存和指标集合。 Agno 会在第一次需要时创建每个集合。您也可以直接在 MongoDb实例上调用方法,如下所示:
upsert_session()和get_sessions()读取和写入会话。upsert_user_memory()写入单个用户内存。get_metrics()读取聚合使用情况指标。upsert_sessions()和upsert_memories()在单个操作中写入许多记录,例如当您将现有会话历史记录迁移到MongoDB。close()释放客户端连接。在应用程序关闭时调用此方法。
搜索索引
Agno 首次创建向量集合时,还会在该集合上创建MongoDB Vector Search索引。索引名称是 search_index_name 参数的值,默认为 vector_index_1。您也可以手动创建或检查此索引。要学习;了解更多信息,请参阅创建MongoDB Vector Search 索引。
索引使用以下定义,其中 numDimensions 与嵌入器生成的维数匹配,similarity 与 distance_metric 值匹配:
{ "fields": [ { "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" }, { "type": "filter", "path": "user_id" } ] }
Agno 将 user_id字段作为过滤字段进行索引,以便将搜索范围限定为单个最终用户的文档。
混合搜索不需要MongoDB搜索索引。 Agno 将其关键字搜索作为对 content字段的正则表达式查询运行,然后使用倒数排名融合将这些结果与MongoDB Vector Search 结果合并。
其他资源
要学习;了解有关将 Agno 与MongoDB结合使用的更多信息,请参阅以下资源:
Agno GitHub存储库