OpenViking ov_dream 技能实战:为 OpenClaw Agent 打造手动同步与召回记忆的轻量 CLI

发布时间:2026/9/10 1:16:04

OpenViking ov_dream 技能实战:为 OpenClaw Agent 打造手动同步与召回记忆的轻量 CLI OpenViking ov_dream 技能实战为 OpenClaw Agent 打造手动同步与召回记忆的轻量 CLI【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking导读ov_dream是 OpenViking 为 OpenClaw Agent 提供的一枚技能Skill它绕开插件plugin槽位用最轻量的方式打通两条核心链路手动同步ov dream——把 OpenClaw 最近记录的聊天会话转录同步进 OpenViking手动召回ov recall query——以自然语言查询直接命中 OpenViking 用户空间下的记忆。读完本文你将掌握这枚技能的完整使用规则、底层 CLI 的调用链与认证模型、OV Lite 无插件安装方式以及如何用 cron 把同步变成定期执行的自动化任务。本文以 SKILL.md 为骨架结合其背后的 dream.py、测试用例 与 OpenViking 服务端路由实现展开讲解。一、技能定位何时使用ov_dreamov_dream的使用前提非常明确当用户在消息开头输入了精确前缀ov dream或ov recall时这条消息不应被当作普通对话处理而是显式的操作员命令。该技能在 SKILL.md 中被声明为Use when the user explicitly typesov dreamorov recall queryand the request should be routed to the OpenViking sync/recall CLI instead of handled as normal chat.也就是说这是一条路由规则routing rule而非闲聊场景。它的设计目标是不占用 OpenClaw 的contextEngine插件槽位——第一版刻意保持纯手动manual-only不做自动注入不取代 OpenViking 的 context-engine 插件从而让用户在已有插件体系之外多一个随时可用的运维入口。二、命令总览命令语义底层动作ov dream手动同步读取 OpenClaw 的sessions.json把符合聊天条件的会话转录同步到 OpenViking有新消息时逐个 commit 会话ov recall query手动召回在默认用户根 URIviking://user/default下搜索 OpenViking 记忆两条命令的底层都收敛到同一个脚本 dream.py# 同步 python3 scripts/dream.py dream # 召回 python3 scripts/dream.py recall queryCLI 入口main()甚至内置了对ov dream/ov recall xxx短语的归一化处理_normalize_ov_command意味着既可以直接以ov dream这种完整短语触发也可以拆成子命令参数传入。三、ov dream手动同步的完整执行流3.1 触发与执行当用户消息恰好等于ov dream时触发。执行流程只有两步运行上面的同步命令然后向用户返回同步摘要sync summary。3.2 会话来源只信任 OpenClaw 会话索引同步命令读取 OpenClaw 的会话元数据路径固定为~/.openclaw/agents/main/sessions/sessions.json存在时。代码中的关键决策在get_active_sessions()# Only trust OpenClaws session index; raw jsonl fallback can accidentally sync cron/subagent transcripts. return _get_indexed_chat_sessions(sessions_root)这里有一个非常重要的工程决策绝不回退到扫描最新 raw jsonl 文件。原因在注释里写得很清楚——盲扫原始转录文件可能误把 cron/subagent 等非聊天转录一并同步。对应测试test_get_active_sessions_does_not_fallback_to_raw_jsonl专门断言即使存在更新的未索引 jsonl只要不在sessions.json索引中get_active_sessions()返回空列表。3.3 会话过滤规则聊天 vs 非聊天is_chat_session_key()是过滤的核心函数blocked (:cron:, :heartbeat, :subagent:, :acp:, :hook:) return bool(key) and not any(part in key for part in blocked)即会同步形如agent:main:main、:direct:、:channel:、:group:、:room:的聊天类会话键禁止同步包含:cron:、:heartbeat、:subagent:、:acp:、:hook:的非聊天会话。测试 test_dream_cli.py 中的test_is_chat_session_key_filters_non_chat_openclaw_sessions给出了完整的正反例矩阵例如agent:main:telegram:direct:123与agent:main:discord:channel:456会被保留而agent:main:cron:daily、agent:main:heartbeat、agent:main:subagent:child会被剔除。3.4 消息解析扁平化文本块同步的对象是会话转录中的message行。parse_messages()对每个会话文件默认{session_id}.jsonl逐行解析只接受type message的行只保留role为user或assistant的消息内容为空的消息直接跳过通过_message_text()把 OpenClaw 的消息体扁平化为纯文本——内容可能是 block 列表也可能是裸字符串简单消息场景。这里对裸字符串有专门兼容处理因为真实转录中简单消息存的是字符串若按列表迭代会逐个字符拆开并触发AttributeError导致整个 run 中断。3.5 独立游标增量同步的断点续传每个源会话在~/.openclaw/memory/ov_dream_sync.json中维护相互独立的同步游标last_synced_timestamp。sync_session()只会上传timestamp last_synced_timestamp的新增消息按时间戳排序后逐条add_session_message只要有新消息就触发commit_session(waitTrue)并推进游标。同步状态文件同时记录last_status、last_synced_count、last_sync_at、committed、session_key、session_file等元信息方便事后审计。测试test_sync_active_session_syncs_chat_sessions_with_independent_cursors验证了多会话并行游标main与direct两个聊天会话各有一条游标而cron会话既不被同步也不会出现在状态文件中。四、ov recall query手动召回的执行流4.1 硬路由规则当用户消息以ov recall开头时本技能有强制路由规则不要用通用推理回答不要复述召回会做什么不要询问是否要执行召回立即执行本地召回命令。4.2 执行流程提取ov recall之后的所有文本作为召回查询执行python3 scripts/dream.py recall query把命中的相关记忆行返回给用户若无命中返回No memories found.。4.3 规则细节ov recall ...是手动召回请求不是普通对话轮次ov recall之后的命令文本即精确查询串召回命令必须在技能目录下运行保证scripts/dream.py能正确解析不自动把召回结果注入 prompt 上下文与第一版 manual-only 定位一致不触发ov dream除非用户另行要求同步查询为空时向用户索要召回查询而不是自行猜测。_print_recall_results()的输出格式为uri|score|summary三列uri是记忆条目的viking://地址score是相关性得分summary取abstract或overview摘要字段非常适合在终端里直接阅读或二次解析。五、底层实现OpenVikingClient 与认证模型dream.py的所有网络调用都封装在OpenVikingClient中理解它也就理解了整个同步/召回链路的协议面。5.1 默认端点与目标 URIDEFAULT_BASE_URL http://127.0.0.1:1933 DEFAULT_TARGET_URI viking://user/default LEGACY_TARGET_URI viking://user/memories # 兼容旧配置的 uid-less 拼写 HOME_MEMORIES_TARGET_URI viking://~/memories # 调用者自身用户空间的 home 别名 SERVERLESS_BASE_URL https://api.vikingdb.cn-beijing.volces.com/openviking本地部署时默认指向本机127.0.0.1:1933Serverless 模式则指向火山引擎的托管端点。5.2 三种认证模式auth_mode支持auto/local/serverless三选一_resolve_auth_mode校验默认autoauto默认检测 base URL——只要包含api.vikingdb或以/openviking结尾自动切换为serverless否则视为locallocal使用X-OpenViking-Account/X-OpenViking-User请求头分别取环境变量OPENVIKING_ACCOUNT、OPENVIKING_USER默认均为defaultAPI Key 通过X-API-Key头传递serverless使用Authorization: Bearer OPENVIKING_API_KEY不发送X-API-Key、X-OpenViking-User等本地请求头测试test_serverless_headers_use_bearer_auth逐项断言。5.3 目标 URI 解析_resolve_target_uri()把三类写法统一解析为显式 uid 的viking://user/user_space形式viking://user/default含尾斜杠→viking://user/default旧拼写viking://user/memories与 home 别名viking://~/memories→viking://user/user_space/memories/。测试test_recall_expands_default_user_root_to_explicit_user_space完整覆盖了这组映射。5.4 三个核心 API 调用方法HTTP 调用说明add_session_messagePOST /api/v1/sessions/{session_id}/messages写入单条消息。Serverless 模式发送{role: ..., parts: [{type: text, text: ...}]}格式本地模式发送{role: ..., content: ...}commit_sessionPOST /api/v1/sessions/{session_id}/commit提交会话。Serverless 模式附带{telemetry: false}且不带?waittrue本地模式默认?waittruerecallPOST /api/v1/search/find语义检索请求体含query、limit默认 5、target_uri测试test_serverless_sync_reuses_source_session_id_and_uses_parts_payload验证了同步时直接复用 OpenClaw 的session_id作为 OpenViking 会话 ID并断言了 Serverless 模式的 parts 载荷与telemetry: false提交体。5.5 服务端对应实现这些调用并非凭空捏造在 OpenViking 服务端有对应路由search.py 中的POST /api/v1/search/find被注释为 Semantic search without session context接收FindRequest含query、limit、node_limit、target_uri、score_threshold、filter、tags等字段经 URI 校验、过滤器合并后调用检索服务并返回记忆结果sessions.py 中的POST /{session_id}/commit执行归档Phase 1 后台记忆抽取Phase 2两阶段提交并返回task_id供轮询进度。六、OV Lite 安装与 Serverless 配置OV_LITE_INSTALL.md 提供了不安装 OpenVikingcontextEngine插件、不占用插件槽位的 OV Lite 安装路径。6.1 环境变量前置条件执行同步或召回前必须配置OPENVIKING_API_KEYOpenViking serverless API Key。注意不要在日志、shell 历史或回复中打印 API Key。6.2 安装或更新将技能文件从当前仓库的 examples/skills/ov_dream 目录安装到 OpenClaw 的 skills 目录mkdir -p ~/.openclaw/skills/ov_dream/scripts # 复制 SKILL.md 与 scripts/dream.py 到上述目录 # 并补齐两个 __init__.py 使 Python 包可导入 touch ~/.openclaw/skills/ov_dream/__init__.py touch ~/.openclaw/skills/ov_dream/scripts/__init__.py下载/复制过程中任一文件失败应停下并核对来源。6.3 校验文件完整性用以下关键特征验证拿到的dream.py是对应版本grep -q SERVERLESS_BASE_URL ~/.openclaw/skills/ov_dream/scripts/dream.py grep -q OPENVIKING_AUTH_MODE ~/.openclaw/skills/ov_dream/scripts/dream.py grep -q viking://user/default ~/.openclaw/skills/ov_dream/scripts/dream.py grep -q is_chat_session_key ~/.openclaw/skills/ov_dream/scripts/dream.py grep -q raw jsonl fallback can accidentally sync cron/subagent transcripts ~/.openclaw/skills/ov_dream/scripts/dream.py grep -q client.add_session_message(session.session_id ~/.openclaw/skills/ov_dream/scripts/dream.py任一检查失败说明dream.py不是预期的 OV Lite 版本。6.4 配置 Serverless 认证创建~/.openclaw/ov_dream.env若已存在则保留真实OPENVIKING_API_KEY只补充缺失的非敏感默认值cat ~/.openclaw/ov_dream.env EOF OPENVIKING_BASE_URLhttps://api.vikingdb.cn-beijing.volces.com/openviking OPENVIKING_API_KEYreplace with OpenViking serverless API key OPENVIKING_AUTH_MODEserverless EOF chmod 600 ~/.openclaw/ov_dream.env6.5 验证同步与召回cd ~/.openclaw/skills/ov_dream set -a . ~/.openclaw/ov_dream.env set a python3 scripts/dream.py dream python3 scripts/dream.py recall 最近我在聊什么其中OPENVIKING_AUTH_MODEserverless会让 CLI 自动使用 Bearer 认证与 serverless 会话消息格式对应 5.2、5.4 节描述的_resolve_auth_mode与add_session_message分支。6.6 用 cron 定时同步要周期性沉淀记忆可添加 OpenClaw cronjob 每 5 分钟同步一次若ov-dream-sync已存在则更新而非重复创建openclaw cron add ov-dream-sync \ --schedule */5 * * * * \ --command cd ~/.openclaw/skills/ov_dream set -a . ~/.openclaw/ov_dream.env set a python3 scripts/dream.py dream七、CLI 参数速查dream.py是标准argparseCLI见_build_parser可用参数如下参数默认值说明--base-url环境变量OPENVIKING_BASE_URL否则http://127.0.0.1:1933OpenViking 服务地址--api-key环境变量OPENVIKING_API_KEYAPI Key可省略--auth-mode环境变量OPENVIKING_AUTH_MODE否则autoauto/local/serverless--openclaw-root~/.openclawOpenClaw 数据根目录--state-root~/.openclaw/memory同步游标状态文件目录recall query—召回查询子命令recall --limit N5召回条数上限八、行为边界与注意事项综合 SKILL.md 的 Notes 与 OV_LITE_INSTALL.md 的行为说明使用时请牢记以下边界纯手动第一版不自动注入召回结果到 prompt也不自动触发同步不取代插件它不替代 OpenViking context-engine 插件两者是互补关系磁盘快照语义基于磁盘的同步针对最近记录的聊天转录不是精确的正在运行的会话检测器——例如新消息刚写入但尚未出现在索引中的窗口期可能不会被捕获会话来源单一只读取sessions.json索引不回退扫描 raw jsonl非聊天会话隔离包含:cron:、:heartbeat:、:subagent:、:acp:、:hook:的会话键一律不同步Serverless 约定同步时直接复用 OpenClaw 的session_id写入 OpenViking serverless并关闭遥测提交telemetry: false。九、测试保障技能随仓库携带了完整测试 test_dream_cli.py覆盖了本文讲述的大部分关键行为ov recall短语归一化、默认用户根 URI 展开、recall 请求体构造、serverless Bearer 认证头、serverless 同步载荷与会话 ID 复用、索引优先且不回退 jsonl、非聊天键过滤、多会话独立游标同步等。这意味着你可以在仓库内直接运行测试验证这套 CLI 的语义也便于在修改后做回归保障。一句话总结ov_dream是 OpenViking 提供给 OpenClaw 用户的记忆运维控制台——ov dream让对话记忆按需落库ov recall让记忆按语义随时可查两者叠加 cron 调度即可在不引入插件的前提下为 Agent 构建一条可持续生长的记忆管道。【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 1:11:04

基于主从博弈的电热综合能源系统动态定价与能量管理Matlab实现

直接说结论:这套“基于主从博弈的电热综合能源系统动态定价与能量管理”项目,我做过完整复现和改造,今天把建模思路、求解细节、Matlab代码结构、还有调试中踩过的坑一次性整理出来。核心就一句话:运营商定电价和热价,…

2026/9/10 2:06:11

618复盘别再手工对表了!2026年5款大促数据工具排行榜测评

618大促落幕之后,真正拉开差距的往往不是当天的销售额,而是复盘的质量。一场大促沉淀下来的订单、流量、投放、库存、售后数据,构成了下一场大促的决策底牌。市面上可用于大促复盘的数据工具,按产品形态大致可分为四类&#xff1a…

2026/9/10 2:06:11

FPGA实现AES-128加密算法:Verilog硬件设计与工程实践详解

简介:面向FPGA与硬件安全开发者的AES-128完整Verilog实现,基于Rijndael算法,覆盖密钥扩展、字节替换、行移位、列混淆等核心模块,并附带VHDL对照代码,适合用于学习对称加密算法的硬件加速、安全模块设计与芯片验证流程…

2026/9/10 2:01:11

CANN/ge图编译缓存功能

图编译缓存 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码