- Главная
- Плагины
- Модели и провайдеры
- habit-hint
habit-hint
root-7-khx/habit-hint
A local small-model habit hint plugin for DeepSeek Harness that reads recent turns, extracts the user habits, key points and hints, and injects them into the conversation system prompt. It needs a Python virtualenv with torch/transformers/peft plus a user-supplied Qwen3-0.6B base model and LoRA adapter, none of which are bundled; its default scope only runs in sessions that companion-memory has enabled, and with the shipped placeholder paths it silently injects nothing.
Установка
dsh plugin --profile web add github:root-7-khx/habit-hintREADME
习惯提示小模型(@local/habit-hint)
独立的本地小模型插件:每几轮聊天,读最近几轮对话,生成「习惯 / 重点 / 提示语」, 作为一段提示注入当前会话的系统提示词。不改动 companion-memory、ai-voice、qqbot 的任何代码。
它怎么工作
会话消息流 ──每完成一轮对话(用户+AI)──▶ 计数 +1(data/turn-counter.json)
└─▶ 原始轮次追加 data/live-turns.jsonl
计数到 500 ──▶ 拉起一次 auto_train.py --once --force(攒够才训,不再按时间轮询)
每 N 个 AI 回合 ──▶ 最近 6 轮对话
│
▼
Python 常驻进程(Qwen3-0.6B + LoRA)
│ {habits, important, hints}
▼
缓存(按会话隔离)
│
▼
下一轮系统提示词追加「【习惯提示 · 小模型】」
- 训练触发按对话次数,不按时间:每完成一轮对话计数 +1,到
trainTriggerTurns(默认 500)就拉起一次训练,训练进程自己跑完退出; - 训练用
data/live-turns.jsonl里实时记录的原始轮次,不依赖热缓存(2 个聊天日)的保留时间; - 模型/适配器路径、触发间隔、超时都在
cordis.patch.yml的config里; - 第一次需要出提示时才启动 Python 进程(懒加载),加载完成会写日志;
- 进程崩了、超时、JSON 坏、没有 adapter —— 全部静默跳过,聊天不受影响;
- 想回滚:把
adapterPath指向旧 adapter 目录,或改成auto读adapters/current.json。
配置项
| 字段 | 默认 | 说明 |
|---|---|---|
| enabled | true | 总开关 |
| pythonPath | D:\AI\语音POC\venv-qwen3tts\Scripts\python.exe | 带 torch/transformers/peft 的 Python |
| modelPath | D:\AI\习惯模型\models\Qwen3-0.6B | 基座目录 |
| adapterPath | auto | auto = 读 adapterRoot/current.json;也可写死目录 |
| adapterRoot | D:\AI\习惯模型\adapters | current.json 所在目录 |
| intervalTurns | 3 | 每几个 AI 回合跑一次小模型 |
| windowTurns | 6 | 送进小模型的最近轮数 |
| maxNewTokens | 160 | 小模型最多生成 token |
| threads | 8 | 推理线程 |
| timeoutMs | 180000 | 单次推理超时 |
| maxContextChars | 6000 | 送进去的上下文最大字符数 |
| freshMinutes | 60 | 提示超过多少分钟就不再注入 |
| scope | companion | companion = 只处理开了伴侣记忆的会话;all = 全部会话 |
| companionSessionsPath | companion-memory 的 sessions.json | 只读,用来判断哪些会话开了伴侣记忆 |
| trainTriggerTurns | 500 | 完成多少轮对话后触发一次训练 |
| counterPath | D:\AI\习惯模型\data\turn-counter.json | 对话计数 |
| liveTurnsPath | D:\AI\习惯模型\data\live-turns.jsonl | 实时原始轮次(训练数据来源) |
| trainRequestPath | D:\AI\习惯模型\data\train-request.json | 到量后的训练请求记录 |
| triggerEnabled | true | 是否允许插件拉起训练 |
| autoTrainPython | venv python | 训练用的 Python |
| autoTrainScript | D:\AI\习惯模型\scripts\auto_train.py | 触发的训练脚本(--once) |
| autoTrainLockPath | D:\AI\习惯模型\auto_train.lock | 训练锁,避免重复起进程 |
| injectInQQSessions | false | QQ 路由会话是否注入(默认关:QQ 上 runtime-context 刷新可能触发重复回复) |
| generateInQQSessions | false | QQ 路由会话是否允许「生成」习惯(不控制注入):配合 companion-memory 把习惯写进该会话时设 true,提示仍不注入 |
| qqBridgePath | companion-memory 的 qq-bridge.json | 只读,用来识别 QQ 会话 |
| logPath | D:\AI\习惯模型\logs\habit-hint.log | 插件日志 |
0.3.0 更新要点
- JSON 解析容错:小模型输出里的裸英文引号会自动转义、被
max_new_tokens截断的输出会自动补齐括号、被代码块 / 废话包围也能找出 JSON 解析,坏输出不再整批丢弃。 - QQ 会话只生成、不注入:
generateInQQSessions(默认 false)放开 QQ 路由会话的「生成」,但提示仍不注入;配合 companion-memory 把习惯写进「对话人习惯」时设 true(详见「已知边界」)。 - 依赖与训练数据不随插件走:Python 环境、基座模型、适配器、训练数据、日志仍在本机
D:\AI\习惯模型(路径见上面的配置表),发布包只带插件代码与推理脚本。 - 路径选择用 Windows 原生对话框:设置卡里的选文件 / 选文件夹与 companion-memory、ai-voice 同款(COM IFileOpenDialog,DPI 感知,中文路径不乱码)。
日志与排障
D:\AI\习惯模型\logs\habit-hint.log,常看这几行:
习惯提示插件已加载—— Host 插件启动成功;启动推理进程 adapter=...—— 第一次触发,正在加载模型;推理进程就绪—— 模型加载完成;生成成功 ... habits=.. important=.. hints=..—— 小模型正常出结果;生成失败 ... 推理超时/推理进程退出—— 降级或进程问题,聊天不受影响。
已知边界
- 默认只给 DSH 桌面会话注入;QQ 路由会话不注入(原因见上)。要让 QQ 会话也产出习惯、但不注入提示,把
generateInQQSessions: true(只放开生成);要在 QQ 上也注入,再把injectInQQSessions: true打开并观察是否重复回复。 - 小模型目前是规则标签训练的基线版(JSON 合法率 100%,但习惯召回一般),随着自动训练积累新版本会逐步变好;它只是「提示器」,不替代主 AI。
- 提示是参考,不保证每次都对;主 AI 仍以角色文档和记忆为准。
Похожие плагины
dsh-our-free-model
ebony-vinyl/dsh-our-free-model
dsh-routing-suite
yjh051108/dsh-routing-suite
dsh-connect-workbuddy
dingminhua/dsh-connect-workbuddy
dsh-workbuddy-connect
corrinehu/dsh-workbuddy-connect