dsh-fullwidth-punctuation
DeepSeek Harness 插件:让 AI 回答输出中文全角标点(用户直接复制回答内容也是全角)。监听 llm/stream 做智能半角→全角转换,跳过代码块/数字/URL/markdown,并注入 system prompt 提示。
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 3, 2026
- Updated
- Sep 3, 2026
Introduction
dsh-fullwidth-punctuation
让 DeepSeek Harness 的 AI 回答输出中文全角标点:回答在界面上是全角,用户直接复制回答内容也是全角。面向政务公文、汇报材料等对「标点统一全角」有硬性要求的写作场景。
原理
插件是纯 host 端 Cordis 插件,监听 llm/stream 瀑布(@deepseek-ai/dsh-llm 官方设计的流拦截点),在数据源头把模型输出文本里的半角标点转换为中文全角:
- 模型输出 →
llm/stream拦截 → 转换 → 写入会话存储 → 渲染到界面 → 复制 - 因为转换发生在源头,界面显示、复制按钮、选中复制拿到的都是同一份全角文本。
同时注入一条 system prompt 提示模型尽量输出全角(双保险,减少后处理负担)。
转换规则(智能全角,不破坏代码/数字/链接)
| 输入 | 输出 | 说明 |
|---|---|---|
, ; ! ? | , ; ! ? | 无条件转换 |
. | 。 | 数字小数点(3.14)、省略号(...)不转 |
: | : | 时间(10:30)、URL(http://)不转 |
( ) | ( ) | markdown 链接 [text](url) 内的括号不转 |
" | “ ” | 配对转换 |
代码块 ``` / ~~~ | 不转 | fenced code 整体跳过 |
行内代码 ` | 不转 | inline code 跳过 |
| 裸 URL | 不转 | http://example.com/a.b 保持原样 |
< > [ ] * # - _ ' | 不转 | 歧义过大,保守保留 |
只转换 AI 的回答文本:不转用户输入、不转工具调用的 JSON 参数、不转推理(reasoning)内容。
安装
# 方式一:本地打包后安装(推荐,离线可用)
cd dsh-fullwidth-punctuation
npm pack # 生成 dsh-fullwidth-punctuation-0.1.0.tgz
dsh plugin --profile web add ./dsh-fullwidth-punctuation-0.1.0.tgz
# 方式二:直接用目录安装
dsh plugin --profile web add ./dsh-fullwidth-punctuation
安装后重启 Web GUI(或重启 dsh web)生效。
卸载
dsh plugin --profile web remove dsh-fullwidth-punctuation
验证
- 运行单元测试:
node --test test/ - 装好后问 AI:「写一段材料,包含逗号、句号、冒号和括号」,观察回答与复制内容均为全角。
- 再让 AI 输出一段代码块,确认代码块内的半角标点没有被改写。
边界说明
- 转换只作用于走标准
llm/stream的模型输出(DeepSeek Harness 的 agent-loop 全部走该路径)。 - 半角双引号
"会被配对成中文引号;英文引文场景如不希望转换,请卸载插件。 - 裸域名(无
http://前缀)中的点号可能被当作句号转换,URL 请写全前缀。 - 首版默认开启,无设置界面;如需开关可后续版本加配置项。
开发
node --test test/ # 运行测试
核心文件:
lib/index.js:host 插件入口(llm/stream监听 + system prompt 注入)lib/fullwidth.js:转换核心(流式安全状态机)