Docs 菜单
Docs 主页
/ /

使用 MongoDB 构建 AI 代理

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

开始体验

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

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

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

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

感知

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

计划

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

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

工具

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

内存

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

注意

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

MongoDB支持使用以下组件来构建AI助手:

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

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

除了标准MongoDB查询之外, MongoDB还提供多种搜索功能,您可以将这些功能实现为代理的工具。

  • MongoDB Vector Search:执行向量搜索,根据语义和相似性检索。要学习;了解更多信息,请参阅 MongoDB Vector Search 概述。

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

  • 混合搜索:将MongoDB Vector Search 与MongoDB Search 相结合,以充分利用两种方法的优势。要学习;了解详情,请参阅如何执行混合搜索。

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

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

async function vectorSearchTool(query) {
const pipeline = [
{
$vectorSearch: {
// Vector search query pipeline...
}
}
];
const results = await collection.aggregate(pipeline).toArray();
return results;
}
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对象,其中包括工具名称和其他要传递给该工具的参数,以便代理可以使用适当的参数调用该工具。示例,以下语法说明了代理如何调用向量搜索工具:

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

通过使用MongoDB作为向量数据库,您可以创建实现代理 RAG 的检索工具,代理 RAG 是RAG的高级形式,允许您通过AI代理动态编排检索和生成进程。

显示采用MongoDB的代理 RAG 架构的示意图
点击放大

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

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

  • 对于短期记忆,您可以在存储交互时包含 session_id字段来标识特定会话,然后查询具有相同ID的交互以作为上下文传递给代理。

  • 为了长期记忆,您可能会处理与 LLM 的多次交互,以提取相关信息,例如用户偏好或重要的上下文,然后将这些信息存储在一个单独的集合中,以便代理在需要时查询。

  • 要构建强大的内存管理系统,启用更高效、更复杂地检索对话历史记录,请利用MongoDB SearchMongoDB Vector Search 来存储、索引和查询跨会话的重要交互。

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

{
"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:可用于持久性的短期内存检查指针

  • MongoDBStore:用于在MongoDB中存储内存的长期文档存储(仅在Python集成中可用)

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

以下教程演示了如何在没有代理框架的情况下,使用MongoDB提供代理 RAG 和内存构建AI代理。


➤ 使用选择语言下拉菜单设立本教程的语言。


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

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

  • 以下MongoDB 集群类型之一:

  • Voyage AI API 密钥。

  • 一个 OpenAI API 密钥。

注意

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

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

  • 感知:文本输入。

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

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

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

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

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

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    npm init -y
    npm install --quiet dotenv mongodb voyageai openai langchain @langchain/community @langchain/core mathjs pdf-parse

    注意

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

    mongodb-ai-agent
    ├── .env
    ├── config.js
    ├── ingest-data.js
    ├── tools.js
    ├── memory.js
    ├── planning.js
    └── index.js
  2. 配置环境。

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

2

在项目中创建一个名为 config.js 的文件。此文件将读取您的环境变量,并将应用程序连接到MongoDB 数据库和 OpenAI 等服务。

3

在项目中创建一个名为 ingest-data.js 的文件。此脚本使用 voyage-3-large 嵌入模型将包含最新MongoDB收益报告的示例PDF 提取到MongoDB中的集合中。此代码还包含一个函数,用于在数据上创建向量搜索索引(如果尚不存在)。

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

4

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

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

  • calculatorTool:使用 mathjs 库进行基本数学运算。

5

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

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

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

6

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

  • openAIChatCompletion:调用 OpenAI API来生成响应的辅助函数。

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

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

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

7

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

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

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

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

  • 提出问题。代理会根据您的工具、上一个交互以及在规划阶段定义的提示生成响应。

请参阅示例输出,获取示例交互:

node index.js
Ingest sample data? (y/n): y
Chunked PDF into 100 documents.
Inserted documents: 100
Attempting to create/verify Vector Search Index...
New index named vector_index is building.
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 recently acquired Voyage AI, a pioneer in embedding and reranking models that power next-generation AI applications.
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 ,则可以导航到Atlas用户用户界面中的 ai_agent_db.embeddings 命名空间以验证嵌入和交互。

8

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

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

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

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    pip install --quiet --upgrade pymongo voyageai openai langchain langchain-mongodb
    langchain-community python-dotenv

    注意

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

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

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

2

在项目中创建一个名为 config.py 的文件。此文件将读取您的环境变量,并将应用程序连接到MongoDB 数据库和 OpenAI 等服务。

3

在项目中创建一个名为 ingest_data.py 的文件。此脚本使用 voyage-3-large 嵌入模型将包含最新MongoDB收益报告的示例PDF 提取到MongoDB中的集合中。此代码还包含一个函数,用于在数据上创建向量搜索索引(如果尚不存在)。

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

4

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

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

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

5

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

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

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

6

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

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

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

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

7

最后,在项目中创建一个名为 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 ,则可以导航到Atlas用户用户界面中的 ai_agent_db.embeddings 命名空间以验证嵌入和交互。

8

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

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

后退

Playground Chatbot Demo Builder

获得技能徽章

免费掌握“Gen AI”!

了解详情

在此页面上