Files
DevFlow/docs/02-架构设计/专项设计/aichat上下文管理-派工与决策单-2026-09-29.md
lxy 3861e13b32 文档: 决策单拍板留痕并落 DRY 走查报告
D2 黑名单放行拍板补留痕,relay token 不引具体值
DRY 技术债 Top12 清单落专项设计,高风险名单一项本轮收口
2026-10-01 08:28:08 +08:00

10 KiB

aichat 上下文管理 — 派工与决策单

日期: 2026-09-29 | 统筹: AI-Ops | 编码: devflow bot | 决策: 用户 依据: 《05-代码审查/aichat知识库与记忆走查-2026-09-29.md》(代码事实已于 09-29 二次实核,全部成立) 分工约定: 可信度高的批次 devflow bot 直接按单执行;决策卡(C1-C4)等用户拍板后转派工。


一、确定性批次(可信度高,直接派工)

B0 提交固化(前置,最先做)

工作区 22 文件 +699 行(T4/T5 生产侧 + G2 破坏性回环检测 + provider 温度覆盖 + 前端工具卡折叠)已过编译门禁未提交。

  • 操作: 按主题拆分提交(禁一提交混多类型): ①T4/T5 WorkingContext+工作流 DAG 注入 ②G2 破坏性回环检测+温度覆盖 ③前端工具卡折叠与交互
  • 验收: git log --oneline -3 三笔提交各自主题单一;cargo check --workspace 0 错误
  • 风险: 无(纯固化,不改行为)

B1 知识检索关键词化(原 P0-1)

整句 LIKE 命中≈0(crates/df-storage/src/crud/idea_repo.rs:642 用 %末条用户消息全文% 匹配短语标题)。

  • 操作: KnowledgeRepo::search 入口前加关键词抽取(零依赖: 按标点/空白切分 + 停用词过滤 + 长度≥2 保留,取前 5-8 个词),SQL 改多条件 OR(title LIKE ?kw1 OR content LIKE ?kw1 OR ...),任一词命中即入选,reuse_count 排序不变
  • 边界: 关键词抽取放 df-storage 侧纯函数+单测;调用方 knowledge_inject.rs:364-384 传参不变(仍传整句,抽取在 repo 内做,后续语义检索接入时上游复用)
  • 验收: ①cargo test -p df-storage 含新单测(中文句子→关键词列表) ②手动: 取真实会话一条用户消息原文检索,改造前 0 命中的知识现在能命中
  • 回滚: 单函数回退,2 处

B2 视图裁剪补滚动摘要(原 P0-3)

超预算淘汰单元无声丢弃(crates/df-ai/src/context/mod.rs:216-227 只打 context_trimmed 日志)。

  • 操作: 裁剪发生时,把被淘汰单元压成一条滚动补偿摘要(零依赖先做关键词级: 每个被淘汰单元取 user 消息首句+工具名聚合),以 system 附加块注入发送视图(如 [早前摘要] 本会话已处理: ...),不落 session.messages(与"裁剪只动发送副本"铁律一致);后续可升级为 T3 JSON 卡片复用
  • 验收: ①单测: 超预算裁剪后返回视图首部含摘要块,self.messages 全量不变 ②手动: 大会话触发 context_trimmed 日志后,下轮请求 system 含摘要
  • 回滚: 摘要块生成处加开关或删拼接,1 处

B3 存量测试修复(4 个挂)

anthropic_compat::anthropic_full_stream_accumulates_usage(assert usage.is_none() 失败)等 4 个,疑似 6bafdcd 流式 usage 语义变更后断言未同步。

  • 操作: 先核实 4 个失败根因是"断言过期"而非"行为回归",是则同步断言;发现真回归则修复行为并单独说明
  • 验收: cargo test --workspace 全绿
  • 风险: 低(只动测试;若发现真回归先报告再动)

B4 candidate 自动晋升机制(原 P0-2,机制先行)

