DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

pick1e-morty /

pick1e-morty/dsh-suggest-reply

Verified

帮我想想 —— 一个基于 DSH-better-sidebar 的侧边栏 tab:用你自己写的 system prompt 对主对话最新一条 AI 回复生成候选回复,点击直填输入框。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@00d69687

dsh-suggest-reply

帮我想想 —— 一个 DSH Web 插件:在侧边栏里,用你自己写的 system prompt 对「主对话最新一条 AI 回复」生成候选回复(JSON 风格列表),点结果直填主对话输入框。

基于 dsh-better-sidebar 的 ctx.betterSidebar.registerTab 注册一个侧边栏 tab(帮我想想)。

特性

  • 三个输入框,prompt 完全由你掌控:
    1. 系统提示(必填) —— 设定 AI 的身份、任务与风格输出格式(插件原样透传,无内置模板);
    2. 主对话最新消息(必填) —— 自动读取当前会话最新一条已完成的 AI 回复(面板打开期间每 2s 轮询保持最新,手动编辑则暂停刷新不覆盖),也可手改;
    3. 导演要求(可选) —— 故事走向锚点,置于最新消息之前作为用户消息。
  • 单次调用,无重试:每次点生成 = 一次 off-loop 补全;模型返回什么就解析什么,部分输出直接呈现(缺的风格你自己决定下一步),不自动补全。
  • 动态结果行:从模型 JSON 中解析出 [{style, text}] 动态渲染(无固定风格名单、无 checkbox);点击结果文本直填主对话输入框(composer 不可用时降级复制)。
  • 采样参数 + 持久存储:可折叠的采样参数区(温度 / 输出上限 / 推理强度 / 停止序列)透传给模型 —— 即 harness LLM 服务支持的全部采样面;系统提示、采样参数与面板 textarea 高度自动持久化到 DSH 设置(suggestreply 命名空间 → settings.yaml),防抖自动保存(600ms),刷新不丢。settings 服务缺失时插件照常工作(只是不持久化)。
  • 与主会话完全独立:不创建 / 不 fork / 不写任何会话日志,主会话零痕迹;每次生成都是一轮新的,不继承任何上下文。
  • 流式调试(实时思考流):生成期间面板实时滚动 AI 的思考流(reasoning)与结果原文 —— 主对话同款体验,生成过程不再「一片空白」;完成后折叠区保留完整记录(含思考)。
  • 调试信息:每次生成(成功或失败)后,面板底部折叠区展示本次调用的完整 system prompt、用户消息、思考流、模型原始输出与解析结果 —— 排查 prompt 问题零成本直查。
  • 双语:界面文案 zh / en(跟随浏览器语言)。

前置依赖(必装)

dsh-better-sidebar 必须安装(未安装时本插件不激活,无任何 UI/行为),需 0.14.0+:

dsh plugin --profile web add dsh-better-sidebar@latest

安装

# 本地路径
dsh plugin --profile web add <本仓库路径>

# 或发布后
dsh plugin --profile web add dsh-suggest-reply

装完硬刷新浏览器(Cmd/Ctrl+Shift+R)即可看到侧边栏「+」菜单里的「帮我想想」tab(client 改动无需重启 DSH)。

安装到已运行的 profile(例如主 GUI 的 3080)

以主 profile(web,常跑在 3080 端口)为例:

# 0. 确认 better-sidebar 已装(本插件的硬前置,未装先执行上面的前置依赖步骤)
# 1. 装插件(自动追加到 profile 的 bundles + link 依赖)
dsh plugin --profile web add <本仓库路径>

# 2. 重启承载该 profile 的 dsh web 进程(host 半的路由只在启动时加载)
#    PM2 管理的话:
pm2 restart dsh-web
#    非 PM2 则重启你原来的启动命令

# 3. 硬刷新浏览器(Cmd/Ctrl+Shift+R),侧边栏「+」菜单出现「帮我想想」

⚠️ 第 2 步会短暂断连正在使用该 profile 的 Web GUI(页面加载中断,服务起来后刷新即可;会话数据持久,不丢失)。若只想验证 client 半(tab 出现/面板渲染),client 改动硬刷新即可生效;但生成候选依赖 host 路由,host 半未重启前 /suggestreply/api 会 404。

