Appearance
反馈学习
插件支持一个本地反馈学习闭环,用于把用户反馈沉淀为可审计的会话级或账号级规则,而不是直接修改模型本身。
设计分层
- 发送快照:保存最近问答,便于回溯
- 显式反馈:例如点赞、点踩
- 隐式不满:例如后续纠错或抱怨
- 会话笔记:仅对当前 target 生效
- 全局规则:按 account 共享
持久化位置
运行时数据写在 storePath 同级目录下的 dingtalk-state/ 中,不应提交到仓库。
常见命名空间包括:
feedback.eventsfeedback.snapshotsfeedback.reflectionsfeedback.session-notesfeedback.learned-rulesfeedback.target-rules
推荐配置
json5
{
"channels": {
"dingtalk": {
"learningEnabled": true,
"learningAutoApply": false,
"learningNoteTtlMs": 21600000,
"learningRuleTtlMs": 2592000000,
"learningAllowManualGlobalRules": false
}
}
}精确回复规则(会绕过模型)
/learn 支持一种"精确回复"规则:当指令形如
text
当用户问"<触发语>"时,必须回答"<固定回复>"时,插件会把触发语与固定回复一起写进 feedback.learned-rules(会话级写入 feedback.target-rules)。此后只要入站文本与触发语逐字匹配,插件直接返回这条固定回复,不经过模型。
需要知道的边界:
- 这类规则只能由 owner 写入。"owner" 指在宿主配置
commands.ownerAllowFrom中列出的 senderId;普通allowFrom管理员不在此列,发命令会被 owner-only 拒绝(先用/learn whoami查 senderId,再由宿主加入该列表) learningEnabled是学习回路的总开关:关闭时既不能写入/修改规则,已存的规则也不会命中(只读与清理命令仍可用,见下节)- 规则默认 30 天后过期(
learningRuleTtlMs,设为0可关闭过期):过期规则既不会被注入 prompt,也不会命中触发语,需要重新发布 - account 级(
/learn global)默认整条链路关闭:写入命令会被拒绝并提示开启方式;即使历史数据里已有 account 级规则,也不会被注入 prompt、不能强制精确回复。设置learningAllowManualGlobalRules: true后才可写入并生效。会话级(/learn here、/learn target、/learn targets、/learn target-set apply)不受此限制;自动学习产生的 account 级规则由learningAutoApply控制,不受该开关影响 - 每次命中都会打日志
[DingTalk][Learning][ForcedReply] ruleId=… scope=… target=…(不含回复正文),便于审计 - 固定回复是逐字返回的,因此不要把凭证、内部地址等内容写进规则
- 作用域优先级与其它学习内容一致(target 规则优先于 account 级规则),见下方"作用域优先级"
开关语义
learningEnabled 是整个学习回路(含精确回复)的总开关:
- 关闭时:规则写入/修改命令(
/learn global|session|here|target|targets|target-set ...)会被拒绝并提示开启方式;已存的规则也不会命中,消息回落到正常的 agent 流程 - 关闭时仍可用:
/learn whoami、/learn whereami、/learn owner status、/learn help、/learn list,以及清理类命令/learn disable <ruleId>、/learn delete <ruleId>(清理只会减少状态,不会增加暴露面) /learn list显示的是实际生效状态,而不只是存储开关:enabled、enabled, not applied (learning disabled)、enabled, not applied (expired)、enabled, not applied (global rules disabled)、disabled- 开启时:命令可写入规则,命中的精确回复会直接返回固定文本
- account 级(
/learn global)另有一层开关learningAllowManualGlobalRules(默认关闭):关闭时写入被拒绝(回复会给出会话级替代命令),历史 account 级规则也被跳过;需要账号级规则时再显式开启
常用命令
/learn whoami/learn whereami/learn here #@# <规则>/learn target <conversationId> #@# <规则>/learn targets <id1,id2> #@# <规则>/learn global <规则>/learn list/learn disable <ruleId>/learn delete <ruleId>
作用域优先级
规则生效顺序通常是:
- 当前会话临时笔记
- 当前 target 规则
- 当前账号全局规则
适用建议
- 默认只采集,不自动注入
- 先手动审核,再提升为更广范围的规则
- 对会影响多人场景的规则,优先使用 target 级而不是全局级