跳转至

工具流水线与系统提示词

工具的注册、JSON Schema 动态生成、三阶段执行流水线与系统提示词动态拼装。

在 DSH 中,大模型所能调用的工具不是零散暴露的裸函数,而是通过 作用域化的 ToolRegistry严格的执行流水线(Execution Pipeline) 纳管的。


核心文件速查

路径 职责 重要度
packages/core/tools/src/index.ts 工具注册表与 tools/* 执行流水线 ⭐⭐⭐
packages/core/system-prompt/src/index.ts 动态系统提示词拼装器 ⭐⭐⭐
packages/fs/tool-fs/src/index.ts read, write, edit 核心文件工具 ⭐⭐⭐
packages/shell/tool-bash/src/index.ts bash 执行与后台作业工具 ⭐⭐⭐

动态系统提示词拼装(System Prompt Assembler)

DSH 拒绝使用单一硬编码的 System Prompt 文件。 ctx.systemPrompt 维护了一个有序的提示词片段注册表。每个插件均可向系统提示词注册专属片段(Section):

┌────────────────────────────────────────────────────────────┐
│                  Dynamic System Prompt Tree                │
│                                                            │
│  [Order 000] Persona & Identity (核心人设与行动原则)        │
│  [Order 100] Workspace Context (当前工作目录、文件树状态)    │
│  [Order 200] Sandboxing & Permissions (当前沙箱权限等级)    │
│  [Order 300] Tool Instructions (各激活工具的使用指南)        │
│  [Order 400] Dynamic Skills (当前匹配并注入的 Skill 指令)   │
│  [Order 500] User Instructions (用户自定义 CLAUDE.md/AGENTS) │
└────────────────────────────────────────────────────────────┘

每个 Step 开始前,ctx.systemPrompt.assemble(ctx) 会按优先级排序并自动拼接所有活跃片段,确保提示词随当前加载的插件动态自适应。


工具的三阶段执行流水线

当大模型发起 tool/call 时,DSH 不会立刻执行工具,而是将其送入三阶段拦截流水线:

               Model Tool Call Event
                        │
                        ▼
      ┌───────────────────────────────────┐
      │   1. tools/pre-execute            │
      │   - 参数 JSON Schema 校验          │
      │   - 沙箱权限检查 (Sandbox Policy)   │
      │   - 用户交互审批 (User Approval)    │
      └─────────────────┬─────────────────┘
                        │ (Approved)
                        ▼
      ┌───────────────────────────────────┐
      │   2. tools/execute                │
      │   - 执行具体的底层实现              │
      │   - 超时保护与中断信号 (AbortSignal)│
      └─────────────────┬─────────────────┘
                        │
                        ▼
      ┌───────────────────────────────────┐
      │   3. tools/post-execute           │
      │   - 结果脱敏与安全过滤             │
      │   - Spill 大输出外溢检查           │
      │   - 记录 tool/result 会话事件      │
      └─────────────────┬─────────────────┘
                        │
                        ▼
               Return to Agent Loop

1. Pre-Execute 阶段(鉴权与审批)

在执行前,流水线会检查该工具是否属于危险操作(如写文件、执行 bash)。如果当前审批策略为 ask,系统会在此暂停,弹出交互卡片向用户请求授权。

2. Execute 阶段(受控执行)

工具执行受沙箱(Sandbox)和超时策略(Guard)保护。如果命令超时或收到取消信号,底层子进程会被立即 SIGKILL 杀死。

3. Post-Execute 阶段(外溢截流)

如果工具输出了超长内容(例如 500KB 的日志),spill 插件会在此介入,自动将内容写入本地文件,并替换为带标记的摘要引用。


本章思考与自测

  1. 思考题:如果大模型调用了一个不存在的工具名称,DSH 会直接抛出异常崩溃,还是作为错误结果返回给模型?为什么?
  2. 自测题:在 tools/pre-execute 阶段,如果用户点击了"拒绝(Deny)",会话日志中会记录什么事件?大模型在下一个 Step 会接收到什么反馈?