architecture-analysis.md 20 KB

财顾报告Agent MVP 架构分析文档

分析依据:

  • 《财顾报告Agent-技术架构与选型.md》
  • 《财顾报告生成智能体后端及算法端功能模块描述及其实现思路.md》
  • 《财顾报告智能化生成产品MVP版本需求文档.md》

1. 系统上下文与边界

1.1 系统上下文图

┌─────────────────────────────────────────────────────────────────────────────┐
│                              外部系统/用户                                    │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐              │
│  │ 业务人员  │    │  行内SSO │    │ 工商/风险 │    │ 指标平台 │              │
│  │ (浏览器) │    │          │    │   接口   │    │          │              │
│  └────┬─────┘    └────┬─────┘    └────┬─────┘    └────┬─────┘              │
└───────┼───────────────┼───────────────┼───────────────┼─────────────────────┘
        │               │               │               │
        ▼               ▼               ▼               ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                           财顾报告Agent系统                                  │
│  ┌───────────────────────────────────────────────────────────────────────┐ │
│  │                         前端 Web (React SPA)                          │ │
│  │     向导/状态看板  ──  大纲确认树  ──  数据展示/补录  ──  报告预览       │ │
│  └───────────────────────────────────────────────────────────────────────┘ │
│                                    │                                        │
│                                    ▼                                        │
│  ┌───────────────────────────────────────────────────────────────────────┐ │
│  │                    Java业务后端 (Spring Boot)                         │ │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐         │ │
│  │  │GW接入层 │ │ORCH编排 │ │ HITL    │ │ SVC服务 │ │ REPO    │         │ │
│  │  │- 鉴权   │ │- 状态机 │ │- 卡点   │ │- 取数   │ │- 持久化 │         │ │
│  │  │- 租户   │ │- 任务   │ │- 确认   │ │- OSS    │ │- 查询   │         │ │
│  │  │- 限流   │ │- MQ     │ │- 版本   │ │- 导出   │ │         │         │ │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘         │ │
│  │                              │                                        │ │
│  │                              ▼                                        │ │
│  │                       ┌─────────────┐                                 │ │
│  │                       │   ADAPTER   │                                 │ │
│  │                       │ 算法适配层   │                                 │ │
│  │                       └──────┬──────┘                                 │ │
│  └──────────────────────────────┼───────────────────────────────────────┘ │
│                                 │                                          │
│                                 ▼                                          │
│  ┌───────────────────────────────────────────────────────────────────────┐ │
│  │                   Python算法服务 (FastAPI)                            │ │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐                     │ │
│  │  │   AG    │ │   RAG   │ │ PROMPT  │ │   MW    │                     │ │
│  │  │- L1大纲 │ │- 解析   │ │- Jinja  │ │- 路由   │                     │ │
│  │  │- L2大纲 │ │- 检索   │ │- 校验   │ │- 重试   │                     │ │
│  │  │- 段落   │ │- 拼装   │ │- 版本   │ │- 降级   │                     │ │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘                     │ │
│  └───────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
        │                               │               │
        ▼                               ▼               ▼
┌───────────────┐               ┌───────────────┐ ┌───────────────┐
│    模型集群    │               │   运行支撑    │ │   对象存储    │
│ (OpenAI兼容) │               │ - MySQL/PostgreSQL │   (OSS)    │
│               │               │ - Redis       │ │               │
│               │               │ - MQ(可选)    │ │               │
└───────────────┘               └───────────────┘ └───────────────┘

1.2 系统边界定义

边界 包含内容 排除内容
系统内 任务管理、大纲生成与确认、数据准备、报告生成、结果导出 -
系统外(对接) 行内SSO、工商接口、风险接口、指标平台、模型集群 -
本期不建 - 知识配置端、数据资源配置端、权限管理中心

2. 核心模块与职责

2.1 模块职责矩阵

模块 核心职责 关键设计决策
GW接入层 鉴权、租户上下文、审计、限流 对接行内SSO,Token透传;租户ID贯穿全链路
ORCH编排 任务状态机、阶段驱动、MQ异步化 状态为真相源;Python为无状态执行器
HITL卡点 大纲确认持久化、数据确认持久化、版本追溯 确认权在Java侧,Python不拥有写权限
SVC服务 取数编排、OSS集成、行内HTTP调用、导出 结构化指标走Java,非结构化走Python RAG
REPO持久层 任务/大纲/数据包/报告落库 租户列强制存在,预留归档策略
ADAPTER适配 HTTP/gRPC调用Python、契约校验、错误映射 禁止前端直连Python,所有流量经Java
AG算法核心 L1/L2大纲生成、段落生成 分阶段调用,单次不堆砌全篇材料
RAG检索 文档解析、分块、向量检索、拼装 按task_id隔离集合
PROMPT模板 Jinja模板管理、JSON Schema校验 模板版本化,与需求文档逐条对齐
MW模型网关 多模型路由、重试降级、可观测 OpenAI兼容,本地并发保护

