分析依据:
- 《财顾报告Agent-技术架构与选型.md》
- 《财顾报告生成智能体后端及算法端功能模块描述及其实现思路.md》
- 《财顾报告智能化生成产品MVP版本需求文档.md》
┌─────────────────────────────────────────────────────────────────────────────┐
│ 外部系统/用户 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 业务人员 │ │ 行内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(可选) │ │ │
└───────────────┘ └───────────────┘ └───────────────┘
| 边界 | 包含内容 | 排除内容 |
|---|---|---|
| 系统内 | 任务管理、大纲生成与确认、数据准备、报告生成、结果导出 | - |
| 系统外(对接) | 行内SSO、工商接口、风险接口、指标平台、模型集群 | - |
| 本期不建 | - | 知识配置端、数据资源配置端、权限管理中心 |
| 模块 | 核心职责 | 关键设计决策 |
|---|---|---|
| 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兼容,本地并发保护 |
任务创建链:
前端 → GW → ORCH(创建任务) → REPO(落库) → 返回taskId
大纲生成链:
前端 → GW → ORCH(触发生成) → ADAPTER → Python/AG → MW → 模型
← 返回结构化JSON ← 校验 ← 落库 ← 状态更新
大纲确认链:
前端(树状操作) → GW → HITL(持久化确认结果) → ORCH(推进状态)
数据准备链:
ORCH → SVC(并行取数: 行内API/指标/RAG) → REPO(按知识单元落库)
报告生成链:
ORCH → ADAPTER → Python/AG(逐段生成) → MW → 模型
← 单段结果 ← 拼接 ← 完整报告 ← 落库
# 一级大纲生成
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}
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 任务输入 │────▶│ 一级大纲 │────▶│ 二级大纲 │
│ (结构化) │ │ (结构化) │ │ (树状结构) │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
▼ 人工确认
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 完整报告 │◀────│ 段落生成 │◀────│ 最终知识单元│
│ (文本拼接) │ │ (逐段生成) │ │ 清单确认 │
└─────────────┘ └─────────────┘ └──────┬──────┘
▲
┌──────┴──────┐
│ 数据准备 │
│ (多源聚合) │
└─────────────┘
| 对象 | 存储位置 | 一致性要求 | 说明 |
|---|---|---|---|
| 报告任务 | MySQL | 强一致 | 主对象,贯穿全生命周期 |
| 任务状态 | MySQL | 强一致 | 状态机驱动,原子更新 |
| 一级大纲结果 | MySQL | 最终一致 | 含原始输出和解析结果 |
| 最终知识单元清单 | MySQL | 强一致 | 经人工确认,后续执行依据 |
| 知识单元数据包 | MySQL | 强一致 | 自动获取+人工补录合并 |
| 单段生成结果 | MySQL | 最终一致 | 原子段落,支持问题排查 |
| 完整报告 | MySQL/OSS | 最终一致 | 过大时可存OSS |
| 上传材料 | OSS | 最终一致 | 预签名URL访问 |
| RAG向量索引 | 向量库 | 最终一致 | 按task_id隔离 |
┌─────────────────────────────────────────────────────────────┐
│ 一致性决策矩阵 │
├─────────────────────────────────────────────────────────────┤
│ 场景 │ 策略 │
├─────────────────────────────────────────────────────────────┤
│ 状态推进+结果写入 │ 同一事务或Outbox模式 │
│ MQ消息+DB写入 │ 本地事务表+异步发送 或 事务消息 │
│ Java调用Python │ 重试幂等,Python无状态 │
│ 缓存(进度等) │ 最终一致,可接受短暂不一致 │
│ 多副本OSS │ 由OSS保证最终一致 │
└─────────────────────────────────────────────────────────────┘
tenant_id 列(tenant_id, task_id) 或 (tenant_id, created_at)/{tenant_id}/{task_id}/ 组织| 安全域 | 需求 | 实现建议 |
|---|---|---|
| 认证 | 对接行内SSO | JWT Token验证,刷新机制 |
| 授权 | 服务间调用认证 | mTLS或HMAC签名 |
| 数据脱敏 | 敏感字段不下传Python | Java侧脱敏,Python消费OSS只读链接 |
| 审计 | 关键API访问记录 | AOP切面+异步写审计表 |
| 传输安全 | 全链路TLS | 证书由基础设施统一管理 |
| 指标 | 目标值 | 备注 |
|---|---|---|
| 任务创建 | < 500ms | 不含文件上传 |
| 大纲生成(一级) | < 30s | 单次LLM调用 |
| 大纲生成(二级) | < 60s | 多章节循环调用 |
| 单段生成 | < 30s | 段落级调用 |
| 整篇报告生成 | < 5min | 20-30段,可异步 |
| 页面加载 | < 2s | 大纲树、数据展示页 |
| 并发任务 | 10+ | MVP阶段 |
┌─────────────────────────────────────────────────────────────┐
│ 可观测性分层 │
├─────────────────────────────────────────────────────────────┤
│ 日志层 │
│ - TraceId贯穿全链路 (前端 → Java → Python → 模型) │
│ - MDC上下文:tenantId, taskId, userId, stage │
│ - 结构化日志,便于聚合检索 │
├─────────────────────────────────────────────────────────────┤
│ 指标层 │
│ - Java: JVM、HTTP接口、DB连接池、Redis │
│ - Python: 请求数、延迟、Token消耗、模型路由分布 │
│ - 业务: 任务阶段分布、生成成功率、各阶段耗时 │
├─────────────────────────────────────────────────────────────┤
│ 链路层 │
│ - OpenTelemetry或SkyWalking │
│ - 关键Span: 大纲生成、段落生成、数据获取 │
├─────────────────────────────────────────────────────────────┤
│ 告警层 │
│ - 核心接口P99延迟突增 │
│ - 模型调用失败率>5% │
│ - 任务状态卡住(超过预期时间未推进) │
└─────────────────────────────────────────────────────────────┘
背景:业务后端(Java)与算法端(Python)的分工边界
决策:采用 Web → Java → Python → Java 的调用链,Python不直接暴露给前端
理由:
后果:
背景:任务状态分布在Java还是Python
决策:任务状态真相源在Java,Python为无状态执行器
理由:
后果:
背景:报告生成方式选择
决策:按知识单元逐段生成,最后拼接
理由:
后果:
背景:大纲生成输出格式
决策:强制JSON Schema结构化输出
理由:
后果:
| 风险ID | 风险描述 | 可能性 | 影响 | 缓解措施 |
|---|---|---|---|---|
| R-001 | 模型输出JSON解析失败 | 中 | 高 | Schema校验+重试+降级提示 |
| R-002 | 长耗时生成导致超时 | 中 | 中 | MQ异步化+进度推送+可查询状态 |
| R-003 | Python服务故障影响生成 | 低 | 高 | 健康检查+熔断+优雅降级 |
| R-004 | 行内接口响应慢/故障 | 中 | 中 | 超时配置+熔断+Mock数据 |
| R-005 | 多租户数据隔离失效 | 低 | 高 | ORM层强制注入+审计对账 |
| R-006 | 敏感数据泄露 | 低 | 高 | 脱敏+权限控制+审计日志 |
文档版本:MVP阶段 最后更新:2026-03-31