962 条存量知识全 status='candidate',检索只认 published(idea_repo.rs:651),断链铁证。

  • 操作: ①存量一次性晋升: SQL 将现有 candidate 按 confidence=high 晋升(971 行已有按 confidence 语义排序的先例) ②增量机制: 自动提炼产物 confidence=high 直接 published / medium 保持 candidate+reuse_count≥N 自动晋升 / low 留审核;阈值走配置带开关,默认值等 C3 拍板(未拍板前默认保守: 全部保持现状,只做存量 high 晋升)
  • 验收: 存量晋升后 SELECT status, count(*) FROM knowledges GROUP BY status 分布合理;普通对话自动注入从空转变为有产出
  • 互踩标注: 本批与 B1 同文件 knowledge_inject.rs(不同段: B1 动检索 364-384,本批动提炼/晋升 441+),串行执行,先 B1 后 B4

B5 LLM 知识工具注册(P1,可后置)

tool_registry.rs 73 工具无 knowledge 注册;df-mcp 的 search/insert_knowledge 只服务外部客户端。

  • 操作: tool_registry 注册 search_knowledge/insert_knowledge,实现复用 df-mcp 同逻辑(检索走 B1 改造后的关键词检索;写入产出现有 candidate 通道,受 B4 晋升机制管辖)
  • 验收: agentic 会话内让 agent "查一下关于 X 的知识"能调到工具并返回;cargo test --workspace 绿
  • 依赖: B1(检索质量)、B4(写入通道闭环);建议排在最后

执行顺序: B0 → B1 → B2/B3(可并行,零文件交集) → B4 → B5。每批独立提交,带验收证据。


二、决策卡(决策性问题,等用户拍板)

C1 跨会话召回(L3)走轻还是重

  • 背景: L3 现为零召回(新会话全空),是"丢历史"主观感受最大来源,但完全是空壳无现成代码。
  • 选项: A 轻量 — 项目级记忆: 复用知识表 source_project 字段(已有未用)+会话结束提炼进知识库(B5 工具成为跨会话通道),改动小,1-2 批派工; B 重量 — 对齐 u-claw 分身养成层四层架构(L1 轮内/L2 跨轮/L3 跨会话/L4 跨重启+目标快照机制),体系完整但工程量大数倍,且 u-claw 铁律"L3 召回严禁进 system prompt(走工具按需查)"需一并继承。
  • 建议: 先 A 后 B——A 是 B5 的自然延伸(基建已铺),用 3 个月自用期验证 A 是否够用再决定要不要 B。

C2 语义检索默认开与"数据不出门"定位冲突

  • 背景: 混合检索代码已存在(knowledge_inject.rs:231-287 双信号加权),但 embedding 需调外部 API——把知识内容发出去,与 pivot 定位"本地优先,数据不出门"直接冲突。
  • 选项: A 维持默认关(关键词化后 LIKE 够用,需要语义时用户自行配 embedding); B 引入本地 embedding(如 ONNX 本地模型,零外呼但引依赖+占资源); C 默认开+明确告知(接受数据出门,定位让步)。
  • 建议: A。中文关键词化后 LIKE 命中率可解决大头,先跑起来看真实命中率再议。

C3 candidate 晋升把关策略默认值

  • 选项: A 全自动(high 直接 published,零人工); B 阈值+开关(默认 high 自动/medium 复用晋升,提供保守开关回到全人工); C 保留人工审核为默认。
  • 建议: B。C2 未决前 candidate 质量未经验证,默认值定保守些,开关给激进留门。(B4 机制先行不阻塞,等此拍板定默认值)

