跳到主要内容

第三节 — 架构目标与质量取舍

这一节回答:这个架构在追求什么;冲突时按什么规则取舍。

总体目标

让 FinBayes 实施者(写代码的 AI 助手 / 接手维护的工程师)能够实现的代码:

  1. 不漂移战略白皮书与产品定义文档的不变量
  2. 覆盖产品定义文档要求的全部用户行为
  3. 多入口(CLI、TUI、Web、MCP、Channel)的认知质量与用户体验一致
  4. 未来增加新任务类型 / 新市场 / 新入口时不需要推倒重来

关键质量属性

按对架构决策的影响优先级排序:

优先级质量属性工程上具体做什么
战略保真度每次架构改动过 review gate,双层检查:(a) 机械 grep 检查战略不变量原句仍存在 (b) 人工实质语义核查战略未授权概念的本质内涵未被同义改写 / 结构隐藏 / 英文替换等方式引入。grep 是必要的快速过滤,不是合格判定
认知输出质量综合层产出反方证据 / 关键风险 / 失效条件 / 信息缺口按事实空间生成;画像只影响表达密度,不进入证据筛选;每条认知输出可被重放、对比、追溯(含证据来源、综合路径、Provider 调用),作为后续质量评估的可被验证基础。具体的认知质量验收方法(评估维度、rubric、多评估者机制)属于待定义的工程设计问题,详见 OQ-002 与后续 CHAP-20 / CHAP-21
可演化性跨模块接口显式版本化;任务路由 / 技能 / 数据源 / 大模型 Provider 走注册表查找而非硬编码;与战略未决问题相关的参数走配置
可观测性每次任务执行产出可序列化审计记录(不含凭证类内容);每个降级 / 失败的证据节点带降级原因;用户可见"为什么这么答"线索
响应性多任务并发执行;部分结果流式输出(不等所有内部任务完成才出第一屏);长时间任务异步走
可测试性五层测试:单元(模块内部)/ 契约(跨模块接口)/ 集成(多模块协作)/ 场景抽样回归(FinBayes Case Library,定位质量退化与缺口,内容动态迭代不作为二元门禁)/ 认知质量评估(具体方法待 CHAP-20 / CHAP-21 与产品团队共同定义)
本地优先第一阶段本地部署跑完整体验;本机配置秘密走本机安全存储;状态可落本地文件或嵌入式数据库
健壮性每个外部依赖有降级路径;一个证据节点失败只影响依赖它的下游节点,不阻塞其他任务

冲突时的取舍

冲突情境取舍
战略保真度 vs 实施速度保真度优先
认知输出质量 vs 响应性第一屏先回答用户题眼并标注"反方 / 详细条件还在补充";最终结果必须完整
可演化性 vs 简洁性跨模块接口必须版本化(不可简化);内部实现可简化(单进程优先,不微服务化)
响应性 vs 完整性部分结果先输出 + 最终归并;不允许"等齐了再出"导致用户等待
本地优先 vs 多入口一致性多入口走同一 runtime 接口契约;不为本地特殊化降级共用接口
可观测性 vs 性能第一阶段全量审计 trail;性能问题在后续优化时再讨论降低粒度

第一阶段实施时的具体技术取向

明确这些事项第一阶段这样做(而不是另一种做法):

  • 单进程优先:runtime 在第一阶段单进程实现,不微服务化。多入口(CLI / TUI / Web / MCP / Channel)共享同一 runtime 实例
  • 本地优先:状态落本地文件 / 嵌入式数据库(如 SQLite);不依赖云端 state store
  • 异步走 Python asyncio:多任务并发用异步等待原语(具体细节见 ADR-005 待写)
  • 大模型 Provider 走统一适配层:不直接调用各家 SDK,所有 Provider 通过统一接口接入(具体细节见 ADR-008 待写)
  • 状态写入两步:长期状态对象(关注列表、判断记录、动态画像)的写入分待确认 / 已确认两步(具体细节见 ADR-007 待写)
  • 审计 trail 全量记录:第一阶段每次任务执行的证据 / 综合路径 / Provider 调用全量写审计,性能优化是后续事项

第一阶段不投入优化的事

显式声明这几件事第一阶段不做(避免实施者误优化):

  • 极致低延迟(首屏 100 毫秒以内):认知任务本质需要大模型调用,秒级延迟合理
  • 大规模并发(单实例万级 QPS):第一阶段本地部署优先 + 个人用户量级
  • 跨地域部署 / 跨用户横向扩展 / 数据库分片:远期事项

什么时候开始投入这些优化的判断条件留给运维 / 产品决定,工程架构不预设阈值。