STRUCTURE.md 17 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 持久化。