跳到主要内容

第二十七节 — 代码仓位置映射

这一节回答:本架构文档的概念在 FinBayes 工程实施仓里的物理位置是什么?章节里的"子系统 / 工具 / 状态对象 / Prompt"具体落在哪个目录哪个模块?

工程实施仓与本仓的关系

角色内容
本仓(Labs-FinTecAI)知识库 + 治理库战略 / 架构 / ADR / 提案 / 调研
FinBayes 工程实施仓工程代码 + 测试 + 运行配置runtime / 工具实现 / 测试 / CI / 部署脚本

两仓严格分离(详见 CLAUDE.md "工程执行产物不进本仓")。本架构文档(本仓)是契约事实源,工程实施仓的代码必须追溯到本架构文档某章节。

工程实施仓的物理路径由工作流维护者维护,不写入本仓(路径约束详见本仓 CLAUDE.md)。本章用抽象路径表达映射,工程实施仓内的实际目录名按 Python 项目惯例。


顶层目录约定

工程实施仓采用 Python 标准 src layout

finbayes/ # 工程实施仓根
├── src/finbayes/ # 主代码(包根)
├── tests/ # 测试
├── evals/ # 评估数据集 + 评估运行器
├── prompts/ # Prompt 资产(YAML / 模板)
├── migrations/ # State Store schema migration 脚本
├── configs/ # 配置模板(用户实际 config 在 OS 用户目录)
├── scripts/ # 工具脚本(备份 / 诊断 / 等)
├── docs/ # 工程实施仓自己的运维文档(不重复本仓)
└── .github/ or .ci/ # CI 配置

