Files
DevFlow/docs/02-架构设计/aichat异步审批构想-2026-06-14.md
绝尘 04032a2a8d 重构: 文档汇总+进度看板+孤儿任务清理脚本+gitignore 噪音排除
- docs/02 架构设计: 新增 aichat审查/异步审批构想/流式渲染调研/generating状态机/密钥迁移健壮性/工作流脚本执行边界/条件表达式引擎/F-07 trait下沉/Agent架构说明/任务推进构想/功能创意池;更新功能决策记录+归档/对抗论证/文档记录规范/经验记录
- docs/03 模块文档: 新增 AI对话引擎/DAG引擎详解;更新 df-knowledge/df-nodes/df-storage/df-workflow/df-ai
- docs/05 代码审查: 新增 全栈审查/全局review/架构审查/近期改动审查/工作区多角度走查/自研memo流式渲染审查
- docs/09 问题排查: 新增 aichat-apikey-401
- docs/INDEX+README 索引同步;docs/todo 待办看板(2026-06-15 汇总)
- PROGRESS.md Sprint 22-25;URGENT.md 加急清单快照(5 项 P0 已全修)
- scripts/cleanup_orphan_tasks.{py,sh} 孤儿任务清理工具
- .gitignore 补 *.broken.bak + tmp/ 噪音排除
2026-06-15 05:14:21 +08:00

3.8 KiB

构想:对话 AI 异步审批 — 2026-06-14

性质:功能升级构想,未实现。记录用户提出的方向 + 可行性评估。

构想

对话 AI 的对话与审批改成异步审批:审批 pending 时不卡住整个对话,用户可继续聊别的,审批挂着随时处理。

痛点:当前同步审批卡住对话

当前审批是同步阻塞模型:

  1. LLM 返回 Medium/High tool_callsprocess_tool_calls(audit.rs:170-191)推 pending_approvals + 占位 tool_result("需要用户审批,等待确认")→ agentic loop return(agentic.rs:184-192),generating 保持 true
  2. 等待期间:session.generating = true → 新 ai_chat_send 直接 Err("AI 正在生成中")(commands.rs:45)→ 前端 sendMessage 把新消息入队(useAiSend.ts:36),streaming = true 输入框变停止按钮。
  3. 用户必须先审批(或 stop)才能继续对话。整个对话被审批阻塞。

典型困扰:AI 提出待审批操作,用户想先问个别的(比如"等等,这个项目之前是不是建过?"),被阻塞,必须先处理审批。

难点分析

异步审批的真正难点不在 UI,而在 agent loop 的语义:

  • 同步模型:LLM 发 tool_call → 占位 tool_result → loop 挂起 → 审批后 tool_result 替换为真实结果 → LLM 据真实结果生成下一步。上下文连贯。
  • 异步模型:若审批 pending 时对话继续,LLM 已基于"占位结果"生成后续 → 审批结果回流时上下文已前进 → 不一致。

核心瓶颈是 AiSession 单例 + generating 单标志互斥(防并发混乱)。异步审批 + 并发对话需要 AiSession 多实例化或 sub-session——正是 aichat-arch-extensibility 记录的"剩四空壳/AiSession 单例未动"部分,属 B 路线。

方案分两档

档位一:轻量 — 跨对话异步(推荐先做)

审批 pending 的对话挂起(释放 generating 锁),用户切到别的对话继续聊,审批在原对话挂着,通过后结果回流原对话。

  • 触及:AiSession 从单例 → 多对话独立状态(每对话一个活跃 loop 槽)。
  • 不触及:同对话内 agent loop 语义不变(同对话内审批仍阻塞)。
  • 复杂度:中等,是 B 路线(AiSession 多实例化)的一部分。
  • 价值:解决"审批时想干别的"主诉求(切对话即可),不破坏 agent 语义。

档位二:完整 — 同对话异步

审批不阻塞同一对话,用户在同一对话里继续发消息,审批通过后工具结果作为新上下文回流。

  • 触及:agent loop 语义重设计——LLM 上下文如何处理"待执行工具"(标记转审批?LLM 基于"已转人工"假设继续?)。
  • 可能形态:审批转独立审批队列/通知中心,对话流遇到待审批工具不阻塞,告知"有 N 个待审批"后继续;审批通过后台执行工具,结果追加为新消息。
  • 复杂度:高,接近重做 agent loop。
  • 风险:LLM 上下文一致性、工具结果时效性、多任务并发安全。

评估

维度 档位一(跨对话异步) 档位二(同对话异步)
解决主诉求 切对话即可继续 同对话继续
架构改动 AiSession 多实例化 agent loop 语义重设计
与 B 路线 一部分 接近独立重做
风险 中(并发状态管理) 高(上下文一致性)
建议 先做 评估后定

建议:作为 B 路线一部分,先做档位一(跨对话异步),需先完成 AiSession 多实例化。档位二待 agent 能力升级时再评估。

关联

  • 触及 aichat-arch-extensibility 记录的 AiSession 单例瓶颈。
  • aichat-roadmap-ab-split B 路线(补决策/并发能力)相关。
  • 当前同步审批的其他问题(审批态 stop 卡死、新建对话破坏 session)见 aichat审查报告-2026-06-14.md H2/H3,异步化时一并解决。