[RFC] Harness 如何使用 OpenViking 远程SKILLS,Vikingbot 实践 #3656
Closed
yeshion23333
started this conversation in
RFC
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
RFC:VikingBot 使用 OpenViking 远程 Skill
1. 方案结论
load_skillopenviking_multi_readexec命中包内文件,或工具声明了本地文件/目录参数时default_materialize和materialize_mode,始终自动判定2. Bot Harness 链路
2.1 模块连接
AgentLoopSkillRuntimeContext,贯穿该消息的全部模型与工具迭代ContextBuilderopenviking_multi_read选择并读取SKILL.mdVikingMultiReadTool(uri, content)交给运行时激活ToolRegistrySkillRuntimeContextskill_uri这里的“请求”指一次用户消息对应的
Agent Turn,不是整个 Session,也不是只在 Session 第一条消息时创建。SkillRuntimeContext不加入全局SkillsLoader,不跨 Agent Turn、用户或子智能体共享。2.2 一次请求的执行顺序
运行时只在以下条件同时满足时创建:
因此 OpenViking Tool 是唯一能力开关,不再增加一套 Remote Skill 开关。
2.3 生命周期及与 Session 的关系
need_reply等前置分支后,在 Skill 发现前创建finally调用close()finally调用close()Runtime 与 Session 不同步结束:
skill_uri(s)、解析后的工具参数.vikingbot/remote-skills/<request-id>close()时删除,不等待 Session 结束/new、Session 提交、清空或删除是独立流程。它们不触发 Runtime 关闭;Runtime 已在每条消息处理结束时关闭。下一条消息即使复用同一个 Session,也必须重新发现并激活所需的远程 Skill;激活确认 revision 未变后,可以复用主机侧文件缓存。3. 发现与激活
3.1 发现
远程摘要示例:
3.2 激活
模型仍调用现有工具:
{ "name": "openviking_multi_read", "arguments": { "uris": ["viking://user/u1/skills/release-audit/SKILL.md"] } }激活后生成请求内的
ActiveRemoteSkill:root_uri/skill_md_uriname/descriptionallowed_toolsmetadata.vikingbot.requiresfiles相对路径 → canonical URI;路径、URI、大小和哈希必须互相一致且不可重复content_sha256/revisionsize/sha256激活只建立运行状态,不下载资源文件。
3.3 同批激活
模型可能在同一响应中同时发出“读
SKILL.md”和“执行脚本”。这批调用不能直接并行:后一个调用是基于激活前 Tool Schema 生成的。如果任一激活失败,同批普通工具全部返回
SKILL_ACTIVATION_FAILED。结果仍按原 Tool Call 顺序返回模型。4. 工具调用前处理
原工具只看到自己原本支持的参数;运行时不会向 Tool Schema 添加
_remote_skill_uri等模型可控字段。4.1 多 Skill 权限
Bash(python *)python ...可以通过Bash(python *),另一个允许Bash(git:*)这样模型无法通过选择某个
skill_uri获得更宽权限。4.2 Bash 约束
Bash(git:*)、Bash(python *)等声明只允许一条简单命令。受约束命令拒绝:同一个 Skill 内的多个 Bash 模式是“或”;多个已激活 Skill 之间仍是“且”。未声明参数约束的普通
Bash不额外限制命令参数,但仍受 Bot、Channel 和沙箱策略约束。4.3 运行依赖
5. 资源解析与自动物化
5.1 资源类型
references/*.md、配置说明、示例文本readpython scripts/foo.py5.2 路径来源必须明确
已激活远程 Skill 后,本地文件参数和
exec中的路径按以下规则处理:viking://...URISKILL_RESOURCE_AMBIGUOUSworkspace:output/report.mdSKILL_RESOURCE_NOT_FOUND普通工作区文件推荐使用:
调用方已经持有当前沙箱后端的原生绝对路径时也可直接传入;RFC 不约定统一的
/workspace绝对路径。禁止
..、编码后的目录逃逸、跨 Skill 根引用,以及未激活 Skill 的辅助资源。5.3 普通文件型工具
工具显式声明哪些参数消费本地文件或目录:
运行时只处理这些声明;嵌套参数使用 JSON Pointer 和
*。输出路径不声明为输入资源,因此不会被错误物化。5.4
exec示例Shell 执行失败后不自动补下载或重试,避免重复副作用。
5.5 物化目录与粒度
第一次需要本地文件时物化整个包,以保留相对导入、
source、同目录配置和模板:<request-id>目录。5.6 版本化快照缓存
缓存目标是消除短时间内同一 Skill revision 的重复文件下载,同时不跳过当前请求的 ACL、激活和版本校验。
缓存分成两层:
<bot-data>/remote_skill_cache/<sandbox>/.vikingbot/remote-skills/<request-id>/close()删除主缓存位于 Bot 数据目录,不在模型可见的沙箱 Workspace 内。工具获得的是独立请求副本,因此脚本写文件不会污染后续请求的缓存快照;远程沙箱命中缓存时仍需把本地主缓存写入该沙箱,但不会再次从 OpenViking 下载文件。
缓存键:
actor_peer_id或 OpenViking 身份复用,避免 ACL 数据泄漏。revision变化会生成新条目;旧版本不再命中,等待 TTL/LRU 清理。download_bytes文件传输,但仍执行 Skill 发现、SKILL.md读取和 integrity manifest 查询。6. 一致性、限额与并发
6.1 一致快照
树锁保证一次
get_skill响应内部的正文、清单和 revision 来自同一存储快照;物化前后复查用于覆盖激活、缓存读取或网络下载期间发生的更新。6.2 双层限额
实际允许值取两层中更严格的一层:
SKILL.md;目录不计入 Bot 的可下载文件数。主机缓存另有独立总量护栏:
一个快照的文件数和大小仍先受
max_files、max_file_bytes、max_total_bytes限制。缓存容量不足只会导致条目更早淘汰,不会放宽单包限制。6.3
RemoteSkillsConfig的作用该配置不是功能开关,也不决定“远程还是下载”;它只提供部署侧可调的检索和资源护栏:
discovery_limitscore_thresholddiscovery_timeout_secondsmax_filesmax_file_bytesmax_total_bytescache_idle_ttl_secondscache_max_entriescache_max_bytes不提供
enabled、default_materialize或materialize_mode,避免和 OpenViking Tool 能力开关及自动资源判定产生两套语义。6.4 请求内锁与缓存租约
root_uriroot_urirequires只检查一次root_uripermission-scope + root_uri + revisionSandboxManager内并发首次命中时只从 OpenViking 下载一次前三个请求内状态随
SkillRuntimeContext关闭;缓存下载锁和清理锁属于SandboxManager持有的主机缓存实例。缓存复制期间持有租约,TTL/LRU 不删除正在复制的条目;执行使用独立请求副本,不长期占用缓存租约。7. 子智能体
主智能体不会把远程 Skill 快照或
skill_uris传给spawn。未来如果显式给子智能体开放 OpenViking Tool,应为每个子任务创建独立运行时,并完整复用本文的发现、权限、物化和清理规则。8. 身份、隐私与记录
8.1 身份
openviking_connection。0700、文件使用0600,只对 Bot 运行账户开放;文件内容不进入模型、Session、事件或 Trace。8.2 三种结果视图
TOOL_RESULT事件skill_uri(s)模型视图只存在于当前请求的模型消息中。辅助资源远程读取、激活读取和混合读取只要关联到已激活 Skill,持久化视图就省略完整结果。
8.3 使用记录
运行日志和请求内使用记录包含激活、远程资源读取、物化完成、
cache=hit|miss|bypassed和任务工具调用;不记录隐私正文、API Key 或环境变量值。9. 失败处理
SKILL.md非法、名称与 URI 不一致All reactions