dsh-gpt-agent-preset
为 OpenAI GPT-6 系列调优的 DeepSeek Harness Agent 预设:把'防止空转'做成识别无进展而非限制调用次数 / An execution-first DeepSeek Harness Agent preset for the OpenAI GPT-6 family
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 4, 2026
- Updated
- Oct 4, 2026
Introduction
dsh-gpt-agent-preset
为 OpenAI GPT-6 系列(gpt-6-astra / gpt-6-sol / gpt-6-luna / gpt-6.1-sol)在
DeepSeek Harness 下调优的 Agent 预设。
An Agent preset for DeepSeek Harness, tuned for the OpenAI GPT-6 family.
实验性。 阈值是实测得出的起始点,不是定论。如果你发现它误伤了正常流程, 下面的配置与调参都是一行就能改的。
它做什么
Harness 自带的标准预设是为 DeepSeek 的推理模型写的。GPT-6 系列在三个地方和它配合不好:
重复空转。 实测:一个会话在 4.5 小时里调了 300 次 todo_write + 164 次 get_goal,
没有产出任何实现;另一个在 37 步里把两个文件分别重读了 36 次和 35 次,上下文涨到 355K token
直到 provider 中断流。
工具选择偏差。 同一批会话里 207 次调用有 171 次是 bash —— 连读文件都用 bash ——
而 read 只有 12 次。没有任何地方告诉模型哪个工具该干哪种活。
逐步骤的进度播报。 每个 step 前先说一句"我会…"。这条同时也是 OpenAI 的 GPT-6 文档写明的 已知行为:它"倾向于详细、结构化的回复",且在长工具链里会为每一步加一句前言。实测一个会话里 连续五步的开场白互相 68%–80% 相似,内容都是同一份计划的复述。
以及官方要求补的那一半: GPT-6"更可能在额外输入会改变结果时向用户提问, 这会导致用户期待它做合理假设并坚持时它却停下"。本预设据此明确授权它去执行。
安装
关键前提:0.2.x 不再扫描预设目录
把文件复制到 ~/.dsh/.agent-presets/ 不会有任何效果。 0.1.x 那样发现预设,
0.2.x 已取消:@deepseek-ai/dsh-agent-presets 这个包不存在了,新的 dsh-agent-preset-registry
明确"既不扫描目录也不接受预设路径"。预设现在是 profile 的 bundle patch。
git clone https://github.com/Starlight-bananice/dsh-gpt-agent-preset.git
cd dsh-gpt-agent-preset
python3 install-preset.py --dry-run # 先看会写入什么
python3 install-preset.py # 写入 desktop profile
装完在 设置 → Agent 预设 里选「GPT 执行优先」即可(其他 profile 用 --profile <name>)。
安装脚本幂等,重跑不会产生第二份。它会把 !!js 平台条件解析为本机取值、把插件文件的相对
路径改写为绝对路径(profile 补丁没有"预设目录"这个基准),并在写入前先重新解析全文 ——
补丁写坏会让整个应用无法启动,所以解析不过就拒绝写入。
它加了什么
三段提示词 + 一层强制。前两段是行为引导,第三层是可强制的。
persona(系统提示开头,稳定)
- 用户指令优先于任何 skill、
AGENTS.md或约定文件;冲突时按用户说的做并说明搁置了哪个 - 明确授权:动作型请求就是授权,做完它,不要停在计划或"要不要我继续"
运行契约(每个 agent 注入一次)
| 段 | 内容 |
|---|---|
| AUTHORIZATION | 动作型请求即授权;两点例外:用户选的模式限制(计划模式下只读探索),以及真正属于用户的决定(改变结果的设计选择、不可逆操作) |
| SILENCE | 不复述请求、不播报"我要去读/搜/跑/验证了"——工具调用本身就看得见。只在有真正新信息时说话:需要用户拍板的决定、阻塞、或答案本身 |
| TOOLS | 明确工具分工,shell 只留给进程、构建、测试、git;优先复用上下文里已有的结果 |
| DONE | 改文件的任务以"落盘并验证"为终点;审查、诊断、解释在结论成立时即完成,不要为了完成感去改文件 |
| STYLE | 先给结论;列表/表格只在内容确实并列或需要对比时使用 |
强制层(针对"无进展",不是"限制调用次数")
| 机制 | 阈值 | 为什么 |
|---|---|---|
get_goal | 每轮 1 次 | 纯重读已有状态,目标就在上下文里 |
create_goal | 每轮 1 次 | 一次会话本质上只有一个目标 |
完全相同的 todo_write | 拒绝重发 | 列表是模型的工作状态,工具说明要求"完成即标记";拦的是重发同一份,不是更新 |
同一 (路径, 偏移, 上限) 重读 | 每轮允许 2 次 | 实测循环里 91/129 次调用是重读。跨轮重置,且文件被写/编辑后立即释放 |
| 窗口内重复调用 | 同一签名在最近 12 次调用内出现 2 / 4 次 | 实测循环是 bash → read A → read B 交替,连续检测永远不触发 |
update_goal 不在限额内 —— 同一轮 resume → complete 是正常生命周期。
配置与调参
全部阈值在 agent.cordis.yml 的 gpt-guardrails.config 里:
- id: gpt-guardrails
name: ./gpt-guardrails.mjs
config:
budgets:
get_goal: 1
create_goal: 1
# 加 todo_write: N 可改成"每轮 N 次"的硬限额
repeatThresholds: [2, 4] # 窗口内出现次数;嫌吵可改 [3, 5]
repeatWindow: 12 # 回看最近多少次调用
readBudget: 2 # 同一区间每轮可读次数;0 关闭
injectContract: true # false 则完全不注入运行契约
改完重跑 install-preset.py(配置热生效)。改 gpt-guardrails.mjs 的代码需要
重启应用 —— Node 会缓存模块。
上下文压缩阈值
同一文件里的 compaction-basic 是计价设置,不是延迟设置:
GPT-6 全系列对输入超过 272K token 的请求按 2 倍输入/缓存价、1.5 倍输出价计费, 且是整个请求。
Sol/Luna 的上下文窗口是 1,050,000,所以本预设用 thresholdRatio: 0.25(≈262K)压在加价线之下。
前提是你的模型声明了 contextWindow。 若 provider 不报窗口,压缩触发点算不出来 ——
对 ChatGPT provider 可以在模型条目里加 contextWindow: 1050000,见
dsh-chatgpt-plugin。
验证
node tests/harness.mjs # 61 项行为检查(假 Cordis 上下文,不需要应用/会话/模型)
node tests/check-config.mjs # 每个配置键对 shipped schema 校验(离线,自包含)
两个脚本都路径无关、无外部依赖,clone 下来即可运行;CI 每次 push 都会跑。
行为检查覆盖几条刻意的语义,改代码时别破坏它们:
- 交错循环(复用实测形状)必须在第 2 轮内触发 —— 旧版连续检测在此为 0 次
- 12 次各不相同的调用零误报;把某签名挤出窗口后再发一次也零误报
todo_write:建清单 / 改状态 / 标完成全部放行,只有重发同一份被拒- 被拒的提交不构成状态 —— 未落盘的重发仍放行,否则一次基于陈旧状态的拒绝会连锁误伤
agent/created不派发时,限额与契约注入仍必须生效(第一版正是死在这里)- 契约必须抑制逐步骤播报,且授权段不再要求"用一行说出计划"
排障
预设不出现在设置页 —— 确认它真的在 profile 补丁里:
grep -c preset-gpt ~/.dsh/profiles/desktop/cordis.patch.yml # 应为 1
为 0 说明脚本没跑成功。
预设出现了但拦截不起作用 —— 插件每次激活会往 ~/.dsh/gpt-guardrails-activations.log
写一行,并在每次拒绝时记录工具名与原因:
- 文件为空 → 插件的
apply()从未执行,多半是没重启应用 - 有
activated但没有DENIED→ 拦截没触发(阈值未达到,或代码未重新加载)
模型报 STREAM_ERROR 且无细节 —— 与预设无关。该错误来自上游发来一个不带 code/message
的 error 事件;实测与推理档位、模型组合有关,换一档再试通常可恢复。
模型话太多或太少 —— SILENCE 段控制逐步骤播报。想让它多说,把 injectContract 设为
false 会移除整个契约(含授权与工具分工);或者直接改 gpt-guardrails.mjs 里 CONTRACT
的措辞,然后重启。
已知限制
- 仍在实测调参,阈值可能误伤正常流程
- 强制层是可见性/引导,不是安全边界:拒绝是一次普通工具调用结果,模型可以读
- 只在 macOS 桌面版 +
chatgptprovider 上验证过 agent.cordis.yml里的!!js平台条件在安装时解析为本机取值, 因此生成的 profile 补丁不可跨平台直接复制- 不主张官方预设与 GPT-6"天生冲突"。日志能证实的只有"确实存在这种形状的空转", 以及本预设自己的第一版强制层从未激活这两件事
License
MIT