2.2 关键调用链

任务创建链:
前端 → GW → ORCH(创建任务) → REPO(落库) → 返回taskId

大纲生成链:
前端 → GW → ORCH(触发生成) → ADAPTER → Python/AG → MW → 模型
  ← 返回结构化JSON ← 校验 ← 落库 ← 状态更新

大纲确认链:
前端(树状操作) → GW → HITL(持久化确认结果) → ORCH(推进状态)

数据准备链:
ORCH → SVC(并行取数: 行内API/指标/RAG) → REPO(按知识单元落库)

报告生成链:
ORCH → ADAPTER → Python/AG(逐段生成) → MW → 模型
  ← 单段结果 ← 拼接 ← 完整报告 ← 落库

3. 关键接口与数据流

3.1 Java ↔ Python 接口契约

# 一级大纲生成
POST /v1/outline/l1
Headers:
  X-Tenant-Id: {tenant_id}
  X-Task-Id: {task_id}
  X-Trace-Id: {trace_id}
  Authorization: Bearer {service_token}
Body:
  report_type: string
  agreement_amount: number
  enterprise_type: string
  # ... 其他任务输入
  chapter_candidates: [] # 一级章节候选清单
Response:
  chapter_results: [
    {chapter_id, chapter_name, paragraph_count_enum, reason}
  ]
  overall_logic: string

# 二级大纲生成  
POST /v1/outline/l2
Body:
  chapter_name: string
  chapter_no: string
  chapter_paragraph_count_enum: string
  # ... 一级章节结果
  leaf_chapter_candidates: [] # 末级章节候选
Response:
  chapter_name: string
  chapter_no: string
  chapter_structure: [
    {node_id, node_name, node_no, node_level, parent_node_id, source_type, source_candidate_name, is_selected}
  ]
  structure_logic: string

# 段落生成
POST /v1/section
Body:
  knowledge_unit_id: string
  report_type: string
  # ... 任务基础信息
  paragraph_logic: string # 段落撰写逻辑
  paragraph_position: string # 段落定位
  data_package: object # 数据包
  template_type: string # 四级模板类型
Response:
  generated_text: string
  usage: {prompt_tokens, completion_tokens}

3.2 数据流示意图

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  任务输入    │────▶│  一级大纲    │────▶│  二级大纲    │
│  (结构化)   │     │  (结构化)   │     │  (树状结构)  │
└─────────────┘     └─────────────┘     └──────┬──────┘
                                               │
                                               ▼ 人工确认
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  完整报告    │◀────│  段落生成    │◀────│  最终知识单元│
│  (文本拼接) │     │  (逐段生成) │     │  清单确认   │
└─────────────┘     └─────────────┘     └──────┬──────┘
                                               ▲
                                        ┌──────┴──────┐
                                        │  数据准备    │
                                        │ (多源聚合)  │
                                        └─────────────┘

4. 数据与一致性策略

4.1 核心数据对象

对象 存储位置 一致性要求 说明
报告任务 MySQL 强一致 主对象,贯穿全生命周期
任务状态 MySQL 强一致 状态机驱动,原子更新
一级大纲结果 MySQL 最终一致 含原始输出和解析结果
最终知识单元清单 MySQL 强一致 经人工确认,后续执行依据
知识单元数据包 MySQL 强一致 自动获取+人工补录合并
单段生成结果 MySQL 最终一致 原子段落,支持问题排查
完整报告 MySQL/OSS 最终一致 过大时可存OSS
上传材料 OSS 最终一致 预签名URL访问
RAG向量索引 向量库 最终一致 按task_id隔离

4.2 一致性策略

┌─────────────────────────────────────────────────────────────┐
│                      一致性决策矩阵                          │
├─────────────────────────────────────────────────────────────┤
│  场景                    │  策略                            │
├─────────────────────────────────────────────────────────────┤
│  状态推进+结果写入        │  同一事务或Outbox模式            │
│  MQ消息+DB写入           │  本地事务表+异步发送 或 事务消息   │
│  Java调用Python          │  重试幂等,Python无状态          │
│  缓存(进度等)            │  最终一致,可接受短暂不一致       │
│  多副本OSS              │  由OSS保证最终一致               │
└─────────────────────────────────────────────────────────────┘

