Passer au contenu principal
T

dsh-term-dict

taoziliyouchong/dsh-term-dict

Keeps terminology in two-level plain-text glossaries and injects a term's meaning the first time it appears in a session.

Installer

dsh plugin --profile web add github:taoziliyouchong/dsh-term-dict

README

dsh-term-dict

中文 | English

跨会话的术语字典:把「我们之间约定俗成的称谓」写进文本文件,某个词第一次出现时自动把它的口径注入模型上下文, 再配一个能看能改的设置面板和查/写/体检三条工具。

模型每开一个新会话都会忘掉「你说的 X 指什么」。术语字典把这件事存成文件:不靠记忆、不靠每轮重复解释, 写一次,之后会话里第一次用到这个词就自动带上口径。

另外,每个会话会注入一套「词条检测」:模型在你原话里发现字典查不到的新称谓时,把候选写进本会话账本; 同一候选跨会话重复出现足够多次,自动转正进通用层。检测开关在面板「高级设置」,默认开; 装了进化模式(plugin-evolution)时整套检测失效。

它管什么

层文件收什么
通用$DSH_HOME/evolve/dict/general.md跨任务类型都成立的称谓
任务$DSH_HOME/evolve/dict/domains/<任务slug>.md只在本类任务里成立的称谓,含只对某个工作区成立的默认落点

一个任务一个文件,文件表头写一行 > 任务类型:中文任务名,面板和列表就按这个名字显示。 任务层可选绑定工作空间:表头写 > 工作空间:<路径片段>(可多行),会话的工作目录命中任一片段才参与匹配。

词条格式

## 词条名(别名:另一个叫法)

- 定义:一句话说清它是什么
- 默认指代:单独出现时默认优先指哪件事/哪份文件/哪条命令
- 边界:它不是什么
- 状态:已确认 / 部分确认 / 待观察 / 已废
- 备注:可选;撞名认哪条也写这里

除定义外都可选。别名写进标题括号里,查别名与查词条名等价。

三种类型由主字段推断,不写进文件:有定义=称谓型;只写默认指代=落点型;状态为已废=留档型。

工具

工具用途
dict一个入口全包:action=lookup 查(不传 term 就列索引)/write 写词条/lint 体检/mute、unmute 把当前会话加进或移出「不灌注」名单
dict-lookup只查:列索引或给词条正文(含定义/默认指代/边界/别称/状态/备注),别名也命中
dict-write只写:增或改一条词条,写前留 .bak;连续改同一个词到第 3 次会拒写,要求先问用户
dict-lint只体检:空定义、缺状态、同层重名、别称冲突、跨层同名同义可删重、跨层同名异义缺排他性、名字只差一个字的疑似同词

查不到时给「疑似同一词」候选,不返回错误——没收录是正常结果。

自动激活

同一个会话里,某个词条的词条名或别称第一次出现时,把该条口径作为 runtime-context 注入模型上下文; 同一会话同一词条只注入一次,状态记在 $DSH_HOME/evolve/dict/.activation.json,重启或恢复会话后不重复注入。

  • 生效时机:用户消息里的词在本次模型调用前生效;模型思考与输出里的词只能从下一步或下一轮生效(正在流式生成的那一段改不了)。
  • 灌注范围:通用会话(没有模式或判不出模式)默认灌注。设置面板「高级设置 → 灌注的模式」会自动列出本机所有模式(带显示名与 id),勾上才在这些模式里灌注——新建的模式默认不灌,别的模式连字典工具都看不到;全不勾=只灌注通用会话。清单取不到时退回手填 id。
  • 上限:默认单会话 64 条、整段 12000 字、单条不截断,都能在面板里改。
  • 不灌注:面板里勾选本机工作空间(按路径子串匹配,勾上层目录会连带命中其子目录),也可手填其它路径片段(skipWorkspaces);按会话 id 排除走 skipSessions;输入栏「词条·注/禁」按钮管当前会话,任务层还能单独设「跟随/强制开/强制关」。

词条检测

会话开始时注入判别机制和本会话账本路径。账本标准模板在 $DSH_HOME/evolve/dict/auto/template.md: 每个候选块必须有 EVID: 与 结论:,结论去空白后必须大于 10 个字;不符合的写入直接失败。

  • 每轮刷新:同一会话来新请求,上一轮的检查作废,本轮必须重新落盘。
  • 回合闸:回合要关时,如果本轮没写出符合模板的检测块,或正文开头没有检测报告行,强制补一步(只补一次)。
  • 报告行:正文开头一行 > **词条检测**:…,写本轮检测与收录结果。
  • 候选权重:账本里「结论:收」的词按不同会话计数;到 3 个不同会话且已有定义或默认指代,转正进通用层(状态 待观察)。权重只记在 auto/weights.json,不显示。
  • 连续修改:dict-write 连续改同一个词到第 3 次会拒写,要求先问用户;用户自己在面板改不计。
  • 关闭:面板「词条检测」开关关掉,整套检测不注入、不建账本、不计数。装了进化模式(plugin-evolution)时同样整套失效。

