

时间范围:正文主体为 2026 年 4 月 29 日 — 5 月 10 日的 V2 改进;5 月 11 日 在工程侧完成 V2 文档与 Runner 收口归档,并合入 Text2SQL 防漂移:YAML 值域与 DISTINCT 探针联动(见 §二第 6 节续篇)。下文「整体进度」与《项目设计大纲》里程碑对齐说明。 依据:ChatBI V2 规格体系(总规目标、事件策略、验收与回归口径)与 《项目设计大纲》 中的 V1 / V2 / V3 版本分层与交付边界——「已交付」与「下一版规划」不混写。
V1 本质是 「规则路由 + 固定分支」:能跑通 RAG、Text2SQL 和流式输出,但遇到复杂问题时,决策不可解释、多步协作弱、失败只能报错。V2 在规格里定下的方向可以概括成五句话:
《项目设计大纲》里与之对齐的原则是:里程碑可核对、对外叙事不自相矛盾——V2 清单只写 本里程碑内已落地 的能力;企业级权限、语法级 SQL 防护、熔断限流、多租户等,明确放在 V3 / V4 规划,不提前算进 V2「已交付」。


技术点归纳:SSE 不仅是「把字符串推出去」,而是 背压、保活、序列化、兼容旧数据 的组合题。


**values** 表示库内枚举真值,**synonyms** 把口语映射到真值,便于评审与 diff,而不是把整本业务词典塞进一段 prompt。与下文 DISTINCT 探针的并集配合见 §8(5 月 11 日补充)。
说明(与 5 月 11 日关系):5 月 10 日已完成 L0~L6 与大量留证、任务归档 的可讲述版本;5 月 11 日 完成 V2 文档验收归档与索引封卷。对外可一句话概括:「能力与分级验收在 5 月 10 日已闭环;文档与归档在次日收口。」 与《项目设计大纲》中的 V2 里程碑结点 一致。
与《项目设计大纲》中 Text2SQL 防漂移 / 可观测 同一脉络:在 V2 里程碑封卷日 与 子阶段 SSE 耗时、结构化观测日志、HTTP 重试 等同一波工程合入;其中 「DISTINCT 与 YAML 值域并集」 对应封卷日的 B-PR2 级交付口径。
自然语言问数时,大模型最容易在 枚举类字段 上「编一个看起来像的值」——仅靠 YAML 闭集,库侧真实枚举一变就漂移;仅靠模型自由发挥,又 不可审计。做法是 两层真值并成一层提示:
**values**:业务认定的 库内枚举真值。**synonyms:口语 → 真值**,探针采不到的新说法仍靠人工或流程补,不把同义词交给模型瞎造。**SELECT DISTINCT … LIMIT N** 的 只读采样(需 显式开关 + 列清单,避免全表扫)。**values 做并集去重**,再按 字典序 写回给模型的「可取值提示」。LIMIT 时 不是数学闭集——避免把「采样截断」误当成「全世界只有这几个值」。

结合规格中的 V1→V2 目标 与 《项目设计大纲》 的 里程碑划分,可用下面这张表对外说明(勾选表示 截至 5 月 10~11 日已在当前工程中落地):
能力块 | 状态 | 备注 |
|---|---|---|
V1:RAG / Text2SQL / 规则路由 / SSE | ✅ 已完成 | 产品基座 |
V2:ReAct + 工具 + 失败回退 / 门控 | ✅ 已完成 | 含软超时语义修正(避免多步死循环) |
V2:LLM 意图 + 超时/低置信降级 V1 | ✅ 已完成 | 含评测与缓存可观测 |
V2:多轮记忆与落库、过程事件契约 | ✅ 已完成 | 含跨端契约与 CI 门禁思路 |
V2:增量流式 + 双栏时间线 | ✅ 已实现 | 协议版本开关,旧客户端可不退步 |
V2:多轮语义承接 + 值域提示数据面 | ✅ 基线已交付 | 5 月 9 日前后:YAML 列值域与多轮 grounding 基线;5 月 11 日:DISTINCT 探针与 YAML 并集合入,与防漂移同一叙事。澄清策略、DISTINCT 列级节能策略全文等仍按企业 Gap 与 V3 欠债规划,不在此表夸大 |
企业级:RBAC、语法级 SQL 防护、熔断限流、多租户 | 📋 V3 / V4 规划 | 与《项目设计大纲》中的 下一版范围 一致 |
坑 | 现象 | 解决办法(可写进复盘/分享) |
|---|---|---|
长连接假超时 | Agent 或落库阶段很久不发字节,网关先断 | 保活帧 + 重 IO 异步化,主线程专注 emit |
流式收尾偶发崩溃 | 结束包处理用到未绑定变量、或类型不能 JSON 化 | 收尾逻辑单测固化;对结果表做 安全序列化 |
Strict 模式双写 | 开发态正常、Strict 下 transcript 重复 | 不要在同一状态更新函数里混写副作用;flush 后再读已提交状态;列表 key 不用纯内容当 key |
评测拖垮流水线 | 环境误开真实大模型评测,全量测试卡死 | 测试夹子里优先清理意图评测相关环境变量;真实评测改 手动或独立任务 |
契约校验误报 | 前端为布局加的辅助字段被当成「后端契约缺失」 | UI 键从强校验集合剔除(启发式 + 白名单),保留真字段门禁 |
「无检索命中就转 SQL」 | 浪费 SQL、体验差甚至有风险 | 规格里 Gated:只有结构化意图信号足够才允许转 SQL,否则追问或直接答 |
Agent 软超时误伤多步 | 每步都强制降级成规则路由,RAG 路径打转 | 仅在尚未执行任何工具前允许超时降级,后续步交给失败处理器 |
旧环境表结构落后 | 新列不存在导致插入失败 | 检测列 → 降级插入路径,关键诊断信息塞进已有 JSON 元数据 |
枚举闭集幻觉 | 模型编造库里没有的取值,或 YAML 滞后于真实库 | YAML 字典 + DISTINCT 探针并集写提示;探针失败则 仅 YAML;新口语走 synonyms 补录 |
DISTINCT 拖慢或拖死循环 | 探针无上限、或与主循环同线程执行 | 白名单列 + LIMIT;探针与重 IO 异步化,失败 降级 不阻断主链路 |
values + synonyms);DISTINCT 探针与字典 并集写提示、失败降级;与 单条 SQL 超时、后续 子阶段耗时观测 同一防漂移叙事(澄清与列级节能等 完整策略 仍归 V3 / 企业 Gap)。这三周的本质,不是「多接了几个 API」,而是把 ChatBI 从 能回答 推进到 能解释自己为什么这样答、失败时怎样换路、怎样在流式与网关上活下来、怎样用验收表证明不是 Demo。
若只收束三句话给读者: