OpenViking 使用经验记忆的机制,在不改变底层模型权重、也不侵入 Agent harness 主执行逻辑的前提下,基于自身历史执行过程沉淀可复用的执行知识,并在后续任务中被检索、注入和治理,从而持续改善任务完成质量、稳定性、效率和个性化表现。
Experience 不是历史对话的简单摘要,也不是把上一轮答案原样保存。
OpenViking 会结合同类、相似任务中的执行轨迹,提炼出可以迁移到下一次任务的做法:什么时候适用、推荐按什么步骤执行、需要检查什么、哪些路径容易失败。
对象 | 记录什么 | 在进化中的作用 |
|---|---|---|
Session | 原始消息、工具调用、工具结果、Agent 回复与用户反馈。 | 提供可追溯的原始证据。 |
Trajectory | 从 Session 中还原出的任务目标、执行路径与结果。 | 回答“这类任务具体是怎么做的,结果怎样”。 |
Experience | 由一条或多条相关 Trajectory 总结出的可复用方法与风险边界。 | 回答“下一次遇到相似任务,应该复用什么、避免什么”。 |
POST /api/v1/sessions/{session_id}/messagesPOST /api/v1/sessions/{session_id}/commit。要让抽取结果可靠,一个可学习的任务片段至少应包含:清晰的用户目标、Agent 的主要执行过程、关键工具调用及结果、最终回复;如果存在用户纠错、测试结果或旁路 Evaluator 反馈,保留在同一个任务片段中将获得更好的进化效果。
集成 OpenViking MCP 后,可安装经验记忆检索 skill(skills/ov-experience-memory)完成自动化的经验记忆检索和读取,或直接集成 OpenViking Plugin 自动获取 skill,在线消费经验记忆流程如下:
find 或 search,将范围限定到 viking://user/memories/experiences。read 读取精确的 Experience 文件 URI。搜索摘要只用于筛选,不能替代正文。说明
τ²-bench | 复杂业务策略与工具流程能否稳定复用
τ²-bench 把业务流程拆成可执行的业务世界:Retail(零售场景) 与 Airline (航空票务服务)都包含领域政策、动态数据库状态、工具 API、任务和用户模拟器。用户会在多轮对话中补充需求,Agent 必须一边澄清,一边按政策调用工具并推进订单、账户或行程状态。
经验记忆的价值体现在相似但不相同的请求里,能否复用验证、判断与执行方法,稳定走完正确流程。
经验记忆将 Retail 正确率从 70.94% 提升到 77.81%(+6.87 pp),将 Airline 从 54.38% 提升到 66.25%(+11.87 pp)。在一个“已送达商品换货”案例中,无记忆仅成功 2/8;召回标准流程经验后达到 8/8,说明经验不仅提高平均正确率,也能把特定流程从偶发成功变为稳定完成。
使用 Agent 经验实现进化能力前,需要在控制台打开 Agent 进化全局开关。该开关决定当前库中的 Session commit 是否允许生产或更新 Agent 经验记忆。关闭开关不会删除已有 Experience,也不影响已有 Experience 的读取与检索,但后续 commit 不再生成或更新 Trajectory / Experience。
企业版创建 User 时选择记忆模式
经验记忆以 User 维度沉淀(存储至
在企业版中创建 user 时,可选择不同的记忆策略:
模式 | 适用场景 | Agent 经验如何沉淀 |
|---|---|---|
通用策略 | 目录主体不固定;团队成员维护个人 Agent,或按 Session 灵活覆盖策略。 | ✅ 适合当前 User 目录代表一个用户和他的专属助手,会在 |
Agent 经验记忆 | Agent 只需要跨任务、跨终端用户积累执行方法;终端用户个人记忆由各自 user 管理。 | ✅ 适合当前 User 目录代表一个 Agent,仅在 |
用户个人记忆 | user 代表一个自然人,需要跨不同 Agent 积累个性化上下文。 | 默认不抽取 Agent 执行经验。若希望某个 Agent 跨用户学习,不应把 Agent 经验写入自然人的目录。 |
Account 全局开关和 User 记忆策略需要同时允许经验记忆。Session 还可以通过 memory_policy 进一步收窄当前会话的抽取范围(见:create_session-创建会话);Session 配置不能绕过已关闭的 Account 开关。将 experiences 放入 memory_types 时,OpenViking 会自动带上经验学习所需的 Cases 与 Trajectories 依赖。
场景 | 适配 Agent | 离线写入与 commit | 在线检索与读取 |
|---|---|---|---|
自主开发 Agent 服务 / 纯 MCP Agent | 自研的 Agent Runtime使用MCP接入OpenViking | 由开发者通过 Session API 自动写入 message,并在可靠任务边界调用 commit。 | 集成 OpenViking MCP 与 |
带 Hook 的专属 Agent 插件 | Codex、Claude Code、Hermes、OpenClaw | 插件在宿主生命周期节点自动捕获消息并 commit,无需业务代码逐个调用 Session API。 | 使用插件内的 MCP/工具面与 Experience Skill;关键任务也可以显式触发检索。 |
自研 Agent 服务需要把一次任务中的用户输入、Agent 回复和工具调用按真实顺序写入同一个 OpenViking Session。标准链路包含四个调用:创建 Session、写入 Message、Commit Session、观察 Commit 状态。
接口文档:create_session-创建会话
当 Agent 开始处理一个新的、可独立判断结果的任务时创建 Session,并在 Agent Runtime 中维护“宿主会话 ID → OpenViking session_id”的稳定映射。一个目标连续执行、失败后继续修复或用户纠错后重试时,应继续使用同一个 Session;切换到无关目标时再开启新的 Session。
curl -X POST "$OV_ENDPOINT/api/v1/sessions" \ -H "Content-Type: application/json" \ -H "X-API-Key: $OV_API_KEY" \ -d '{ "auto_commit_policy": { "pending_token_threshold": 150000, "message_count_threshold": 100, "idle_timeout_seconds": 86400, "keep_recent_count": 0, "min_commit_interval_seconds": 0 } }'
保存响应中的 result.session_id。是否已经启用自动 Commit,以响应中的 result.auto_commit_policy 为准;如果返回 null,不要假设服务端会自动 Commit。
接口文档:add_message-添加消息
用户消息、Agent 的中间说明、Tool Call 和最终回答都应按发生顺序写入。纯文本可以使用 content;涉及工具调用时使用 parts,把工具名、输入、状态和真实输出保存在同一个 assistant message 中。
curl -X POST "$OV_ENDPOINT/api/v1/sessions/$SESSION_ID/messages" \ -H "Content-Type: application/json" \ -H "X-API-Key: $OV_API_KEY" \ -d '{ "role": "assistant", "parts": [ { "type": "text", "text": "我先查询目标环境的部署状态。" }, { "type": "tool", "tool_id": "call_123", "tool_name": "get_deployment_status", "tool_input": {"service": "checkout"}, "tool_status": "completed", "tool_output": "{\"status\":\"degraded\",\"replicas\":2}" } ] }'
tool_id;不要把多次调用合并成一条摘要。tool_status=completed 和真实结果;失败时写入 tool_status=error,并保留可诊断的错误信息。POST /api/v1/sessions/{session_id}/messages/batch;单批最多 100 条。接口文档:commit_session-提交会话commit 会先同步归档原始消息,再在后台异步生成摘要并抽取经验记忆。主动 Commit 时,优先判断“这个片段是否已经包含完整的目标、执行过程和可判断的结果”,而不是只看消息数或 Token 数。
curl -X POST "$OV_ENDPOINT/api/v1/sessions/$SESSION_ID/commit" \ -H "Content-Type: application/json" \ -H "X-API-Key: $OV_API_KEY"
触发时机 | 建议 | 判断方式 |
|---|---|---|
任务完成或给出最终回答 | 主动 Commit | 目标、执行路径和结果完整,适合总结成功方法与检查项。 |
任务失败、用户纠错或修复完成 | 主动 Commit | 如果还会继续修复,等新的结果出现后一起提交;如果任务已经终止,则保留失败原因后提交。 |
切换到无关的新目标 | 主动 Commit | 先提交前一个任务,再开始新的 Session,避免多个无关目标混在一次抽取中。 |
Reset、Compact 或 Session End | 客户端兜底 | 防止尚未归档的执行轨迹长期停留在 live Session。 |
Token、消息数或空闲时间达到阈值 | OpenViking 兜底 | 由 |
说明
不知道何时 Commit,也可以交给 OpenViking 兜底。
只要 Session 已启用 auto_commit_policy(见:create_session-创建会话),Agent 服务持续写入 Message 即可;OpenViking 会在 pending Token、消息数超过阈值,或 Session 空闲达到设定时间后自动 Commit。自动机制主要用于避免数据长期未归档;能识别任务完成、失败修复或用户纠错等语义边界时,仍建议主动 Commit。
接口文档:get_task-获取后台任务状态
Commit 返回 status=accepted 时,保存 task_id 并查询后台任务;这只代表异步处理已受理,不代表经验已经抽取完成。返回 status=skipped 且 task_id=null 时,表示没有可归档内容,无需轮询。
curl -X GET "$OV_ENDPOINT/api/v1/tasks/$TASK_ID" \ -H "X-API-Key: $OV_API_KEY"
Task 状态 | Agent 服务处理方式 |
|---|---|
| 按退避策略继续查询,不要重复提交同一段 Session。 |
| 处理完成;可读取 |
| 记录 |
在线集成的目标,是让 Agent 在开始高价值任务前先检索过去的 Experience,在真正需要时读取少量原文,并把适用的最佳实践和避坑指南用于当前执行。适合编码、配置、调试、故障恢复以及多步骤、工具密集型任务;闲聊和一次性事实问答通常不需要检索。
组件 | 作用 | 职责边界 |
|---|---|---|
OpenViking MCP | 向 Agent 暴露 | 负责连接与执行工具调用;是否使用哪些可选工具,以当前 MCP 实际注册结果为准。 |
| 指导 Agent 何时检索、如何构造 query、如何筛选和读取 Experience。 | Skill 是使用策略,不是自动 Hook;安装 Skill 不等于已经连接 MCP,也不会自动完成 Session Commit。 |
先在 Agent 中配置 OpenViking MCP Server,并确认当前会话至少注册了 find、search 和 read。如果没有任何 OpenViking 工具,应继续完成当前任务,但不要伪造经验检索结果或退回到未约定的 HTTP 调用。
从 OpenViking 官方仓库下载 ov-experience-memory Skill,并复制到 Agent 支持的 Skills 目录。
find,初始 limit 建议为 5~10;已知要查经验时,将范围收敛到 viking://~/memories/experiences。search;需要服务端拼装限额上下文时,可以使用 search(mode="context")。read。find({ "query": "deployment image pull failure private registry", "target_uri": "viking://~/memories/experiences", "limit": 5 }) read({ "uri": "find 返回的 Experience URI" })
OpenClaw、Codex 等专属插件会挂载宿主的生命周期 Hook:在用户输入、每轮结束、上下文压缩、重置或会话切换等节点自动召回、捕获消息,并按各自策略 commit。开发者无需在业务代码中逐条实现 Session API,但仍需要正确配置 OpenViking 地址、API Key 和目标 User。
插件 / 专属集成 | 自动化能力 | 使用建议 |
|---|---|---|
OpenClaw | 自动捕获对话、任务前召回,并在消息量达到阈值、compact、reset 等边界 commit。 | 安装后先运行插件状态检查;使用 Experience Skill 处理高价值执行任务与故障恢复。 |
Claude Code | 每轮结束自动捕获;消息量达到阈值、PreCompact、SessionEnd、SubagentStop 时自动 commit。 | 适合需要完整生命周期 Hook 和子 Agent 隔离的场景;安装后用插件状态页确认 Hook 与 MCP 均已生效。 |
Codex | 通过 Hook 自动召回、增量捕获;消息量达到阈值、上下文压缩及可用的会话结束事件会触发 commit,并在下次启动时补偿未提交会话。 | 首次启动按宿主要求批准 Hook;TraeCode CLI 2.0 复用 Codex 插件,若宿主未提供 SessionEnd,则依赖下次 SessionStart 补偿。 |
Cursor | 自动捕获每轮对话;累计 8 条消息(约 4 轮问答)或 PreCompact 时自动 commit。 | 关闭会话或窗口不一定触发有效提交;短会话结束前建议触发 compact,或确认已达到提交阈值。 |
TRAE / TRAE CN | 每次 Stop 都会捕获并立即 commit 当前已完成的一轮,无需累计到阈值。 | 适合希望每轮及时沉淀经验的场景;需使用支持 SessionStart、UserPromptSubmit、PreToolUse、Stop Hook 的版本。 |
OpenCode | 在会话空闲且消息量达到阈值时 commit;会话删除、错误、插件卸载,以及上下文压缩前后也会强制提交。 | 建议使用支持 dispose 生命周期的较新版本;退出时间过短时仍需检查最后一批消息是否完成提交。 |
Hermes(内置 MemoryProvider) | 无需另装 OpenViking 插件;在会话结束、切换、分支式压缩或缓存淘汰等边界自动 commit。 | 先将 OpenViking 设为 Hermes 的 MemoryProvider;原地压缩和异常强退不保证触发提交。 |
专属插件的 commit 触发点会随宿主能力变化,不建议把某一个插件的阈值照搬给其他 Agent。验收时关注结果:消息是否持续写入、关键边界是否 commit、后台任务是否完成、Experience 是否能被 find/search + read 真实使用。
find/search 与 read,而不是仅在提示词里声称“已读取经验”。查看 Experience 内容
进入 Agent 进化 ,查看 Experience 列表与详情。企业版按 User 展示,不聚合不同 User 的数据。可查看:
沿 Trajectory 追溯到 Session
一条 Experience 应能追溯到一条或多条来源 Trajectory,并继续追溯到原始 Session。可检查:
查看经验复用效果
OpenViking 提供 Experience 被实际读取后所关联的 Trajectory 与结果分布。
查看迭代并测试 Experience
在 测试 页面可自动展示经验生产的来源轨迹,抽取轨迹的用户意图,并拼接经验原文,可一键复制到您的 agent 测试加入经验的执行效果。
*注:若原始意图包含用户上传的文件,则需要您获取历史文件再次模拟用户使用的输入