设置面板

设置 →「术语字典」,三块:

  • 左栏:通用层与任务层名册,可新建任务层、改名、绑定工作空间。
  • 右栏:「词条」视图点一条就地改字段;「原文」视图批量整理;底部显示文件与保存状态。
  • 设置页:自动激活开关、三个注入上限、词条检测开关、灌注的模式、不灌注的工作空间;「结构」页管模块与类型(模块是全局清单,类型是勾选组合),删模块先扫描影响、确认后 24 小时才动数据且可撤销。

本机路由(面板后端)

宿主半边注册 25 条本机路由,只接受回环地址;改数据的请求还要求同源(浏览器从别的站点发来的写请求直接 403)。 非浏览器来源(命令行、脚本)不带这些头,照旧放行。

分组路由
层与词条GET /api/list、GET /api/read、POST /api/write、POST /api/rename、POST /api/create-layer、POST /api/workspace、GET /api/workspaces
会话GET /api/session-state、POST /api/session-mute、POST /api/session-mute-clear、`GET
结构GET /api/schema-scan、POST /api/schema/module-remove、POST /api/schema/module-cancel、POST /api/schema/module-add、POST /api/schema/module-def、POST /api/schema/type-enable、POST /api/schema/type-module、POST /api/schema/type-add、GET /api/schema/type-scan、POST /api/schema/type-remove、POST /api/schema/type-unremove
设置`GET

以上路径都挂在 /dsh-term-dict 前缀下。

数据放哪

$DSH_HOME/evolve/dict/:general.md、domains/<slug>.md、.settings.json(高级设置)、.activation.json(按会话记已激活词条与静音名单)。 检测数据在 auto/:template.md(标准模板)、work/<会话id>.md(本会话账本)、weights.json(候选权重)、archive/(会话结束归档)。 字典文件是纯文本,可直接手改;改之前插件会留 .bak。卸载插件不会删这些文件,要清就手工删目录。 首次运行时通用层不存在,会预置两条词条(「词条(别名:词目)」「词典(别名:字典、术语字典)」,都是称谓型,模块齐全);已有字典不会被覆盖。

安装

dsh plugin --profile desktop add github:taoziliyouchong/dsh-term-dict

装完重启 DSH。用别的 profile 就把 desktop 换成你的 profile 名。 要求 DSH >= 0.2.1-alpha.1(下限按用到的服务与槽在 alpha.1 已存在推定);实测 0.2.1-alpha.3、0.2.2-rc.1,更高版本未验证。

开发

npm install
npm run build:client    # 从 src/entry.jsx 重新生成 lib/client.js
npm run check:client    # 已提交产物与源码一致
npm run check           # 语法
npm run smoke           # 结构 / 组合声明 / 宿主工具与路由 / 自动激活默认值 / 默认词条 / 检测模板 / 候选权重 / 客户端产物 / 环境残留 九关

lib/client.js 是提交进仓库的构建产物:从 GitHub 安装时不跑构建,缺了它面板不会出现。 打包要求:react、react/jsx-runtime、react-dom 保持 external(由 DSH 客户端模块表提供); 产物外壳 window.__ModuleLoader__.load({ id, factory }) 里的 id 必须等于包名。

源码:

  • src/entry.jsx —— 浏览器半边(面板、词条编辑、结构页、高级设置)
  • src/term-text.js —— 词条文本的解析与渲染(面板与宿主同一套口径)
  • index.js —— 宿主半边(四条工具、25 条本机路由、技能注册、检测写入闸与回合闸)
  • activation.js —— 自动激活(扫描、状态、灌注上限、模式白名单)、词条检测注入、进化模式判定与首次运行的默认词条
  • weights.js —— 候选权重(跨会话计数、阈值转正)
  • detect-format.js —— 检测模板与格式校验(EVID、结论、报告行)
  • assets/general-default.md —— 首次运行写入通用层的默认词条(两条,都是称谓型,模块齐全)

已知限制

  • 自动激活只认精确命中(词条名/别称),不做形近联想;形近候选要自己 lookup 查。
  • 任务层的词条只在工作空间匹配或会话覆盖时参与匹配;没写绑定的任务层对所有工作空间生效。
  • 面板路由只接受本机回环地址:远程访问的 DSH 上,面板会读不到数据(返回 403)。
  • 词条文件是纯文本、按二级标题分块,手改时标题必须是 ## 词条名。
  • 词条检测的候选由模型按模板写;插件只校验格式、字数、报告行与写入路径,不校验判定质量。写入闸只拦 write/edit 工具,shell 写文件会绕过。
  • 候选转正只写通用层,不按任务层分流;转正状态是 待观察,需要人工确认后再改状态。

反馈

插件有问题,按这个顺序:

  1. 开 Issue:https://github.com/taoziliyouchong/dsh-term-dict/issues —— 能留痕、能搜历史;
  2. 急着问或不想开 Issue,QQ 号:2171960697(加好友请注明装的是哪个插件)。

反馈时带上:DSH 版本、插件版本、报错原文、截图。

许可

MIT

Plugins associés