C4 图片默认上传外部域名(9-28#17,可用性报告单列)

  • 背景: 图片处理链路默认传外部域名,涉开源边界(工具代码零业务信息铁律)与隐私定位双重问题。
  • 建议: 倾向改手动确认+默认本地处理;需用户对开源边界表态后转派工。

二B、UI/UX 扩展批(2026-09-29 增补,依据《05-代码审查/整体UIUX三维走查-2026-09-29.md》)

三维走查结论: 08-02 基线 P0/P1 已全部修复清零;增量集中在可靠性竞态/假成功、视觉 token 漂移、AI 触点空白。

U 系(可靠性+易用性,确定性高,直接派工)

  • U1 反馈真实性与竞态守卫(走查#1-6+#14+#15,8 条): Knowledge 创建失败仍弹成功 toast(:384 补 if (!r) return)、AuditLog 翻页竞态(:289 补 seq 守卫)、TaskDrawer 切任务慢响应覆盖(:249 捕获 taskId 校验)、GitChanges 双源竞态+三处静默 catch(:352 seq+moduleId 双校验)、回收站 purge 双击(:83 busy 禁用)、灵感状态切换零反馈(:452 补 catch)、FileExplorer 失败仅 console(:464/529/545 补 Message)、Dashboard 故障渲染成空态(:81 消费 store.error 补 banner)。修法模式已给,照抄各页已有守卫先例
  • U2 溢出与可见性(纯 CSS 低风险,#7-10): FilePreview diff 长行改 pre-wrap、TaskDetail/TaskOutputCard 宽表格补 overflow-x、ConfirmDialog 加 overflow-wrap:anywhere、global.css 滚动条色抽 --df-scrollbar token+light 覆写
  • U3 视觉 token 收敛(#11-13): 阶段徽章 6 色(ProjectDetail:1430/ProjectCard:140)、优先级色(Tasks:1247/TaskDetail:877/TaskBatchBar:272)、git untracked #999(GitChanges:671/FilePreview:658)全部对齐已有 --df-* token,延续 9753a6f 收敛工作
  • U4 小清理(易用性 3 条): Tasks.vue:828 alert 换 ConfirmDialog+i18n、FileExplorerDetached 坏参数补错误态、router /dev/x6 加 DEV 守卫
  • 执行顺序: U1 → U2/U3 可并行(文件少交集,U2 动 FilePreview 与 U3 同文件注意先后) → U4 随批。每批 vue-tsc+手动验证对应页面

S 系(智能化触点,接线类确定性高先做)

  • S1 知识库「立即提炼」按钮: 后端/API/store 三层全就绪零调用(knowledge_extract_now 已注册,stores/knowledge.ts:191),Knowledge 收件箱头部加按钮+embedding failed 批量重试入口。纯接线
  • S2 想法批量评估接线: evaluate_ideas_batch(idea.rs:318)闲置,Ideas 过滤栏加「批量评估 pending」,复用 IdeaDetail 渲染。纯接线
  • S3 业务页带上下文开 AI 面板(最大架构缺口): useAiPanel.openWithAugmentation({kind,id}) 预填 @提及+模板,复用 augmentation/resolvers.rs;TaskDetail 先落「AI 分析」首个按钮。中等工作量
  • S4 AI 触点通用组件: 统一入口样式/失败提示/结果卡槽,与 S3 同批落(否则每页复制新样式)

A 系(授权体验,用户需求)

  • A1 「信任所有目录」总开关: check_file_tool_auth(audit/path_auth.rs)读 Settings KV,bypass 开启时 NeedsAuth→Authorized;Settings AI 面板加开关;开启时对话区常驻横幅「授权已放行」防静默裸奔。黑名单保留硬拒(凭据目录自保护,见决策 D2)(0929 后拍板改向:黑名单一并放行,见 D2 留痕)

新增决策卡

  • D1 智能化功能取舍: S 系接线类(S1/S2)已派工;产品类空白待拍板优先级 — 工作流失败 AI 诊断/Dashboard AI 周报(真实进度替换硬编码映射表)/任务推进风险检查/对话转任务草稿/项目健康度。建议先做「Dashboard 进度真实化」(非 AI 也该修,constants/project.ts:52-59 硬编码百分比)再挑 1-2 个 AI 触点
  • D2 授权总开关是否连黑名单一起放行: 建议否(黑名单是 .ssh/.aws/凭据自保护非体验问题);若确要全放,须二次确认+风险自担提示 → 0929 后拍板:改为连黑名单一并放行(体验优先),二次确认+常驻横幅已落地

三、留痕

  • 本单与走查报告、执行计划(上下文管理演进-执行计划-2026-07-20.md,T1-T5)构成同一工作线的三层文档: 设计→诊断→派工。
  • UI/UX 走查依据: 《05-代码审查/整体UIUX三维走查-2026-09-29.md》(三路子代理+主代理抽查核验 4 条属实)。
  • 各批完成后在 docs/todo.md 对应条目销账,验收证据(命令+结果)写进提交 body。