4.3 租户隔离策略

  • 强制租户列:所有业务表必须包含 tenant_id
  • 索引设计:复合索引 (tenant_id, task_id)(tenant_id, created_at)
  • 查询拦截:ORM层或MyBatis插件自动注入租户条件
  • 存储隔离:OSS路径按 /{tenant_id}/{task_id}/ 组织

5. 非功能需求

5.1 安全需求

安全域 需求 实现建议
认证 对接行内SSO JWT Token验证,刷新机制
授权 服务间调用认证 mTLS或HMAC签名
数据脱敏 敏感字段不下传Python Java侧脱敏,Python消费OSS只读链接
审计 关键API访问记录 AOP切面+异步写审计表
传输安全 全链路TLS 证书由基础设施统一管理

5.2 性能需求

指标 目标值 备注
任务创建 < 500ms 不含文件上传
大纲生成(一级) < 30s 单次LLM调用
大纲生成(二级) < 60s 多章节循环调用
单段生成 < 30s 段落级调用
整篇报告生成 < 5min 20-30段,可异步
页面加载 < 2s 大纲树、数据展示页
并发任务 10+ MVP阶段

5.3 可观测性

┌─────────────────────────────────────────────────────────────┐
│                      可观测性分层                            │
├─────────────────────────────────────────────────────────────┤
│  日志层                                                      │
│    - TraceId贯穿全链路 (前端 → Java → Python → 模型)        │
│    - MDC上下文:tenantId, taskId, userId, stage              │
│    - 结构化日志,便于聚合检索                                 │
├─────────────────────────────────────────────────────────────┤
│  指标层                                                      │
│    - Java: JVM、HTTP接口、DB连接池、Redis                    │
│    - Python: 请求数、延迟、Token消耗、模型路由分布            │
│    - 业务: 任务阶段分布、生成成功率、各阶段耗时               │
├─────────────────────────────────────────────────────────────┤
│  链路层                                                      │
│    - OpenTelemetry或SkyWalking                              │
│    - 关键Span: 大纲生成、段落生成、数据获取                   │
├─────────────────────────────────────────────────────────────┤
│  告警层                                                      │
│    - 核心接口P99延迟突增                                      │
│    - 模型调用失败率>5%                                        │
│    - 任务状态卡住(超过预期时间未推进)                          │
└─────────────────────────────────────────────────────────────┘

6. 技术风险与 ADR 摘要

6.1 关键技术决策(ADR)

ADR-001: Java + Python 双端架构

背景:业务后端(Java)与算法端(Python)的分工边界

决策:采用 Web → Java → Python → Java 的调用链,Python不直接暴露给前端

理由

  • 与行内常见分工一致
  • 安全、网关、审计统一落在Java
  • Python专注智能计算,不替代Java做持久化

后果

  • 需要定义清晰的HTTP/gRPC契约
  • Java成为潜在性能瓶颈,需合理设计异步化

ADR-002: 任务状态机以Java为真相源

背景:任务状态分布在Java还是Python

决策:任务状态真相源在Java,Python为无状态执行器

理由

  • 事务、安全、集成主控在Java
  • Python故障不影响任务状态一致性
  • 便于后续扩展和审计

后果

  • Python需幂等设计
  • Java需管理异步调用状态

ADR-003: 分段生成而非长文本生成

背景:报告生成方式选择

决策:按知识单元逐段生成,最后拼接

理由

  • 适配行内模型能力约束
  • 降低单次调用失败影响范围
  • 预留段落级重生成扩展点

后果

  • 段落间衔接一致性挑战
  • 总生成时间较长,需异步化

ADR-004: 结构化大纲输出

背景:大纲生成输出格式

决策:强制JSON Schema结构化输出

理由

  • 便于程序解析和后续处理
  • 支持人工确认界面生成
  • 降低模糊性

后果

  • 提示词工程复杂度增加
  • 需要校验和重试机制

6.2 技术风险清单

风险ID 风险描述 可能性 影响 缓解措施
R-001 模型输出JSON解析失败 Schema校验+重试+降级提示
R-002 长耗时生成导致超时 MQ异步化+进度推送+可查询状态
R-003 Python服务故障影响生成 健康检查+熔断+优雅降级
R-004 行内接口响应慢/故障 超时配置+熔断+Mock数据
R-005 多租户数据隔离失效 ORM层强制注入+审计对账
R-006 敏感数据泄露 脱敏+权限控制+审计日志

文档版本:MVP阶段 最后更新:2026-03-31