STRUCTURE.md 12 KB

finrep-report 工程目录说明

本仓库为 单仓(Monorepo),聚合 Web 前端Java 业务后端Python 算法 / Agent 三端。前端 只调用 Java 后端;Java 通过 pythonagent 适配层调用 algo 服务。

约定:Java 根包名为 com.yuxin.finrep;Python 包根为 finrep_algo_agent。目录中当前多为占位(.gitkeep),后续可在此结构上添加 package.jsonpom.xmlpyproject.toml 等。


一、frontend/(Web 前端)

面向业务人员的 浏览器 SPA(建议技术栈:React + 企业级组件库)。不直接请求算法端;统一走 backend 提供的 HTTPS API 与 SSE。

子目录 作用
public/ 不参与打包的静态资源:如 favicon.icorobots.txt、固定可缓存的公共文件等。
src/assets/ 需经构建处理的资源:图片、图标、小号字体等(由打包工具优化路径与哈希)。
src/components/ 可复用 UI 组件;其中 common/ 放置与设计系统无关的通用控件(按钮封装、空状态、加载中等)。业务强相关大块可再建 features/ 等子目录(按需扩展)。
src/layouts/ 整体布局壳:顶栏、侧栏、内容区组合;各业务页挂载在布局之下。
src/pages/ 页面级入口:与路由一一对应,例如任务列表、任务向导、大纲确认树、数据确认、报告预览与导出等。
src/routes/ 路由表、路由守卫(登录态、权限)、懒加载页面配置。
src/services/ HTTP / SSE 客户端封装:调用 Java 的 REST、订阅任务进度;集中处理 baseURL、Token、错误码与 TraceId 头(若规范要求)。
src/hooks/ React Hooks:如任务轮询、SSE 连接、表单与向导步骤状态等与 UI 紧耦合的复用逻辑。
src/stores/ 全局或跨页状态(Redux、Zustand、Recoil 等选型待定):当前任务、用户信息、租户上下文等。
src/utils/ 纯函数工具:日期格式化、树数据转换、与后端 DTO 对齐的轻量映射等。
src/styles/ 全局样式、CSS 变量、主题 token;与组件库主题对齐。
src/types/ TypeScript 类型:与后端 OpenAPI 生成或手写对齐的请求 / 响应、枚举、领域 DTO。
tests/ 前端单测 / 组件测(如 Vitest + Testing Library);与 src 目录结构可镜像或按需组织。

二、backend/(Java 业务后端)

Spring Boot 多模块 结构:承载 鉴权、多租户、任务状态机、落库、行内接口、OSS、导出,以及 调用算法服务的 HTTP/gRPC 客户端

2.1 模块总览

模块 作用
finrep-parent 父 POM(后续添加):统一依赖版本、插件、子模块列表。
finrep-common 跨模块通用代码:上下文、异常、工具、常量。
finrep-domain 领域模型与领域语义分包(任务、大纲、数据准备、生成等),不依赖 Web 与具体持久化框架(或仅依赖极少注解,按团队规约)。
finrep-application 应用服务层:编排 / 状态机推进、用例(command/query)、入站/出站端口接口、面向产品的策略(如选默认模型策略的 Java 侧部分)。
finrep-infrastructure 落地实现:数据库、Redis、MQ、对象存储、外部 HTTP、pythonagent、可观测性配置等。
finrep-web 对外 HTTP/SSE:REST 控制器、请求/响应 DTO、安全、全局异常、WebMvc 配置。
finrep-worker 异步消费者(与 MQ 配合):长耗时阶段消费、分布式锁、可选定时补偿。
finrep-contract OpenAPI 等契约openapi/ 下放 YAML/JSON,可供前后端与 Python 对齐(与 Java 代码生成配置配合使用)。
docs/ 后端专项说明(部署参数、环境约定等),与仓库根目录产品文档区分。

2.2 finrep-common 包路径 .../common/

作用
context TenantContextUserContext、traceId 等在请求链路中的承载与 ThreadLocal/传递封装。
exception 业务异常基类、错误码枚举;与 web 层统一异常 advice 对应。
util 通用工具类(字符串、集合、JSON 辅助等)。
constant 全局常量、HTTP 头名称约定、状态枚举与持久化一致时集中定义(或与 domain 协同)。

2.3 finrep-domain 包路径 .../domain/

作用
task 报告任务聚合、任务生命周期、状态机枚举(领域语义层面)。
outline 一级/二级大纲、最终知识单元清单等领域对象与规则(不含 HTTP 与 ORM)。
dataprep 知识单元数据包、数据确认等领域概念。
generation 单段生成结果、完整报告等领域概念。
knowledge 与「知识单元 / 适用范围」相关的领域类型(若与预置配置边界相关)。
tenant 租户/组织值对象、隔离相关领域规则。
shared 域内多处共用的值对象、标识符类型等。

2.4 finrep-application 包路径 .../application/

作用
orchestration 主链路编排:阶段推进、与人工卡点协作、调用出站端口(持久化、MQ、算法客户端)。
command 写用例:创建任务、提交大纲确认、提交数据确认、触发生成等。
query 读用例:任务详情、大纲草稿、数据包展示、报告预览数据等。
service 复杂用例实现类、跨聚合协调(若与 command/query 拆分并行存在)。
policy 应用层策略:例如 Java 侧路由到不同算法接口、租户级功能开关等。
port/in 入站端口:由 webworker 调用的应用服务接口。
port/out 出站端口:持久化、缓存、消息、算法服务、OSS 等由 infrastructure 实现的接口定义。

2.5 finrep-infrastructure 包路径 .../infrastructure/

