AI Agent MongoDB集成:灵活的非结构化存储
Agent 产生的数据往往结构不固定,对话历史可以有不同字段、不同长度。MongoDB 的文档模型不需要预定义 Schema,随时加字段,天然适合这类数据。本文讲清楚为什么选 MongoDB,以及写入、查询、索引的完整用法。
💡 你将学到
Agent 产生的数据往往结构不固定,对话历史可以有不同字段、不同长度。MongoDB 的文档模型不需要预定义 Schema,随时加字段,天然适合这类数据。本文讲清楚为什么选 MongoDB,以及写入、查询、索引的完整用法。
AI Agent MongoDB集成:灵活的非结构化存储
Agent 产生的数据往往结构不固定:对话历史可以有不同字段、不同长度,工具调用的记录时有时无,元数据五花八门。如果硬塞进关系型数据库,每加一个字段都要改表结构。MongoDB 的文档模型不需要预定义 Schema,想存什么存什么,天然适合这类数据。本文讲清楚为什么选它,以及核心用法。
一、为什么 Agent 数据适合 MongoDB
| 特征 | 关系型数据库 | MongoDB |
|---|---|---|
| 字段变化 | 要 ALTER TABLE | 直接插入,无需迁移 |
| 嵌套结构 | 要拆多张表 | 文档天然支持嵌套 |
| 对话历史 | 设计复杂 | 一条文档存整个会话 |
| 查询灵活性 | 固定列查询 | 任意字段查询 |
Agent 场景的三个典型数据形态,都是 MongoDB 的主场: - 对话历史:session 维度一条文档,消息数组随意增长 - 记忆存储:每条记忆的字段可以各不相同 - 工具调用记录:参数、结果、耗时,按需追加字段
二、安装与连接
Python 环境用官方驱动 pymongo:
pip install pymongo
连接本地或云端实例:
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["agent_db"]
collection = db["conversations"]
三、核心操作:写入
Agent 每轮对话存一条文档,字段随便加:
session_id = "session-20260829-001"
collection.insert_one({
"agent_id": "agent-001",
"session": session_id,
"messages": [
{"role": "user", "content": "总结这篇文档"},
{"role": "assistant", "content": "文档要点是..."},
],
"metadata": {
"model": "gpt-4o",
"tokens": 1500,
"latency_ms": 3200
}
})
不需要预定义表结构,下次想加 "source": "email" 字段,直接加进字典插入即可,其他旧文档不受影响。
四、核心操作:查询与更新
按会话取回完整历史:
conv = collection.find_one({"session": session_id})
for msg in conv["messages"]:
print(msg["role"], msg["content"])
按条件更新(比如修正一条回复):
collection.update_one(
{"session": session_id, "messages.role": "assistant"},
{"$set": {"messages.$.content": "修正后的回复"}}
)
给某个 agent 的全部会话追加标签:
collection.update_many(
{"agent_id": "agent-001"},
{"$set": {"tags": ["production", "v2"]}}
)
五、性能:索引
数据量上来后,查询变慢,给高频查询字段加索引:
collection.create_index("session")
collection.create_index([("agent_id", 1), ("created_at", -1)])
经验法则: - 按 session 查历史,给 session 加索引 - 按 agent + 时间排序,建联合索引 - 元数据字段很少直接查,不必全加索引
六、进阶:给 Agent 当记忆库
MongoDB 也可以当 Agent 的长期记忆:按实体存储用户偏好、项目背景、历史决策,每次对话先查相关记忆再拼进上下文。相比向量数据库,它的优势是结构清晰、随时可查可改;需要语义检索时再配合向量索引使用,两者互补。
常见问题
Q:和 PostgreSQL 怎么选? A:数据高度结构化、强依赖事务和关联查询,选 PostgreSQL;字段经常变、嵌套深、要灵活扩展,选 MongoDB。
Q:存对话历史会不会越来越大? A:会。建议按时间归档旧会话,或只保留摘要,原始记录定期清理。
Q:并发写入会冲突吗? A:单文档更新是原子的,多 Agent 同时写不同文档没有冲突;同一文档频繁并发更新时注意业务设计。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
