ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

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),仅供参考
返回列表