对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

开始使用MongoDB Agno 集成

您可以将MongoDB与 Agno 集成,为AI助手配置可搜索的知识库和持久的对话历史记录。本教程演示如何配置 Agno代理以使用MongoDB进行知识检索和会话存储,然后使用该配置构建烹饪助手。具体而言,您将执行以下任务:

  1. 设置您的环境。

  2. 将MongoDB配置为 Agno 知识库。

  3. 构建一个助手,回答文档中的问题并记住之前的对话轮次。

  4. 运行该文件并查看输出。

Agno 是一个开源Python框架,用于构建多模式AI助手。 Agno代理由模块化组件组成,包括一个可选的知识库和一个可选的数据库,您可以独立配置这些组件并传递给同一个 Agent对象。

MongoDB提供了其中两个组件,您可以通过导入以下类来使用它们:

  1. MongoVectorDb 类:使用MongoDB Vector Search 实现 Agno 的矢量数据库接口,从而允许代理从MongoDB集合中检索相关文档

  2. MongoDb class:实现 Agno 的数据库接口,将代理会话、内存和指标持久保存为MongoDB集合中的文档

提示

Agno 将这两个MongoDB类命名为 MongoDb,因此它将矢量数据库类导出为 MongoVectorDb 以避免冲突。要学习;了解更多信息,请参阅将MongoDB与 Agno 框架集成。

本教程使用这两个组件,并将其数据存储在同一MongoDB 部署中。

要完成本教程,您必须拥有以下资源:

  • 以下MongoDB 集群类型之一:

    • 一个 Atlas 集群,运行 MongoDB 6.0.11、7.0.2 或更高版本。请确保您的 IP 地址包含在 Atlas 项目的访问列表中。

    • 使用Python和Docker创建的本地Atlas部署。安装atlas-local-lib-py pip install atlas-local-lib-py(),以编程方式创建和管理本地部署。要学习;了解更多信息,请参阅 atlas-local-lib-py存储库。

    • 安装了Search 和向量搜索的 MongoDB Community 集群。

  • 一个 OpenAI API 密钥。您必须拥有一个 OpenAI 帐户,该帐户具有可用于 API 请求的信用额度。要了解有关注册 OpenAI 账号的更多信息,请参阅 OpenAI API 网站。

  • Python v3.9 或更高版本。

1

在终端中运行以下命令,创建名为 agno-mongodb-project 的新目录并安装所需的依赖项:

mkdir agno-mongodb-project
cd agno-mongodb-project
pip install agno pymongo openai python-dotenv pypdf
2

在 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

要学习;了解更多信息,请参阅通过客户端库连接到集群。

连接字符串应使用以下格式:

mongodb://localhost:<port-number>/?directConnection=true

要学习;了解更多信息,请参阅连接字符串。

3

在 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 知识库的向量存储,在其中存储数据,并对其运行语义搜索查询。

1

添加以下代码,为您的知识库配置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索引一起创建。

构建索引大约需要一分钟时间。在构建时,索引处于初始同步状态。构建完成后,您可以开始查询集合中的数据。

2

将以下代码添加到您的 main.py文件中,以将包含泰国菜谱的 PDF文件加载到您的知识库中:

knowledge.insert(
name="Recipes",
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
)

Agno 下载文件,将其分割为数据段,使用默认的OpenAI 嵌入器为每个数据块生成嵌入,并将结果写入集合。

提示

要检查存储的文档,请在Atlas用户界面中浏览 agno.agent_knowledge集合。每个文档都有一个包含数据块食谱文本的 content字段和一个包含生成的向量的 embedding字段。要学习;了解更多信息,请参阅查看集合。

3

将以下代码添加到 main.py文件中,以便在将知识库连接到代理之前直接查询知识库的向量数据库。此示例搜索与绿咖喱问题最相关的三个数据段:

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]}")

结果包括与查询语义最相关的菜谱数据段,按相似度得分排名。

在本节中,您将把自己的知识库与MongoDB 数据库结合起来,构建一个完整的助手。该代理会从您的知识库中检索相关文档以回答问题,并将其对话历史记录保留在MongoDB中,以便可以引用较早的对话。

1

将以下代码添加到 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.",
],
)
2

将以下代码添加到 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 索引。