首页 / DeepSeek Harness 入门教程 / 作用域与能力缝

DeepSeek Harness 入门教程

作用域与能力缝

本教程共 32 篇 · 第 11 篇 · 更新于 2026-08-15 · 约 6 分钟阅读

scopeCapability Seams核心服务ctx架构

本节目标:掌握 scope(作用域)与 Capability Seams(能力缝)两个官方架构概念,认识 ctx.* 核心服务清单。

dsh 一个进程里可以同时跑多个 Agent、多个会话。它们的工具为什么不会互相串?换一个文件系统提供方,为什么所有文件工具跟着换?答案分别是作用域能力缝。这是官方架构的两根支柱,读懂了它们,--dump-config 打出的树就不再是一堆陌生名字。

作用域:注册归属哪个 Agent

scope(作用域)core/scope 包提供的库原语——注意,它是库,不是 Cordis 服务,没有 ctx 键。它的核心是一个不透明标识 ScopeKey(按对象身份比较),已交付的 agent loop 直接用活跃的 Agent 对象作为 key。

规则只有一条:一项注册(工具、提示词段、监听器)要么是全局的,要么归属于恰好一个 scope key。ScopedLayers 为每个注册表维护一个全局层和若干惰性创建的作用域层;读取时按插入顺序合并全局条目,再由最近的带作用域条目遮蔽远端同名项。

可以想成酒店房间:你在房里做的事,隔壁房看不见;全局注册则是大堂公告栏,谁都能看到。

Agent 的视图解析链是:

agent → preset → global(近者遮蔽远者)

这就是多 Agent 不串扰的机制:同一个工具名,Agent A 的注册在 A 的作用域层,Agent B 在 B 的层,互不覆盖。挂到不带 agent scope 的上下文,注册就变成全局。preset 服务拒绝「无 scope 挂载」,正是为了防这个。

排查「我的工具怎么被别的 Agent 看到了」,先查注册时带没带 scope。

能力缝:可替换能力的三角色

seam(缝) 是一项可替换能力,由三种角色构成:

角色负责什么以 Bash 为例
Service Definition声明接口与类型dsh-shell(注册为 ctx.shell
Service Provider实现该能力dsh-bash-local(本地执行)
Consumer面向模型的工具dsh-tool-bash(bash 工具)

三者都依赖 Definition,Provider 与 Consumer 互不依赖。单一角色不是 seam;完整能力才是。 判断标准只有一个:这些角色是否需要独立演进或替换。

人话版:一个 seam 就是「接口 + 实现 + 面向模型的工具」三件套。想换实现,只动 Provider 那一层配置。

seam 正是「换一个提供方就改变整个产品」的原因。文件系统与进程提供方共享同一个执行世界。把 ctx.fs 指向远程沙箱,Bash、PTY、LSP 也跟着搬过去。你不需要为每个工具写提供方专用分支。Consumer 只认接口,不关心背后是本地还是云端。

# 换提供方:替换下面一行即可,Definition 和 Consumer 都不用动
- name: '@deepseek-ai/dsh-bash-local'
# - name: '@deepseek-ai/dsh-bash-sandbox'
Warning

第三方文章流传的「八层可替换架构(Inference / Tools / State / Control / Execution / Composition / Experience / Framework)」是外部抽象解读,非官方术语。官方分类是 Capability Seams + Core Services,服务以 ctx.* 键暴露。写作与讨论请用官方说法。

核心服务:ctx.* 清单

服务可以是核心主干、可替换的能力缝,也可以是组合点。下面是入门阶段最常用的 ctx 键:

ctx 键拥有包职责
ctx.sessionscore/session仅追加会话事件日志与内存存储
ctx.systemPromptcore/system-prompt提示词片段与工具 schema 组装
ctx.toolscore/tools作用域化工具注册表 + 把关执行流水线
ctx.agentscore/agentAgent 接口、活跃 Agent 注册表、agent/* 事件
ctx.agentLoopcore/agent-loop默认 Agent 驱动器
ctx.llmllm/llm消息/流式词汇 + 适配器缝
ctx.attachmentsattachment附件持久存储
ctx.sandboxsandbox进程沙箱缝
ctx.approvalapproval审批缝
ctx.credentialscredentials凭据缝
ctx.settingssettings用户设置缝
ctx.sessionTelemetrysession-telemetry会话遥测缝
ctx.tokenMetertoken-meterToken 计量
ctx.invariantsinvariants运行时不变量注册表
ctx.typerttypert-registry运行时类型注册表
ctx.typertGatewayapi-gatewayTypert Host 调用网关
ctx.apiProxyapiproxyHost API 分发
ctx.sessionPersistencesession-persistence会话持久化缝

scope 包本身没有 ctx 键。更多的缝——ctx.fsctx.shellctx.subprocessctx.terminalsctx.subagentsctx.compactionctx.storagectx.sessionQueryctx.sessionTitlectx.agentPresetsctx.commandsctx.goalsctx.jobsctx.skillsctx.webctx.permissionPresets——见官方 capability-seams 参考文档的能力图,或直接看 --dump-config 输出的实际注册。

怎么查某个能力能不能换

三个问题追一项能力:

  1. 契约由谁定义——找 Service Definition 包
  2. 当前装了哪个 Provider——看 --dump-config 配置树
  3. Consumer 在哪个作用域激活——看工具注册与 preset 组合

审计到这三件事,一项能力的可替换性就清楚了。

Tip

官方 capability-seams 文档用一张大图展示每个服务声明的包、已知实现包与直接消费方,是「谁能换谁」的权威地图。子系统页面(subsystems/)则给出每项服务的生成参考。

Warning

版本基线 @deepseek-ai/dsh 0.1.0-rc.6 处于 Developer Preview,ctx 键与 seam 包会随版本变化,以官方文档与实测为准。

小结

  • scope 是库原语:注册要么全局,要么归属于恰好一个作用域。
  • Agent 视图解析链:agent → preset → global,近者遮蔽远者。
  • seam 是三角色结构:Service Definition + Provider + Consumer。
  • 换 Provider 不改 Consumer,产品行为全局切换。
  • 「八层架构」是外部抽象;官方说法是 Capability Seams + Core Services。