MongoDB
agentscope-extensions-mongodb 提供全链路的 MongoDB 分布式存储实现,适合已部署 MongoDB 或偏好文档型后端的场景。
添加依赖
一键配置
/mydb),将使用该库而非默认的 agentscope。
提供的组件
1. MongoAgentStateStore
Agent 会话状态持久化到 MongoDB。每个会话是一个文档,使用复合_id {user, session}。State key 存储在 states 子文档中(通过 dot notation 访问),与保留字段隔离。
- 单值:存储在
states.<key>,版本号在versions.<key>。 - 列表:存储在
states.<key>为 BSON 数组,内容 hash 在hashes.<key>,用于增量 append 优化。 - TTL:
_updated_at上 30 天过期(sparse 索引),与快照 TTL 对齐。
2. MongoBaseStore(BaseStore)
工作区文件系统 KV 存储,供RemoteFilesystemSpec 使用。通过复合 (namespace, key) 索引上的范围查询实现前缀匹配——与 InMemoryStore 和 PostgresBaseStore 行为一致。
- 命名空间路径使用
\u001F(ASCII Unit Separator)作为段分隔符,带 trailing separator 实现前缀匹配。 put/putIfVersion通过version字段支持乐观并发。
3. MongoSnapshotSpec
沙箱快照存储为 BSON Binary,集合上建有createdAt 的 30 天 TTL 索引。与会话 TTL 对齐,确保快照不会先于会话过期。
BSON 文档大小上限 16 MB,快照上限 15 MB。更大工作区建议混合后端(MongoDB 管状态和锁,OSS 管快照)。
4. MongoSandboxExecutionGuard
基于 MongoDB 集合的分布式锁,expiresAt 上建有 TTL 索引。每次获取锁生成随机 UUID token 用于安全续约和释放——同一 JVM 内两个 guard 实例不会误删对方的锁。
lockTimeout仅限制获取等待时间;leaseTtl控制锁文档生存期。- 后台 watchdog 每
leaseTtl / 3续约一次,使用 2 线程池避免单线程阻塞。 - guard 实现
AutoCloseable,由MongoDistributedStore.close()级联关闭。
集合与 TTL
所有集合名集中在
MongoConstants 中管理,可按组件覆盖。