feat(history): 按会话范围提示搜索边界与扩大方式 - #1002
Conversation
|
感谢这个 PR!chat_mode 注入的核心机制是对的——fail-closed、类型安全( P1:
复现(复刻真实 daemon cmdPending,带 影响:① 首条发 建议二选一:
另一个非阻断的小点:bare 以上为自动评审的初步意见,仅供参考,最终以维护者审阅为准。再次感谢贡献 🙏 |
|
感谢按建议重做! P1(
另外几处超出建议范围、但方向正确的收敛也确认过了:重启恢复路径新增的 setup-only 分支(空启动契约跨重启同样保住)、 新增的 验证结果(试合并到当前 master tip 后): 唯一待办:需要 rebase(目前 GitHub 显示 CONFLICTING)。分支落后 master 约 82 个 commit,但实际冲突只有 1 处: 以上为自动评审的初步意见,仅供参考,最终以维护者审阅为准。辛苦了 🙏 |
|
先说明:R2( 这次是想请你补充一下使用场景,因为维护者在评审时提了一个更前置的问题:注入 我们顺着这个问题查了一遍会话形态真正影响到的路径,结果是大部分似乎已经被覆盖了:
所以想请教:**你遇到的具体场景是什么?**比如"AI 因为不知道当前是私聊/普通群/话题群,所以做错了 XX"这类实际现象。如果有这样的 case,那这个字段的价值就成立了,我们也会据此改判;如果暂时没有,维护者倾向的方向是拆分——
如果方便的话,欢迎进群直接聊,沟通会快很多: 以上为自动评审的初步意见,仅供参考,最终以维护者审阅为准。感谢你在这个 PR 上的投入 🙏 |
|
感谢补充场景!你说的这个痛点是真实的,也把问题定位得更准了:
顺着这个场景我们查了一遍实现,发现真正的缺口和这个 PR 目前的做法之间有个偏差,想跟你同步一下——痛点不在「模型不知道群类型」,而在「模型不知道该把 history 的搜索范围放多大、以及怎么安全放大」。具体三点: 1) 目前注入的内容没有告诉模型该怎么做 实际渲染出来是这样: 它只声明了「这是话题群」,但没有任何一处提到 2) 更关键:决定搜索范围的是
这两者并不等价:普通群里用 3) 它的返回里已经带了( { "sessionId": "…", "chatId": "oc_…", "scope": "chat", "sessionScope": "chat", "messages": [ … ] }
建议的方向(改动比现在小很多) 在
这样是给已有 JSON 加一个字段,零新 API、不涉及 opening 生命周期;信息也出现在模型正要用它的那一刻,而不是首轮塞进 prompt 等它自行联想。相比之下,为了让 所以想请你考虑调整方向:把 R2 的工程质量本身没有问题( 以上为自动评审的初步意见,仅供参考,最终以维护者审阅为准。 |
|
按上面讨论的方向,我把实现直接做出来了,方便你参考或直接拿走:分支 master...feat/history-scope-hint 改了什么:
判据用 影响面:只在 cmdHistory 输出加一个字段,不改检索逻辑、不动既有 验证: 怎么用都行——你可以 cherry-pick 到本 PR、按自己的想法改文案(提示词具体怎么写你比我们清楚),或者我们单独提一个 PR 走。这个分支我只是推上去供参考,没有开 PR、没有动你的 fork、也不会合码,合不合、怎么合都由维护者定。 如果采用这个方向,本 PR 里 以上为自动评审的初步意见,仅供参考,最终以维护者审阅为准。辛苦 🙏 |
话题会话里模型常只搜话题内消息,而所需上下文在群聊里拿不到;普通群会话 又不清楚能回溯多久。history 返回里已有 sessionScope,但没有一句告诉模型 "当前能不能扩大、怎么扩大",所以模型不会主动用 --scope ambient。 在 history 输出加 rangeHint,按 (sessionScope, effectiveScope) 四种组合给出 可执行提示:话题会话说明只返回话题内并给出 `--scope ambient --limit 20` 及隐私边界;chat-scope 说明返回整群最近 N 条、调大 --limit,并说明 ambient/thread 在此不适用(省掉模型试错报错那一次)。 判据用 sessionScope 而非群的 chat_mode:普通群里开出的话题,群 chat_mode 仍是 group 但 session 是 thread-scope,按群类型推断会得出"可以搜整群"的 错误结论;cmdHistory 里两处 --scope 门本身也是按 isChatScope 判的。提示放在 工具返回而非首轮 prompt,信息出现在模型正要用它的那一刻,且无需额外 chat.get 调用。 措辞只描述模型能观测到的现象:daemon 侧的开话题指令在拼 prompt 前已被剥离, 模型从未见过该 token,写进提示等于给一条它无法执行的指令;因此改用症状描述 (话题内容不足以说明任务背景、出现没有出处的指代或结论),并加断言防回归。 影响面:仅 cmdHistory 输出新增一个字段,不改检索逻辑、不动既有 --scope 门, 其它 CLI / 后端 / 会话类型不受影响。 验证: - bun run build 通过(tsc 0 错) - 新增 test/history-range-hint.test.ts 8 项全绿;与 builtin-skills / dispatch / bots-list / topic-root-context 一起跑 5 文件 130 项全绿 - 实跑本机 chat-scope 会话确认 rangeHint 正确下发;四种组合逐一驱动编译产物 校验文案 - 反向变异 4 组均转红:删 thread 支的 ambient 指引(1 红)、把分支合成同一句 (4 红)、去掉隐私边界那句(1 红)、把开话题指令措辞写回提示(1 红)
`ai.routing.intro` / `ai.shell.intro` / `ai.followup.reminder_hook` 原文写死 「你在飞书话题群中」,但同一套提示也会下发给单聊和普通群 chat-scope 会话, 在那两种形态下这句话是错的。改为中性表述「飞书(Lark)会话」。 影响面:仅三条 i18n 文案(zh/en 各三条),不改任何逻辑;所有 CLI 与会话 类型共用这套提示,改后在话题群下语义不变、在单聊/普通群下不再误导。 验证:bun run build 通过;仓库内无测试断言旧文案。
09a608c to
811e528
Compare
|
经维护者确认方向后,我把本 PR 的分支直接更新为按 保留了你的成果:修正固定提示「你在飞书话题群中」误导表述那部分单独成一个 commit,作者署名仍是你( 移除的部分: 你提的痛点用另一种方式解决了: 你原来的 R2 实现( 现交由复审确认后由维护者决定合入。以上为自动评审流程的一部分,最终以维护者审阅为准。感谢你在这个问题上的投入 🙏 |
|
🚀 Released in v3.18.1 |
背景
话题会话里模型常常只搜索当前话题内的消息,而任务真正需要的上下文在话题之外的群聊里,于是它拿着不完整的信息作答;普通群 chat-scope 会话又不清楚能回溯多久。
botmux history的返回里其实已经有sessionScope,但没有一句话告诉模型「当前能不能扩大范围、怎么扩大」,所以模型不会主动去用--scope ambient。本 PR 原先的做法是在首轮 prompt 的
<chat_context>里注入<chat_mode>。评审过程中确认该方向不合适,已调整:--scope ambient),模型拿到「这是话题群」也学不会扩大搜索范围,痛点依旧;sessionScope(会话自身范围),不是群的chat_mode:普通群里开出的话题,群chat_mode仍是group而 session 是 thread-scope,按群类型推断会得出「可以搜整群」的错误结论。cmdHistory里两处--scope门本身也是按isChatScope判的;chat_mode需要每次群聊首轮额外打一次chat.get(getChatModeStrict有意不读缓存),落在全 fleet 热路径上;而sessionScope来自 session 自身状态,零 API 调用。变更
1.
botmux history输出新增rangeHint(src/cli.ts)——按(sessionScope, effectiveScope)四种组合给出可执行提示:botmux history --scope ambient --limit 20,并附隐私边界提醒--limit;明确--scope thread/--scope ambient在此不适用--scope ambient结果--scope chat措辞只描述模型能观测到的现象:daemon 侧的开话题指令在拼 prompt 前已被剥离,模型从未见过该 token,写进提示等于给一条它无法执行的指令;因此触发条件改用症状描述(话题内容不足以说明任务背景、出现没有出处的指代或结论),并加了断言防止回归。
提示放在工具返回而非首轮 prompt:信息出现在模型正要用它的那一刻,不占用首轮注意力预算,也不需要额外 API 调用。
2. 修正固定提示中「所有飞书会话都是话题群」的误导表述(
src/i18n/{zh,en}.ts)——ai.routing.intro/ai.shell.intro/ai.followup.reminder_hook原文写死「你在飞书话题群中」,但同一套提示也会下发给单聊和普通群 chat-scope 会话,在那两种形态下是错的,改为中性的「飞书(Lark)会话」。原先的
<chat_mode>注入、pendingOpeningKind生命周期改造等改动均已移除。影响面
cmdHistory仅新增一个输出字段,不改检索逻辑、不动既有两处--scope门;/repo、选仓卡、重启恢复等路径(原方案为了正确落地需要改这些,风险面明显更大);验证
bun run build通过(tsc 0 错)test/history-range-hint.test.ts8 项全绿;与 builtin-skills / dispatch / bots-list / topic-root-context / codex-app-clean-prompt / prompt-override-injection / customization-store / cli-adapters 合跑 9 文件 582 项全绿rangeHint正确下发;四种组合逐一驱动编译产物校验文案