作用
persistence/entity JPA Entity / 或 MyBatis PO 等,与表结构对应。
persistence/repository 仓储实现:封装 SQL / JPA 访问。
persistence/mapper MyBatis Mapper 接口与 XML(若选用 MyBatis)。
redis 分布式锁、缓存、限流计数、任务进度缓存等。
mq/producer 投递异步任务消息。
mq/consumer 若部分消费逻辑共享;也可仅放在 finrep-worker 由团队二选一。
mq/message 消息体 DTO、Topic/Tag 常量。
integration/http 调用行内 HTTP API(工商、风险、通用网关等)。
integration/metrics 指标平台或统一数据服务客户端。
integration/external 其他外部系统适配(与 metrics/http 并列归类)。
integration/pythonagent 调用 algo(Python) 的客户端:OpenAPI 生成或手写 WebClient/Feign;统一超时、重试、mTLS/Token、TraceId 传递。
storage/oss 对象存储上传/下载/预签名 URL。
config Bean 装配、多数据源、RestTemplate/WebClient 工厂等。
observability 日志 MDC、MeterRegistry、Tracing 与 Java 侧埋点。
resources/db/migration Flyway / Liquibase 脚本目录。

2.6 finrep-web 包路径 .../web/

作用
rest/dto 入参/出参对象;与 OpenAPI 一致。
rest/advice 全局异常、统一响应包装、参数校验错误映射。
sse Server-Sent Events:向浏览器推送任务阶段、当前知识单元进度等。
security Spring Security:认证、鉴权、从令牌解析租户/用户。
config Web 层专属配置:CORS、国际化、Jackson 等。

resources/static / templates:若需服务端薄模板或静态页(多数 SPA 仅 static 放空由 Nginx 托管前端构建产物)。

2.7 finrep-worker 包路径 .../worker/

作用
consumer MQ 监听入口:收到消息后调用 application 层推进或调用算法。
handler 按消息类型拆分的处理逻辑(大纲生成、全文生成批次等)。
scheduler 可选 @Scheduled:重试、超时扫描、清理临时数据。
config Worker 进程专属配置(线程池、并发度等)。

三、algo/(Python 算法 / Agent 服务)

FastAPI(建议) 对内提供 OpenAI 兼容 大模型调用与 报告专用技能:一级/二级大纲、段落生成、RAG 检索等。由 backend 内网调用;不对公网暴露(或与网关结合白名单)。

子目录 作用
src/finrep_algo_agent/api/routers HTTP 路由:按技能或资源划分 POST /v1/outline/l1 等接口定义。
src/finrep_algo_agent/api/deps FastAPI Depends:鉴权、限流、公共请求体解析、从 Header 注入 trace/tenant。
src/finrep_algo_agent/agent 多步编排入口:LangGraph 或状态图定义、Human-in-the-loop 占位(实际卡点仍在 Java/库表时,此处仅接收已确认上下文)。
src/finrep_algo_agent/skills/outline_l1 一级大纲技能:拼装 Prompt、调模型、解析/校验 JSON、返回结构化一级章节结果。
src/finrep_algo_agent/skills/outline_l2 二级大纲 / 知识单元装配技能:按章调用、章节编号结构、与需求文档 JSON 契约对齐。
src/finrep_algo_agent/skills/section_gen 按知识单元生成正文技能:模板变量注入、段落级调用与拼接顺序由 Java 调多次或一次批处理(按设计定)。
src/finrep_algo_agent/skills/rag_retrieve 仅检索:返回引用片段供上游拼 Prompt;或由 services 组合进 section_gen
src/finrep_algo_agent/llm/client OpenAI 兼容 HTTP 客户端封装(base_url、api_key、超时)。
src/finrep_algo_agent/llm/router 多模型路由:按请求元数据选择模型别名、主备降级。
src/finrep_algo_agent/llm/providers 各厂商/集群差异适配(若路由不足以覆盖)。
src/finrep_algo_agent/rag/ingestion 文档解析、分块、写入向量库(离线或准实时任务)。
src/finrep_algo_agent/rag/retrieval 查询改写、相似度检索、重排序(若需要)。
src/finrep_algo_agent/rag/vectorstore 向量库访问封装(pgvector、Milvus 等)。
src/finrep_algo_agent/prompts/templates Jinja2 / 文本模板文件;与需求文档章节结构对齐的版本管理。
src/finrep_algo_agent/prompts/builders 从领域 DTO 生成 messages 列表的构建器代码。
src/finrep_algo_agent/schemas Pydantic 模型:请求/响应、大纲 JSON、与 Java DTO 命名对齐说明。
src/finrep_algo_agent/services 组合技能与仓储的高层服务;供 routers 薄层调用。
src/finrep_algo_agent/core 领域无关内核:常量、共用异常、运行模式枚举等。
src/finrep_algo_agent/config pydantic-settings / 环境变量:模型 URL、密钥(来自密钥管理)、功能开关。
src/finrep_algo_agent/observability 日志结构化、Metrics、与 OpenTelemetry 对接。
tests/unit 单测:解析、Prompt 构建、mock LLM。
tests/integration 集成测:需真实或 testcontainers 模型/向量库时启用。
scripts/ 一次性脚本:索引重建、批量评测、Prompt 回归等。
deploy/ Dockerfile、k8s YAML、行内发布说明。
docs/ 算法侧设计:接口契约、与 Java 对齐字段、模型版本记录。

四、三端协作关系(回顾)

浏览器 → frontend → backend(REST + SSE)
                    → backend.integration.pythonagent → algo(REST)

任务与人工确认的 权威状态backend 数据库algo 尽量 无状态或可重建,输出结构化结果供 Java 持久化。