关键约定

  • 业务代码全部在 src/finbayes/(不在仓根散落)
  • 测试与代码 1:1 镜像(tests/test_<module>.py
  • 评估资产与测试分开目录(评估是独立的运行模式,详见 CHAP-21)

子系统映射(CHAP-09 6 子系统)

子系统抽象路径关键模块
Input / Output Pipelinesrc/finbayes/io/entries/(CLI/TUI/WebAPI/MCP/Channel 各子模块)/ boundary.py(边界 hook)/ normalize.py(输入归一化)/ formatter.py(输出格式化)/ stream.py(流式输出)
Task Orchestrationsrc/finbayes/orchestration/task.py(task 对象 + 生命周期)/ dispatcher.py(任务分发)/ function_calling.py(LLM Function Calling 集成)/ clarify.py(clarify 工具)
Evidence + Synthesissrc/finbayes/cognition/evidence/(证据归一化 + EvidencePacket)/ synthesis/(综合层)/ self_consistency.py(多采样)/ schema.py(输出契约)
State Managementsrc/finbayes/state/store.py(State Store 抽象)/ session.py / watchlist.py / judgment.py / profile.py / candidate.py(两步写入)/ audit.py(审计 trail)
Capability Registrysrc/finbayes/capabilities/registry.py(工具注册 + 校验)/ tools/(各工具实现的子目录)/ schema.py(工具元数据)
Provider Adapter Poolsrc/finbayes/providers/adapter.py(统一接口)/ llm/(OpenAI compatible / Anthropic / DeepSeek / Ollama / 等)/ data/(外部数据 Provider)/ readiness.py(探测)/ routing.py(task_routing)

业务对象映射(CHAP-04 7 个 First-Class 概念)

概念Pydantic 模型路径持久化表
Sessionsrc/finbayes/state/session.py:Sessionsessions
Watchlistsrc/finbayes/state/watchlist.py:Watchlistwatchlist_objects
Judgment Recordsrc/finbayes/state/judgment.py:JudgmentRecordjudgment_records
Dynamic Profilesrc/finbayes/state/profile.py:DynamicProfiledynamic_profiles
State Candidatesrc/finbayes/state/candidate.py:StateCandidatestate_candidates
Fin Objectsrc/finbayes/state/fin_object.py:FinObjectfin_objects
Tasksrc/finbayes/orchestration/task.py:Task(内存为主 + 审计 trail)

关键约束

  • 业务对象 schema 用 Pydantic v2(详见 ADR-008 待)
  • schema 字段变化必须走 CHAP-19 演化策略
  • 业务对象互引用通过 ID(不直接嵌入对象,避免循环 ref)

状态机映射(CHAP-11 6 个状态机)

状态机实现位置
Session 生命周期src/finbayes/state/session.py:SessionState
Task 生命周期src/finbayes/orchestration/task.py:TaskState
TaskGroup 生命周期src/finbayes/orchestration/task_group.py:TaskGroupState
Judgment Record 生命周期src/finbayes/state/judgment.py:JudgmentState
State Candidate 生命周期src/finbayes/state/candidate.py:CandidateState
Provider Readinesssrc/finbayes/providers/readiness.py:ProviderReadinessState

Fin Object 与 Watchlist 没有独立状态机(详见 CHAP-11 开篇说明)—— Watchlist 状态由 StateCandidate + watchlist_objects 表承载,Fin Object 仅 created/archived 标记。


数据存储映射(CHAP-15 5 类数据)

数据类别物理位置实现模块
State StoreOS 数据目录 SQLite 文件src/finbayes/state/store.py + migrations/
CacheRedis 或内存 LRUsrc/finbayes/cache/
Config StoreOS 配置目录 YAMLsrc/finbayes/config/
Credential StoreOS Keychainsrc/finbayes/security/credentials.py
Audit TrailSQLite 同库不同表src/finbayes/state/audit.py

关键约束

  • 用户实际数据不在工程实施仓 —— 仓内只有 schema 与代码,运行时数据在用户机器的 OS 标准目录(CHAP-14)
  • migrations/ 内的脚本编号严格递增(如 001_initial.sql / 002_add_audit_trail.sql

通信协议映射(CHAP-16)

协议层实现位置
进程内(Python 调用)各子系统间直接 import
CLI 入口src/finbayes/io/entries/cli/
TUI 入口src/finbayes/io/entries/tui/
Web API + WebSocketsrc/finbayes/io/entries/web/
MCP Serversrc/finbayes/io/entries/mcp/
Channel Adaptersrc/finbayes/io/entries/channels/(按平台分子目录)
LLM Provider HTTPsrc/finbayes/providers/llm/ 各 adapter

边界与安全映射(CHAP-17)

约束实现位置
输入边界 hooksrc/finbayes/io/boundary.py
凭证识别规则src/finbayes/security/credential_patterns.py
输出端凭证样式扫描src/finbayes/io/output_filter.py(ADR-010 决策后定)
执行类工具注册拒绝src/finbayes/capabilities/registry.py:register_tool
用户数据隔离(user_id)src/finbayes/state/store.py 查询层
TLS 强制src/finbayes/providers/http_client.py

可观测性映射(CHAP-18)

资产位置
审计 trail 写入器src/finbayes/state/audit.py
Task trace ID 管理src/finbayes/orchestration/trace.py
指标采集src/finbayes/observability/metrics.py
用户视角 CLI 命令src/finbayes/io/entries/cli/commands/(含 status / trace / audit / cost / session
日志分级与脱敏src/finbayes/observability/logging.py

Prompt 资产映射(CHAP-19 + ADR-009 待)

混合策略下的路径约定:

Prompt 类型位置
System Prompt(策略 A 进代码仓)prompts/system/
任务模板(策略 A)prompts/task_templates/(按任务类型分)
输出契约 schema 关联 prompt(策略 A)prompts/synthesis/
实验性 Prompt(策略 B)prompts/experimental/ + 自描述 delivery_mode: data 字段
Judge Prompt(评估专用)prompts/eval_judges/

关键约束

  • 每个 Prompt 文件有 frontmatter:prompt_id / prompt_version / delivery_mode / author / activated_at
  • 策略 A Prompt 进 Git diff + Review gate 覆盖
  • 策略 B Prompt 在 runtime 启动时加载 + 进审计 trail

测试资产映射(CHAP-20)

测试类型位置
单元测试tests/unit/(与 src/finbayes/ 镜像)
集成测试tests/integration/
端到端测试(快档 Mock)tests/e2e/quick/
端到端测试(真档真 LLM)tests/e2e/real/
降级路径测试tests/degradation/
边界与安全测试tests/boundary/
LLM Mock fixturetests/fixtures/llm/
测试用业务对象 fixturetests/fixtures/state/

评估资产映射(CHAP-21)

评估资产位置
评估数据集(冒烟 / 回归 / 场景 / 抗扰)evals/datasets/(按层分子目录)
评估运行器evals/runner/
Rubric 定义evals/rubrics/
Judge Promptprompts/eval_judges/(与 prompts 共享)
评估结果库(运行时,不在仓)evals/results/(gitignore)
评估报告模板evals/reports/

CI 集成映射

CI 阶段实现
PR:单元 + 集成 + 端到端快档 + 边界 + verify-kb.ci/pr-pipeline.yml
Nightly:含真 LLM + 评估.ci/nightly.yml
Release:完整评估 + 性能基线.ci/release.yml
战略保真度审计脚本scripts/audit_strategy_fidelity.py
契约回归审计脚本scripts/audit_contract_regression.py

配置文件映射(CHAP-14 + CHAP-15)

工程实施仓内只有模板 —— 用户实际配置在 OS 用户目录:

配置模板位置(工程实施仓)运行时位置(用户机)
config.yamlconfigs/templates/config.yamlOS 配置目录(按平台,CHAP-14)
providers.yamlconfigs/templates/providers.yaml同上
task_routing.yamlconfigs/templates/task_routing.yaml同上
ui.yamlconfigs/templates/ui.yaml同上

部署与运行脚本映射

脚本位置
finbayes 入口(CLI)src/finbayes/__main__.py
安装引导(首次初始化)src/finbayes/install/wizard.py
备份与恢复scripts/backup.py / scripts/restore.py
诊断打包scripts/diagnostic.py
Schema migration runnermigrations/runner.py

章节到代码的反向追溯

工程实施仓的代码反向追溯到本架构文档:

机制实现
每个 PR 的描述必须显式引用 CHAP-NN / ADR-NNNOpenSpec 提案要求
每个 module 的 docstring 含章节引用工程实施约定
每个 ADR 的"关联"段含反向 CHAP 列表ADR 模板
章节追踪表(status.md)随实施进展更新工作流维护者职责

工程实施仓的代码不进本仓

关键边界

  • 工程实施代码不进本仓(即使是示例代码段在文档里也只用伪代码 / schema)
  • 运行时数据 / 用户配置 / Controller state / task packet 不进本仓
  • 工程实施仓的本地路径不写入本仓的任何文档(详见本仓 CLAUDE.md)

工程实施仓的物理路径由工作流维护者在本地记录(用户级 memory),不进本仓。


与其他章节的关系

  • 子系统职责定义 → CHAP-09 子系统组件
  • 业务对象定义 → CHAP-04 业务对象与关系
  • 状态机定义 → CHAP-11 状态对象生命周期
  • 数据存储定义 → CHAP-15 数据存储划分
  • 通信协议定义 → CHAP-16 通信协议
  • 边界与安全约束 → CHAP-17 边界与安全
  • 可观测性资产 → CHAP-18 可观测性
  • 演化资产 → CHAP-19 演化与版本管理
  • 测试资产 → CHAP-20 测试体系
  • 评估资产 → CHAP-21 评估闭环
  • 工程协作 → ADR-003 工程实施栈与协作
  • 里程碑产出 → CHAP-25 与里程碑/任务的对应
  • 审计点 → CHAP-26 审计点