Bundle
dsh-plugin-adaptive-agent-policy
Adaptive task and risk routing, loop budgets, and progressive tool-result pruning for DeepSeek Harness
- Source
- YuXuanLiang-dev
- License
- MIT
- Updated
- Updated 3 days ago
Readme
# DSH Adaptive Agent Policy
中文 | [English](README.en.md)
一个可独立发布的非官方 DeepSeek Harness 插件:根据任务类别动态控制提示词、输出上限、软硬步骤预算与
工具结果裁剪,在保持用户所选模型和工具展示方式稳定的前提下,减少大型任务中的无效循环。
> 状态:`0.1.0-rc.3` 发布候选。DeepSeek Harness 仍处于开发者预览阶段,插件以公开的
> `0.1.0-rc.6` 包 API 构建;升级 DSH 时应先重新运行测试。
## 出处与声明
| 项目 | 精确版本 | 用途 | 许可证 |
|---|---|---|---|
| DeepSeek Harness | [`47f943859b`](https://github.com/deepseek-ai/deepseek-harness/tree/47f943859bef60e4160492346772ded9b24f765a) | 基础架构、Agent Loop、事件日志与插件接口 | MIT |
| OpenCode | [`e23586af26`](https://github.com/anomalyco/opencode/tree/e23586af2623f1bc2e8e6965d2d7acf7bd03d5c3) | 模型提示词、最后一步、工具输出限界与压缩策略参考 | MIT |
| 本插件 | 本仓库 | 按 DSH 事件与插件约定重新实现的自适应策略 | MIT |
OpenCode 是设计参考,不是运行时依赖。具体参考文件包括
[`session/system.ts`](https://github.com/anomalyco/opencode/blob/e23586af2623f1bc2e8e6965d2d7acf7bd03d5c3/packages/opencode/src/session/system.ts)、
[`session/prompt.ts`](https://github.com/anomalyco/opencode/blob/e23586af2623f1bc2e8e6965d2d7acf7bd03d5c3/packages/opencode/src/session/prompt.ts)、
[`tool/truncate.ts`](https://github.com/anomalyco/opencode/blob/e23586af2623f1bc2e8e6965d2d7acf7bd03d5c3/packages/opencode/src/tool/truncate.ts)
与
[`session/compaction.ts`](https://github.com/anomalyco/opencode/blob/e23586af2623f1bc2e8e6965d2d7acf7bd03d5c3/packages/opencode/src/session/compaction.ts)。
完整来源声明见 [NOTICE.md](NOTICE.md)。本项目不代表 DeepSeek 或 OpenCode 官方立场,也不宣称获得上游背书。
## 增加的能力
- 无模型调用的多语言任务路由:`read`、`small`、`frontend`、`large`、`batch`;
- 第二层风险路由:只在软检查点从九类风险中选择一个高置信度、尚未覆盖的检查;
- 每个任务类别独立的最大输出 token、软检查步骤与纯文本硬终步;
- 策略状态使用非持久化 system section;同阶段内容稳定,且不再把逐轮通知追加到会话历史;
- 根据步骤数或上下文压力选择 `moderate`、`tight`、`critical` 裁剪等级;
- 保护近期工具结果、设置最小总节省量、保留可安全回放的事件;
- 对外仅一个插件配置项,包内增强裁剪器使用独立服务名,不与 DSH 上游静态裁剪器冲突。
插件不会更改用户选择的提供方、模型、推理强度、权限、沙箱或 Native/Code 工具展示方式。
## 设计思路
```mermaid
flowchart LR
U["Human request"] --> R["Deterministic task router"]
R --> P["Task profile"]
P --> L["Non-persistent phase section and output cap"]
L --> S{"Step or context pressure"}
S -->|Normal| L
S -->|Prune| C["Replay-safe result pruning"]
C --> L
S -->|Soft| V["Bounded risk router"]
V --> Q{"One uncovered high-confidence risk?"}
Q -->|Yes| T["One targeted existing check"]
Q -->|No| F
T --> L
S -->|Hard| F["Text-only final step"]
```
核心原则:
1. **按任务比例施加控制。** 只读分析不应承担跨模块重构的循环成本。
2. **尽量保持缓存前缀稳定。** 不热切换模型或工具 schema;插件的 system section 在同阶段完全一致,仅在软检查点、
硬终步或新任务切换时变化。
3. **高置信度才增加检查。** 风险路由器每轮最多选择一个尚未覆盖的风险;证据不足时不制造验证工作。
4. **只在有收益时裁剪。** 未达到大小和总节省阈值时完全不改写历史。
5. **状态不写入会话。** 当前策略在每次请求组装时提供一个紧凑 system section,不产生 user/context 历史消息,
因此策略文本的输入占用是常量而不是随步骤累积。
6. **一切仍是插件。** 路由策略与裁剪服务边界独立,可通过普通 Cordis 生命周期替换。
## 安装
```sh
dsh plugin --profile web add dsh-plugin-adaptive-agent-policy@next
```
安装命令会把包加入 `web` Profile 的依赖和 `dsh.profile.bundles`,无需修改
`settings.yaml` 或手动编辑 `cordis.patch.yml`。检查组合结果后启动:
```sh
dsh --profile web --dump-config
dsh web
```
从源码开发或使用自定义 Cordis 根配置时,也可以直接加入:
```yaml
- id: adaptive-agent-policy
name: dsh-plugin-adaptive-agent-policy
config: {}
```
插件会自动安装包内的增强裁剪服务。无需另外安装或配置 DSH 上游的
`@deepseek-ai/dsh-compaction-tool-result-pruner`。
第二层路由器默认无需配置。若需要调整保守程度,在 Profile 的 `cordis.patch.yml` 中覆盖本插件行;
这属于组合配置,不写入 `settings.yaml`:
```yaml
- id: adaptive-agent-policy
config:
riskRouter:
enabled: true
minimumScore: 4
maxRequestChars: 4096
maxEvidenceChars: 8192
skipCovered: true
```
## 默认参数
### 任务配置
| 类别 | 最大输出 token | 软检查步骤 | 纯文本硬终步 |
|---|---:|---:|---:|
| `read` | 16,384 | 4 | 8 |
| `small` | 32,768 | 5 | 9 |
| `frontend` | 32,768 | 8 | 14 |
| `large` | 65,536 | 10 | 18 |
| `batch` | 65,536 | 10 | 20 |
最大输出仅在 Agent 没有明确 `maxTokens` 时生效;更严格的调用方或提供方上限始终优先。
### 渐进式裁剪
| 等级 | 步骤 | 压力 | 结果阈值 | 保留头/尾 | 保护近期步骤 | 最小节省量 |
|---|---:|---:|---:|---:|---:|---:|
| `moderate` | 6 | 45% | 16,384 chars | 12,288 / 2,048 | 2 | 8,192 chars |
| `tight` | 10 | 65% | 8,192 chars | 4,096 / 1,024 | 1 | 4,096 chars |
| `critical` | 14 | 75% | 4,096 chars | 2,048 / 1,024 | 1 | 2,048 chars |
步骤或压力条件任一满足即可进入该等级。没有模型上下文窗口元数据时,压力路由关闭,步骤路由继续。
### 风险路由器
候选风险为 `boundary`、`retry`、`concurrency`、`persistence`、`security`、`compatibility`、
`frontend`、`resource` 与 `batch-integrity`。路由器只在每轮第一次到达软检查点时运行一次,最多读取
4,096 个请求字符和 8,192 个近期工具结果字符,不发起 LLM 请求。只读任务、纯文档改动、低置信度匹配和
近期输出已经明确通过的风险都会跳过;命中时也只要求一个现有检查或最小复现。
## 基准测试
以下 2026-08-15 的受控对比对应 `rc.2` 策略,使用相同 `deepseek-v4-pro` High 路由、凭据来源、提示词、种子工作区、可见测试与
隔离会话目录。隐藏检查不在模型工作区内。每行仅运行一次,不是统计平均值。
| 任务 | 版本 | 步骤 | 总 token | 用时 | 缓存命中 | 质量结果 |
|---|---|---:|---:|---:|---:|---|
| 小型重试修复 | 原版 | 6 | 59,891 | 44.2s | 84.1% | 5/5;隐藏边界通过 |
| 小型重试修复 | 最终自适应版 | 6 | 66,830 | 49.5s | 85.2% | 5/5;隐藏边界通过 |
| 前端仪表盘 | 原版 | 9 | 174,022 | 180.4s | 93.2% | 5/5;390 px 溢出 |
| 前端仪表盘 | 最终自适应版 | 7 | 162,141 | 194.0s | 92.7% | 5/5;390 px 无溢出,主题持久化 |
| 跨模块队列 | 原版 | 8 | 207,525 | 355.5s | 93.4% | 7/7;隐藏转换 2/2 |
| 跨模块队列 | 最终自适应版 | 6 | 158,420 | 255.0s | 91.4% | 7/7;隐藏转换 2/2 |
| 汇总 | 原版 | 最终自适应版 | 差异 |
|---|---:|---:|---:|
| 总 token | 441,438 | 387,391 | -12.2% |
| 总耗时 | 580.2s | 498.6s | -14.1% |
大型任务 token 减少 23.7%、用时减少 28.3%,质量持平;小型任务为保留交互边界多用了 11.6% token;
前端少用 6.8% token,但为修复移动端溢出多耗时 7.5%。正常基准中裁剪替换次数为零,因为没有符合条件的
陈旧大型工具结果;裁剪的三个等级由单元与集成测试单独覆盖。
早期宽泛提示词版本曾把前端任务诱导到自建 CDP 验证器,膨胀到 30 步、1.316M token、675.7 秒。`rc.2`
因此使用确定性分类、一次类别专属检查、有界前端验证和纯文本终步,而不继续堆叠通用提示词。
一份第三方单次测试报告了另一项重要反例:原版输入约 72 万 token,PTC 模式约 117 万,标准模式约
105 万;虽然输出从约 45 万降至 25 万/14 万,标准模式总量约与原版持平,PTC 总量反而约高 22%。
该报告未附可复跑的原始日志,因此仅作为外部观察,不与上表合并。它揭示了 `rc.2` 将策略通知写入会话历史的
输入累积问题,并直接促成 `rc.3` 改用非持久化阶段 section。`rc.3` 的真实模型 token 收益仍需用相同任务重新实测。
该载体的缓存取舍是可预测的:同一阶段内插件 section 字节完全稳定;进入软检查点或硬终步时会改变一次
system header,可能让该次请求失去旧前缀缓存。插件接受每轮最多两次阶段切换的有限成本,以避免每步都向历史
追加策略消息造成的持续输入增长。
这些都是非确定性模型的单次样本,只能支持优化方向,不能证明普遍或统计显著的性能优势。
## 开发与独立发布
```sh
pnpm install
pnpm run check
npm login
npm publish --tag next
```
## 已知边界
- 文本路由可能保守地误判含糊任务;它有意不增加路由模型调用。
- 风险路由器是启发式证据选择器,不是完整静态分析或安全审计;低置信度时刻意不触发。
- `rc.2` 及更早版本写入的旧策略通知仍存在于原会话历史;`rc.3` 不再产生新的策略历史消息。
- 阶段切换会改变 system header,可能造成该次请求的缓存前缀失配;同阶段内 header 保持稳定。
- 字符裁剪不等于精确 token 裁剪,也不会理解被裁剪内容的语义重要性。
- 纯文本硬终步能限制失控循环,也可能截断确实需要更多工具步骤的任务,应依据重复测试调参。
- DSH 仍在快速迭代;该插件目前把 `0.1.0-rc.6` 作为兼容边界。
## 许可证
[MIT](LICENSE)。再分发时请同时保留 [NOTICE.md](NOTICE.md) 中的出处声明。
Install
dsh plugin --profile web add github:YuXuanLiang-dev/dsh-plugin-adaptive-agent-policy#387fc3606beddbd7aaaed5a2021537d1131d2d18
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-plugin-adaptive-agent-policy from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.