使用

  1. 在侧边栏「+」菜单打开「帮我想想」tab。
  2. 在系统提示框写你的 prompt:AI 身份 + 任务 + 风格输出格式(模型只会看到你写的东西,务必包含 JSON 输出格式要求,如 只输出 JSON {"candidates":[{"style":"风格名","text":"…"}]})。
  3. 主对话最新消息框已自动填入当前会话最新一条 AI 回复;如需手动调整直接改。
  4. (可选)在导演要求框填故事走向锚点,会放在最新消息之前作为用户消息。
  5. 点「生成候选回复」—— 一次调用,结果按模型输出顺序动态列出(风格标签 + 文本)。
  6. 点任意结果文本,直接填入主对话输入框,回车发送即可(composer 不可用时自动降级为复制)。
  7. 模型没出全/出错了?展开底部「调试信息」看原始输出,改你的 system prompt 后再试 —— 没有自动重试,一切由你控制。

工作原理

client (better-sidebar tab)                host (/suggestreply/api)
┌──────────────────────────┐   POST latest    ┌──────────────────────────────┐
│ SuggestPanel             │ ───────────────▶ │ latest: readSurface(sessionId)│
│  系统提示(必填,用户写)     │ ◀─────────────── │  → 回扫最新 assistant/message │
│  主对话最新消息(自动填充)   │    { text }      └──────────────────────────────┘
│  导演要求(可选)            │   POST candidates┌──────────────────────────────┐
│  生成按钮                 │ ──SSE 流式────▶ │ candidates (event-stream):    │
│  实时思考流/原文(生成中)     │    { sessionId,  │  reasoning/text delta 实时推送 │
│  动态结果行(点击填入输入框)  │      system,     │  → 结束 result/error 事件      │
└──────────────────────────┘      directorHint,│  解析(JSON→salvage) 去重(按风格)│
                                  provider,   │  { candidates, debug(含思考) }  │
                                  model }     │                                │
  • 台词来源:最新消息框未被手动修改时,生成请求不携带该文本 —— host 每次现读会话日志,保证用的是最新一条(硬回退方案:编辑过则你的内容为硬输入)。
  • 必填校验:system prompt 与最新消息均不得为空(host bad-request / no-assistant-reply 硬错误;面板按钮在任一为空时禁用)。
  • 单次调用:无重试机制 —— 模型输出解析一次;解析失败或输出为空时返回明确错误(带调试现场),由你调整 prompt 后重试。
  • 采样与持久化:温度 / 输出上限 / 推理强度 / 停止序列 = harness GenerateOptions 的全部采样面;payload 合法值优先、配置兜底(resolveSampling,非法值永不达模型)。配置经 DSH settings 服务读写(schemastery schema + revision 乐观锁,冲突 409),config.get / config.update 两个 API 方法。
  • 解析容错:剥 markdown 围栏 → 整体 JSON.parse;截断时退到正则 salvage 扫描,容忍结尾引号缺失;按风格去重(先到先得)。
  • 模型渠道:用当前会话的模型(客户端 sessions.models 解析,host 校验必填)。

开发

corepack pnpm install     # pnpm 11.7.0(packageManager 固定)
corepack pnpm typecheck
corepack pnpm test        # vitest 纯函数单测
corepack pnpm build       # tsc 声明 + tsdown 双产物(lib/index.js + lib/client.js)

已知限制与后续

  • 无内置 prompt 模板:系统提示完全由用户撰写 —— 插件只透传;之前内置模板提供的「身份不串」「风格互斥」等防护随之成为用户 prompt 的责任(调试模式兜底)。
  • 采样面即 harness 面:只有温度 / 输出上限 / 推理强度 / 停止序列 4 个;top_p / penalty / seed 不在统一 LLM 服务里,不走旁路。
  • 语言跟随:当前按浏览器语言切 zh/en;跟随 DSH 设置里 locale.preference(locale service)是后续项。
  • 直填是替换语义:点结果会覆盖输入框当前草稿;composer 服务缺失的部署降级为剪贴板复制。
  • 免 DSH 源码:全程只消费 DSH 公开服务(webServer / sessionQuery / llm / connection)+ better-sidebar 服务,零官方源码改动。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 00d696870022

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout