dsh-message-edit:直接改写模型回答

前言

DeepSeek Harness(DSH)的模型生成内容有时不符合预期,尤其是角色扮演场景,台词写歪了就很难通过重生成修正。插件是 DSH 的扩展方式,可以在请求边界上注入自定义逻辑。下面介绍一个改写插件,它允许在助手回答定稿后手动改写文本,改写后的内容成为下一轮对话的上下文,原始回答保留在会话日志里。

是什么

dsh-message-edit 是一个 DSH 客户端插件,由 zhaoruizhe81 维护。它解决的问题是:当模型生成的回答不理想时,不想重新生成(重生成往往更糟),希望直接修改这条回答,让后续对话从修改后的版本继续。

插件将改写记录保存在 $DSH_HOME/message-edit/edits.json,会话日志保持原样不变。改写发生在模型请求出站前,插件拦截请求,将目标消息的正文替换为改写后的文本,然后重新派发请求。改写操作会放弃该消息的复述加成(source.replayState)。

核心功能

改写回答

每条定稿的助手回答,动作行里(复制、分支旁边)会出现一个笔图标。点击笔图标打开改写面板,可以在面板中修改正文、对照原始回答。⌘/Ctrl+Enter 保存,Esc 关闭。

查看改写

被改写过的消息,会在动作行上方显示一张改写卡,展示改写后的文本。改写卡支持展开/收起长文,点击「编辑」可直接进入改写面板。如不想在对话流中看到改写卡,可在配置中关闭 transcriptCard。

恢复原文

在改写面板中点击「恢复原文」,会删除这条改写记录,模型将读取会话日志中的原始回答。空着保存再点保存,效果等同于恢复原文。

安装与启用

插件通过 git clone 获取源码,然后用 DSH 自带的 CLI 安装。

git clone https://github.com/zhaoruizhe81/dsh-message-edit.git
cd dsh-message-edit

# 1) 退出 DeepSeek Harness(profile 的 package.json 有文件锁)
# 2) 用安装自带的 CLI 装(它认得 Desktop 那个保留 profile)
sh "/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add link:"$PWD"
# 3) 重新打开 App

也可以手工三步安装:在 ~/.dsh/profiles/desktop/package.json 的 dependencies 里添加 "dsh-message-edit": "link:<本目录绝对路径>",在 dsh.profile.bundles 末尾添加 "dsh-message-edit",再把 ~/.dsh/profiles/desktop/node_modules/dsh-message-edit 软链到本目录。App 会在两秒内自动 reconcile 这一行。

卸载

dsh plugin --profile desktop remove dsh-message-edit

或在 DSH 的「设置 → 插件」里停用这个 bundle。停用后模型立刻回到原始历史。

注意事项

改写 lib/ 里的宿主代码后必须重启 App。宿主半边没有热重载,客户端半边(lib/client.js)则按 revision 重新取数,保存即生效。

配置

在 profile 的 cordis.patch.yml 里用 id message-edit 覆盖:

- id: message-edit
  name: dsh-message-edit
  config:
    enabled: true           # 总开关(false=路由与监听器都不装)
    rewriteInContext: true  # false=只记录改写,请求一字不改(纯标注)
    transcriptCard: true    # false=不在对话流里插改写卡
    maxChars: 20000         # 单条改写的长度上限
    dataDir: ~/.dsh/message-edit   # 记录文件所在目录(`~` 会展开)

接口

宿主提供四个路由,都在 /api/dsh-message-edit 下,需要同源 + 宿主签名 cookie:

GET  /status                宿主状态(诊断用)
GET  /list?sessionId=…      这个会话的改写
POST /put                   {sessionId, messageId, text}  空文字=删除
POST /delete                {sessionId, messageId}

失败码包括 invalid-session / invalid-target / invalid-text / invalid-body / body-too-large / target-not-found / text-too-large / method-not-allowed。

适用场景与注意

适合需要手动修正模型回答的场景,尤其是角色扮演、剧本编写等对上下文一致性要求较高的工作流。插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证。

已知边界

  • 只能在定稿的助手回答上改写。中断留下的半截(没有 messageId)没有动作行,也就没有改写入口。
  • 同一 (会话, 消息) 只留一条改写,后写覆盖前写。
  • 改写按会话记录,从某条分支出去的会话(新 session id)不继承父会话的改写。
  • 改写不可见地影响 token 计数:改写卡不占模型上下文,改写本身按你的文字计费。

短结尾

改写插件在请求边界上提供了手动修正模型回答的能力,让用户可以基于已有回答继续对话,而不必依赖重生成。核心价值在于:改写记录独立于会话日志,修改后的文本成为模型上下文,原始回答保留在日志里。

  • 插件目录页:https://www.skillhub.cn/plugins/zhaoruizhe81/dsh-message-edit
  • GitHub 仓库:https://github.com/zhaoruizhe81/dsh-message-edit
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye