Docs 菜单
Docs 主页
/
Atlas
/

使用 MongoDB Atlas 构建 AI 代理

MongoDB Atlas 提供了多种功能来构建 AI 代理。作为向量和文档数据库,Atlas 支持代理型 RAG 的各种搜索方法,以及将代理交互存储在同一个数据库中以进行短期和长期代理记忆。

开始体验

在生成式人工智能的背景下,AI 代理通常指的是能够通过结合 AI 模型(如 LLM)与一组预定义工具,以自主或半自主方式完成任务的系统。

AI 代理可以使用工具收集上下文、与外部系统交互并执行操作。它们可以确定自己的执行流程(规划),并记住以前的交互情况,为响应提供依据(记忆)。因此,AI 代理最适合需要推理、规划和决策的复杂任务。

显示 MongoDB Atlas 单代理架构的图表
点击放大

AI 代理通常包含以下组件的组合:

感知

您对代理的输入。文本输入是 AI 代理最常见的感知机制,但输入也可以是音频、图像或多模态数据。

计划

代理如何确定下一步做什么。该组件通常包括 LLM 和提示,使用反馈循环和各种 提示工程技术,例如思维链和 reAct,帮助 LLM 推理复杂任务。

AI 代理可以由作为决策者的单个 LLM、具有多个提示的 LLM、多个协同工作的 LLM,或这些方法的任意组合组成。

工具

代理如何为任务收集上下文信息。工具允许代理与外部系统交互,并执行诸如向量搜索、网络搜索或从其他服务调用 API 等操作。

内存

一种用于存储代理交互的系统,使代理能够从过去的经验中学习,从而做出相应的响应。记忆可以是短期记忆(用于当前会话)或长期记忆(在会话之间持久化)。

注意

AI 代理在设计模式、功能和复杂性上各不相同。要学习其他代理架构,包括多代理系统,请参阅代理设计模式。

MongoDB Atlas 支持以下用于构建 AI 代理的组件:

  • 工具:利用 MongoDB 的搜索功能作为工具,帮助代理检索相关信息并实现代理型 RAG。

  • 存储器:将代理交互数据存储在 MongoDB 集合中,以满足短期和长期记忆需求。

除了标准 MongoDB 查询之外,Atlas 还提供了多种搜索功能,您可以将其作为代理工具来使用。

  • Atlas Vector Search:执行向量搜索,根据语义含义和相似性检索相关上下文。要了解更多信息,请参阅 Atlas Vector Search 概述。

  • Atlas Search:执行全文搜索,根据关键字匹配和相关性分数检索相关上下文。要了解更多信息,请参阅 Atlas Search 概述。

  • 混合搜索:结合 Atlas Vector Search 和 Atlas Search,充分利用两种方法的优势。如要了解更多信息,请参阅如何执行混合搜索

您可以手动定义工具,也可以使用 LangChain 和 LangGraph 等框架定义工具,这些框架为工具创建和调用提供了内置抽象。

工具被定义为智能体可调用的函数,用于执行特定任务。例如,以下语法说明了如何定义一个运行向量搜索查询的工具:

def vector_search_tool(query: str) -> str:
pipeline = [
{
"$vectorSearch": {
# Vector search query pipeline...
}
}
]
results = collection.aggregate(pipeline)
array_of_results = []
for doc in results:
array_of_results.append(doc)
return array_of_results

工具调用是代理用于执行工具的方式。您可以在代理中定义如何处理工具调用,或者使用框架处理此问题。这些通常定义为 JSON 对象,其中包括工具名称和其他要传递给工具的参数,这样代理就可以使用适当的参数调用工具。例如,以下语法展示了代理如何调用 vector_search_tool

{
"tool": "vector_search_tool",
"args": { "query": "What is MongoDB?" },
"id": "call_H5TttXb423JfoulF1qVfPN3m"
}

通过使用 Atlas 作为向量数据库,您可以创建实现代理型 RAG 的检索工具,这是一种 RAG 的高级形式,允许您通过 AI 代理动态协调检索和生成过程。

显示代理型 RAG 架构与 MongoDB Atlas 的示意图
点击放大

这种方法使得能够实现更复杂的工作流和用户交互。例如,您可以配置 AI 代理,根据任务确定最佳检索工具,例如使用 Atlas Vector Search 进行语义搜索和 Atlas Search 进行全文搜索。您还可以为不同的集合定义不同的检索工具,以进一步自定义代理的检索功能。

由于 Atlas 也是一个文档数据库,因此可以通过在 MongoDB 集合中存储交互来实现代理记忆。然后,代理可以根据需要查询或更新此集合。有多种方法可以使用 MongoDB 实现代理记忆:

存储短期记忆的集合中的文档可能类似于以下内容:

{
"session_id": "123",
"user_id": "jane_doe",
"interactions":
[
{
"role": "user",
"content": "What is MongoDB?",
"timestamp": "2025-01-01T12:00:00Z"
},
{
"role": "assistant",
"content": "MongoDB is the world's leading modern database.",
"timestamp": "2025-01-01T12:00:05Z"
}
]
}

存储长期记忆的集合中的文档可能类似于以下内容:

{
"user_id": "jane_doe",
"last_updated": "2025-05-22T09:15:00Z",
"preferences": {
"conversation_tone": "casual",
"custom_instructions": [
"I prefer concise answers."
],
},
"facts": [
{
"interests": ["AI", "MongoDB"],
}
]
}

