# dsh-soul [简体中文](./README.md) | [English](./README_EN.md) DeepSeek Harness 个性化设置插件,用于配置 Agent 的昵称、回复风格、语调和自定义指令。 ## 功能 - Web UI 个性化设置页面 - 设置页体验:中英双语文案(随界面语言切换)、dirty 检测(无改动禁用保存)、保存结果提示、「查看当前生效提示词」只读面板 - 启用或禁用个性化设置 - 「关于你」:设置用户昵称、职业和介绍,回复时结合你的背景 - 选择回复风格和语调(合并为单一选项):`professional`(专业严谨)、`casual`(轻松自然)、`humorous`(幽默风趣)、`roast`(吐槽达人)、`efficient`(高效干练) - 特质微调(在风格和语调的基础上叠加): - 标题和列表:`default`(默认)、`more`(增强,采用清晰格式和列表结构)、`less`(减弱,使用更多段落文本) - 表情符号:`default`(默认)、`more`(增强,使用较多表情符号)、`less`(减弱,尽量减少使用表情符号) - 选择输出语言(Agent 回复语言 + `/soul` 命令输出语言):中文 / English - 提示词随输出语言本地化:`language=en` 时 system prompt 使用英文描述 - 输入自定义指令 - Agent 可调用工具 `set_persona`,让模型在对话中直接调整人设 - 人设预设:多套命名人设一键切换(保存 / 使用 / 列表 / 删除,Web UI 与命令双入口) - `set_persona` 确认模式(`requireToolConfirmation`):Agent 的人设修改需经 `/soul confirm` 确认后才生效 - 输入框光轨:Agent 回复中时,输入框边框显示沿边循环流动的光轨(默认颜色 `#679EFE`) - 颜色:预设色板、取色器或十六进制输入(如 `#679EFE`) - 流动速度:慢 / 中 / 快;光带粗细:细 / 中 / 粗 - 光轨起点、终点沿边框匀速推进,带渐隐拖尾;与输入框边框完全重合,不出现双线 - 设置页内置实时效果示例,随颜色 / 速度 / 粗细联动;系统开启「减少动态效果」时自动停用 - `/soul set` 键值方式修改配置项 - 配置持久化保存 - 配置输入校验:字段白名单、类型、长度上限(昵称/职业 50、介绍 500、自定义指令 2000 字符)、枚举与十六进制颜色校验,非法或超限字段整单拒绝 - 配置更新后同步到所有活动 Agent - 变更检测:仅在影响 Agent 行为的配置实际变化时刷新提示词并注入会话;纯外观配置(输入框光轨)只落盘,不产生注入消息 ## 安装 ```powershell dsh plugin --profile web add dsh-soul dsh plugin --profile web update dsh-soul ``` 插件配置由 `cordis.patch.yml` 提供: ```yaml - insert: - id: soul name: dsh-soul ``` ## 截图 **设置页(关于你 + 特质)** ![设置页上半部分:关于你 与 特质起始](./screenshots/image0.png) **设置页(特质 + 输出语言 + 自定义指令)** ![设置页下半部分:特质、输出语言与自定义指令](./screenshots/image1.png) **`/soul` 命令提示** ![`/soul` 命令自动补全提示与输入框](./screenshots/image2.png) **`/soul` 命令输出(设置昵称、show、enable、disable、reset)** ![`/soul` 多种命令的输出示例](./screenshots/image3.png) ## 使用 启动 DSH 后,进入设置页面中的「个性化设置」栏目,修改配置并点击「保存设置」。 也可以使用斜杠命令: ```text /soul show 查看当前配置(含确认模式与预设数量) /soul set k=v 修改配置项(如 /soul set style=humorous language=en;光轨:trailColor=#679EFE trailSpeed=fast trailWidth=thick) /soul save <名> 保存当前配置为人设预设 /soul use <名> 应用人设预设 /soul list 查看人设预设(✔ 标记当前匹配项) /soul del <名> 删除人设预设(delete / rm 别名) /soul confirm 应用待确认的人设变更(确认模式) /soul reject 拒绝待确认的人设变更 /soul reset 重置配置(保留人设预设库) /soul enable 启用个性化设置 /soul disable 禁用个性化设置 /soul 小明 设置昵称 ``` 配置保存后会同步到所有活动 Agent,当前会话下一次请求即可使用最新配置;无实际变化的保存不产生注入消息。 Agent 也可以通过工具 `set_persona` 在对话中直接调整你的人设(昵称、回复风格和语调、特质、回复语言、自定义指令)。模型只会在明确请求改变称呼、语气、风格或语言时调用该工具。开启「人设变更需确认」(`requireToolConfirmation`)后,该工具的修改会以待确认提议返回,需使用 `/soul confirm` 确认或 `/soul reject` 拒绝后才会生效。 ## 配置文件 插件将配置保存到 DSH 的用户数据目录,文件名为: ```text soul-config.json ``` 配置示例: ```json { "enabled": true, "nickname": "小明", "occupation": "软件工程师", "bio": "对编程和技术感兴趣", "style": "professional", "language": "zh", "customInstructions": "请保持简洁,优先给出结论。", "requireToolConfirmation": false, "trailEnabled": true, "trailColor": "#679EFE", "trailSpeed": "slow", "trailWidth": "thin" } ``` 人设预设保存在同一文件的 `personas` 字段:名称 → 人设字段快照(昵称/职业/介绍/风格/特质/语言/自定义指令)+ `updatedAt`;预设库变更不影响活动配置,使用预设时才应用到配置并同步会话。 输入框光轨字段:`trailEnabled`(是否启用,默认 `true`)、`trailColor`(6 位十六进制颜色,统一大写存储,默认 `#679EFE`)、`trailSpeed`(`slow` / `normal` / `fast`,默认 `slow`)、`trailWidth`(`thin` / `normal` / `thick`,默认 `thin`)。这四个字段属纯外观配置,只落盘、不进入 system prompt、不触发会话注入。 字段长度上限:昵称 / 职业 50 字符,介绍 500 字符,自定义指令 2000 字符;颜色必须为 `#rrggbb` 形式。未知字段会被丢弃,非法或超限字段整单拒绝(HTTP 返回 400 与字段级错误明细)。 ## 实现原理 插件通过 `compilePrompt()` 将昵称、风格、语调和自定义指令编译成 system prompt,并注册到 DSH: ```js spCtx.systemPrompt.section({ name: 'soul:persona', order: 0, text: () => compilePrompt(configCache || DEFAULT_CONFIG) }) ``` 配置更新后,插件会遍历所有活动 Agent,使用标准 `UserMessage` 调用 `agent.inject()`: ```js agent.inject(createUserMessage({ content: [{ type: 'text', text: prompt }], source: { kind: 'plugin', plugin: 'dsh-soul', form: 'snapshot', sections: [{ name: 'soul:persona', text: prompt }] } })) ``` `agent.inject()` 会将最新配置放入 Agent 的待处理上下文,在下一次请求中生效;不会主动触发新请求,也不会修改历史消息。 ## 许可证 MIT License