← 返回列表
未验证
用零泄露守卫陪你练数学,只给提示不报答案
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/5 · 已提供中文文档
Math_Agent:一个用于 DeepSeek Harness 的数学训练/辅导智能体预设,带有程序化的零泄漏输出防护,绝不泄露答案
综合分
29.6
GitHub 分
29.6
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add RepInS-01/math-agent该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
Math_Agent
一个用于 DeepSeek Harness 的数学训练预设——不是解题器。
它不为受训者解题,而是提供快速反馈,帮助加深数学理解并建立直觉。它具备一个程序化的零泄露输出守卫,从机制上防止教练泄露答案。
功能特性
- 🧑🏫 教练,而非解题器:从不给出完整解答、关键步骤或最终答案。跟随受训者的推理,确认正确的部分,并指出问题。
- 📋 训练前检查:每次训练开始前,验证题目定义明确、条件充分且无错误。
- 🧠 程序化尝试追踪:受训者尝试过的方法通过 attempt_update 工具记录为程序状态(状态:in-progress / flawed / validated / incomplete),每一步都渲染进系统提示中,并在恢复会话后从会话日志中重建。若连续多轮没有更新,提示中会提醒教练。对于较长的会话,尝试还可额外持久化到 notes/attempts.md。
- 🪜 提示阶梯与每会话提示策略:教练反馈遵循四级提示阶梯(L0 提问 → L1 命名原理 → L2 骨架 → L3 部分构建,仅作最后手段)。每个 L1+ 提示都通过 hint_log 工具记录并在系统提示中计数——计数上升是放慢节奏的信号。会话开始时,教练通过 ask_user_question 询问受训者的提示策略(strict = 仅 L0/L1;normal = 完整阶梯),并用 hint_policy 工具记录——按会话生效、可恢复、可在会话中途切换。agent.cordis.yml 中的 strictness 值仅是从未选择策略的会话的默认值(发布时为 strict);在 strict 策略下,hint_log 会以程序方式拒绝 L2/L3。
- 🚦 总结纪律:在某个方法被完全验证之前,只允许进行阶段性总结;最终总结以程序方式解锁——只有当通过 attempt_update 将某个尝试记录为 validated 时,零泄露守卫才会解除,绝不依据模型自己的说法。
- 📚 最终综合:最终回顾会重新审视会话中探索过的每一种方法,识别受训者自身的推理模式,并避免直接否定“有缺陷”的路径。
- 🔒 程序化零泄露守卫(核心亮点):llm/stream 上的流级守卫会检查教练的整个回复。当检测到答案线索(数值、区间、正确性判断、答案形式)时,整个响应会被替换——模型原始输出中没有一个字符会到达受训者。这不依赖模型的“自律”。
- 🗂️ 可扩展知识库接口:预留的本地/在线知识库集成(knowledge-base 技能)。在最终综合时,优先采用有事实和数据支撑的理解。
目录结构
math-agent/
├── preset.yml # 预设元数据(名称 / 描述)
├── agent.cordis.yml # Cordis 组合:工具、人设、技能、防护注册
├── attempt-tracker.js # 训练状态插件:attempt_update + hint_log + hint_policy 工具、提示注入、validated 标志、过期更新提醒(从会话日志折叠而来)
├── zero-leak-guard.js # 程序化零泄漏输出防护插件(通过相对路径加载;随预设一起复制)
├── zero-leak-guard.test.mjs # 测试语料库:必须拦截的泄漏样本、必须放行的干净回复、追踪器 + 解锁行为
├── README.md # 本文件
├── LICENSE # MIT 许可证
└── skills/
├── coaching-protocol/ # 教练协议:工作流、红线、零泄漏规则
├── knowledge-base/ # 知识库集成接口(预留)
└── final-synthesis/ # 最终综合工作流与输出结构
安装
前提条件:DeepSeek Harness(npx @deepseek-ai/dsh web)。本预设派生自 standard 预设,使用 DSH agent-presets 机制。
git clone https://github.com/RepInS-01/math-agent.git
mkdir -p ~/.dsh/.agent-presets
cp -r math-agent ~/.dsh/.agent-presets/
预设 id 即目录名,因此预设必须落在 ~/.dsh/.agent-presets/math-agent/(如果你使用自定义 DSH_HOME 运行,则为 ${DSH_HOME}/.agent-presets/math-agent/)。发现是实时的:预设会立即出现在 Web GUI 中,无需重启 DSH。
挂载验证(任何修改后运行):在 Web GUI 中,创建一个新会话并选择 Math_Agent 预设。成功选中即表示组合已挂载;挂载失败时,GUI 会将选择恢复为默认预设并显示错误。(以编程方式,同样的检查是 agentPresets.standingKeyFor('math-agent'),可在 DSH 会话内部调用。)
用法
1. 在 DeepSeek Harness Web GUI 中,创建一个新会话并选择 Math_Agent 预设(id:math-agent)。
2. 用类似下面的提示开始一次训练会话:
我想开始一次数学训练练习。题目:设 aₙ = √(1 + aₙ₋₁),a₀ = 1。证明 {aₙ} 收敛并求其极限。我在考虑用单调收敛,但不确定如何证明有界性。
3. 无论你多么坚持索要答案——零泄漏防护都会挡在你和模型之间。
零泄漏防护如何工作
- 挂接到 llm/stream 瀑布流(进程范围内分发);仅对系统提示中包含教练签名的请求激活(零泄漏铁律 / 数学教练)。所有其他会话原样通过。
- 模型的完整输出文本在交付前会被程序化检查。如果匹配到答案线索模式(区间、正确性判断、答案形式、小数值等),整个片段会被替换为固定的拦截消息。
- 拦截发生在流层:会话日志记录的是拦截消息,而不是泄露的文本。在下一轮中,模型会看到自己的拦截通知,并自动以合规的方式重新表述。
- 解锁是程序状态,而不是模型判断:attempt-tracker 插件(挂载在同一个 isolate realm 中)保存每个会话的尝试列表。一旦某次尝试通过 attempt_update 工具被记录为 validated,守卫就会解除,以便最终综合能够交付完整解答。缺少跟踪器、未知会话,或没有已验证的尝试,都会落到阻断——在每个方向上都故障关闭。
- 解锁是程序状态,而不是模型判断:attempt-tracker 插件(挂载在同一个 isolate realm 中)保存每个会话的尝试列表。一旦某次尝试通过 attempt_update 工具被记录为 validated,守卫就会解除,以便最终综合能够交付完整解答。缺少跟踪器、未知会话,或没有已验证的尝试,都会落到阻断——在每个方向上都故障关闭。
- 计算/搜索工具在同一锁下被拒绝:预设层 tools.guard 会拒绝 bash、pwsh、web_search 和 run_code,直到某次尝试被验证。流检查无法看到工具输出,因此那些可能计算或检索答案的工具会被直接禁用——并且该拒绝会在与最终综合解锁相同的程序状态下解除。
- 在锁定阶段隐藏推理:教练的思考通常会直接推导出答案,而客户端 UI 会向学员渲染推理行。当没有尝试被验证时,推理增量会折叠为固定占位符,并且推理块负载会被重写——按原始块顺序进行,以保持持久化消息与 pi-ai 重放状态一致。一旦某个方法被验证,推理就会再次流动。
- 模式定义集中在 zero-leak-guard.js 顶部的 LEAK_PATTERNS 中,并且可以自由扩展。
已知边界
程序化守卫会阻断教练自身回复文本中的可枚举泄露形式(数值、区间、判断词),而工具门控覆盖计算/搜索通道。仍有一个通道受角色约束,而不是由守卫强制执行:
- 语义层面的提示,不带数字(例如,“这个数恰好是你刚刚推导出的方程的根”)。
当发现新的变体时,只需将它们添加到 LEAK_PATTERNS(并在 zero-leak-guard.test.mjs 中添加一个示例)。
测试
该守卫附带一个零依赖测试语料库(Node 内置测试运行器):
node --test zero-leak-guard.test.mjs
在每次修改 LEAK_PATTERNS、attempt-tracker.js 或守卫的解锁逻辑之后都要运行它。语料库覆盖:必须被拦截的泄漏样本、必须通过的合法辅导回复、经过验证的会话解锁(及其故障关闭式回退),以及尝试追踪器的状态记录、提示日志记录(包括对 L2/L3 的严格策略拒绝)、过期更新提醒、提示渲染和会话日志折叠。将每一个新发现的泄漏变体加入拦截列表,将每一个被报告的误报加入通过列表。
重载注意事项:相对路径预设插件(./attempt-tracker.js、./zero-leak-guard.js)通过 Node 的 ESM 加载器导入,没有缓存失效机制。在编辑插件代码或 agent.cordis.yml 之后,重启 DSH 主机(dsh web)——仅在 UI 中重新选择预设是不够的,因为重新挂载会复用已缓存的模块。技能文件(skills/**/SKILL.md)会按会话从磁盘重新读取,无需重启。
知识库集成(保留)
skills/knowledge-base/SKILL.md 定义了一个统一的 search 接口契约(本地目录 + 在线检索),目前处于保留状态:
- 本地:工作区 kb/ 目录,其中的 Markdown 文件按主题组织;通过 glob + grep 检索。
- 在线:web_search 检索,按来源 URL 引用。
- 所有结果都带有 confidence 标签(事实 / 数据 / 参考 / 启发式)。最终综合优先采用有事实和数据支持的理解。
自定义
- 修改人设 / 辅导协议:编辑 agent.cordis.yml 中的 persona 部分以及 skills/coaching-protocol/SKILL.md。
- 修改守卫模式:编辑 zero-leak-guard.js 中的 LEAK_PATTERNS。
- 更改后务必重新检查挂载:在 Web GUI 中重新选择预设(挂载失败会将选择恢复为默认值),或从 DSH 会话中调用 agentPresets.standingKeyFor('math-agent')。
致谢
本项目的灵感来自 Bilibili 创作者 PiKaChu345 最初提出的数学辅导概念。原作者尚未公开发布其实现。这是一个仅基于公开描述的想法进行的独立重新实现。未使用原作品的任何源代码或专有材料。原创概念的全部功劳归 PiKaChu345 所有。
许可证
MIT扫码进群