以下框架也为代理记忆提供了与 MongoDB 的直接抽象:

框架
功能

LangChain

  • MongoDBChatMessageHistory:聊天消息历史组件

  • MongoDBAtlasSemanticCache:语义缓存组件

要了解更多信息,请参阅教程。

LangGraph

  • MongoDBSaver:可用于持久化的检查点程序

如需了解更多信息,请参阅 LangGraphLangGraph.js

以下教程演示了如何使用 Atlas 构建 AI 代理,以实现代理 RAG 和内存功能,而无需使用代理框架。

使用本教程的可运行版本以作为 Python 笔记本

如要完成本教程,您必须具备以下条件:

  • 一个 Atlas 帐户,而其集群运行着 MongoDB 版本 6.0.11、7.0.2 或更高版本(包括 RC)。确保您的 IP 地址包含在 Atlas 项目的访问列表中。如需了解详情,请参阅创建集群

  • Voyage AI API 密钥。

  • 一个 OpenAI API 密钥。

注意

本教程使用来自 Voyage AI 和 OpenAI 的模型,但您可以修改代码以使用您选择的模型。

此 AI 代理可用于回答有关自定义数据源的问题并执行计算。它还可以记住之前的交互,以便提供更准确的响应。它使用以下组件:

  • 感知:文本输入。

  • 规划:使用一个LLM和多个提示来推理完成任务。

  • 工具:向量搜索工具和计算器工具。

  • Memory:将交互存储在 MongoDB 集合中。

1
  1. 初始化项目并安装依赖项。

    创建一个新的项目目录,然后安装所需的依赖项:

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    pip install --quiet --upgrade pymongo voyageai openai langchain langchain_mongodb langchain_community

    注意

    您的项目将使用以下结构:

    mongodb-ai-agent
    ├── config.py
    ├── ingest-data.py
    ├── tools.py
    ├── memory.py
    ├── planning.py
    ├── main.py
  2. 配置环境。

    在项目中创建一个名为 config.py 的文件。此文件将包含代理 API 密钥、Atlas 连接字符串,以及 MongoDB 数据库和集合名称。

2

在项目中创建一个名为 ingest-data.py 的文件。该脚本使用 voyage-3-large 嵌入模型,将包含近期 MongoDB 收益报告的示例 PDF 文件导入到 Atlas 的一个集合。

要了解更多信息,请参阅摄取。

3

在项目中创建一个名为 tools.py 的文件。该文件定义了代理可以用来回答问题的工具。在此示例中,您定义以下工具:

  • vector_search_tool运行向量搜索查询,从集合中检索相关文档。

  • calculator_tool:使用 eval() 函数进行基本数学运算。

4

在项目中创建一个名为 memory.py 的文件。此文件定义了代理用于存储其交互的系统。在此示例中,您通过定义以下函数来实现短期记忆:

  • store_chat_message:将交互信息存储在 MongoDB 集合中。

  • retrieve_session_history:通过使用 session_id 字段来获取特定会话的所有交互。

5

在项目中创建一个名为 planning.py 的文件。该文件将包括各种提示和 LLM 调用,以确定代理的执行流程。在此示例中,您定义以下函数:

  • tool_selector:决定 LLM 如何为任务选择合适的工具。

  • generate_answer:通过使用工具、调用 LLM 和处理结果来编排代理执行流。

  • get_llm_response:用于生成 LLM 响应的辅助函数。

6

最后,在项目中创建一个名为 main.py 的文件。此文件运行代理并允许您与其交互。

保存项目,然后运行以下命令。当您运行代理时:

  • 如果还没有,请指示代理引入示例数据。

  • 请输入会话 ID,开始新会话或继续现有会话。

  • 提出问题。代理会根据您的工具、上一个交互以及在规划阶段定义的提示生成响应。请参阅示例输出,获取示例交互:

python main.py
Ingest sample data? (y/n): y
Successfully split PDF into 104 chunks.
Generating embeddings and ingesting documents...
Inserted 104 documents into the collection.
Search index 'vector_index' creation initiated.
Polling to check if the index is ready. This may take up to a minute.
vector_index is ready for querying.
Enter a session ID: 123
Enter your query (or type 'quit' to exit): What was MongoDB's latest acquisition?
Tool selected: vector_search_tool
Answer:
MongoDB's latest acquisition was Voyage AI.
Enter your query (or type 'quit' to exit): What do they do?
Tool selected: vector_search_tool
Answer:
Voyage AI is a company that specializes in state-of-the-art embedding and reranking models designed to power next-generation AI applications. These technologies help organizations build more advanced and trustworthy AI capabilities.
Enter your query (or type 'quit' to exit): What is 123+456?
Tool selected: calculator_tool
Answer:
579

提示

您可以通过导航到集群中的 Atlas 数据库并选择 ai_agent_db 或集合,查看 Atlas 用户界面中的 embeddings chat_history 嵌入和交互。

7

现在您已经有了一个基本的 AI 代理,可以通过以下方式继续开发:

如需更多关于使用 MongoDB 构建 AI 代理的教程,请参阅下表:

后退

Playground Chatbot Demo Builder

获得技能徽章

免费掌握“Gen AI”!

了解详情

在此页面上