Files
common_agent/docs/ARCHITECTURE.md

199 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Common Agent 当前代码架构说明
## 1. 文档目的
本文档描述 `common_agent` 当前已经落地的前后端架构,用于帮助快速理解代码边界、模块职责和扩展点。
## 2. 总体分层
### 后端分层
采用标准 Spring Boot + MyBatis-Plus 分层:
- **controller**:对外暴露 REST API统一使用 DTO 交互,返回 `RequestResult<T>`
- **service**:接口 + 实现,继承 MyBatis-Plus `IService` / `ServiceImpl`
- **mapper**:继承 `BaseMapper<T>`,无 XML全部使用 `lambdaQuery()` 类型安全查询。
- **entity**:数据库实体模型,继承 `BaseEntity`
- **dto/request|response**:请求/响应 DTO响应 DTO 提供 `fromEntity()` 静态转换。
- **config / constant / enums / handler**:模块级配置、常量、枚举和全局异常处理。
### 前端架构
- **入口**`main.ts` 挂载 Vue App注册 Pinia、Vue Router、Element Plus。
- **布局**`AdminLayout.vue` 管理后台壳布局(侧边栏菜单 + 主内容区)。
- **页面**:各业务页面位于 `pages/`,使用 Composition API + `<script setup lang="ts">`
- **API 层**`api/request.ts` 封装 Axios统一 `/api` 前缀,`RequestResult<T>` 信封解包,大整数安全解析。
- **路由**`router/index.ts` 使用 HTML5 history 模式,所有页面作为 AdminLayout 子路由。
- **状态**`stores/app.ts` Pinia 状态管理(当前为环境名占位)。
- **样式**`styles/global.css` 定义全局 CSS 变量和布局,各页面使用 scoped style。
## 3. 已实现模块
### 3.1 公共基础模块
包路径:`com.bruce.common`
职责:
- 提供实体基类 `BaseEntity`(主键、审计字段、乐观锁)。
- 统一 API 返回体 `RequestResult<T>`
- 全局异常处理 `GlobalExceptionHandler`
- MyBatis-Plus 审计自动填充 `EntityAuditMetaObjectHandler`
- 附件本地存储配置 `AttachmentProperties`
- 文档解析抽象与 Apache Tika 解析实现。
- 系统枚举管理能力CRUD + 批量新增 + 管理端查询)。
- 附件上传能力(本地磁盘 + 元数据持久化)。
关键类:
| 类 | 路径 |
|----|------|
| BaseEntity | `common/domain/model/BaseEntity.java` |
| RequestResult | `common/domain/model/RequestResult.java` |
| GlobalExceptionHandler | `common/handler/GlobalExceptionHandler.java` |
| EntityAuditMetaObjectHandler | `common/config/EntityAuditMetaObjectHandler.java` |
| AttachmentProperties | `common/config/AttachmentProperties.java` |
| SysEnum | `common/domain/entity/SysEnum.java` |
| SysAttachment | `common/domain/entity/SysAttachment.java` |
| SysEnumController | `common/controller/SysEnumController.java` |
| SysAttachmentController | `common/controller/SysAttachmentController.java` |
| SysEnumServiceImpl | `common/service/impl/SysEnumServiceImpl.java` |
| SysAttachmentServiceImpl | `common/service/impl/SysAttachmentServiceImpl.java` |
| DocumentParserFactory | `common/document/parse/DocumentParserFactory.java` |
| TxtDocumentParser | `common/document/parse/impl/TxtDocumentParser.java` |
| PdfDocumentParser | `common/document/parse/impl/PdfDocumentParser.java` |
| WordDocumentParser | `common/document/parse/impl/WordDocumentParser.java` |
| ExcelDocumentParser | `common/document/parse/impl/ExcelDocumentParser.java` |
| CommonStatusEnum | `common/enums/CommonStatusEnum.java` |
| EnableStatusEnum | `common/enums/EnableStatusEnum.java` |
接口列表:
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/sys-enum/queryForManagement` | 管理端枚举查询(支持关键词搜索) |
| GET | `/api/sys-enum/detail` | 获取单个枚举 |
| POST | `/api/sys-enum/save` | 新增/更新枚举 |
| POST | `/api/sys-enum/batchSave` | 批量新增枚举 |
| POST | `/api/sys-enum/delete` | 删除枚举 |
| POST | `/api/attachments/upload` | 上传附件 |
### 3.2 RAG 知识库模块
包路径:`com.bruce.rag`
职责:
- 维护 RAG 知识库主数据CRUD + 编码唯一性校验)。
- 维护知识库文档与附件的关联关系。
- 支持知识文档批量上传、解析入口、解析快照、手动切片入口和状态流转。
- 定义切片、向量、解析状态、索引状态和 RAG 相关来源常量。
关键类:
| 类 | 路径 |
|----|------|
| RagStore | `rag/entity/RagStore.java` |
| RagDocument | `rag/entity/RagDocument.java` |
| RagChunk | `rag/entity/RagChunk.java` |
| RagChunkEmbedding | `rag/entity/RagChunkEmbedding.java` |
| RagStoreController | `rag/controller/RagStoreController.java` |
| RagDocumentController | `rag/controller/RagDocumentController.java` |
| RagStoreServiceImpl | `rag/service/impl/RagStoreServiceImpl.java` |
| RagDocumentServiceImpl | `rag/service/impl/RagDocumentServiceImpl.java` |
| RagDocumentParseServiceImpl | `rag/service/impl/RagDocumentParseServiceImpl.java` |
| RagDocumentChunkServiceImpl | `rag/service/impl/RagDocumentChunkServiceImpl.java` |
| ChunkerFactory | `rag/parse/ChunkerFactory.java` |
| FixedLengthChunker | `rag/parse/impl/FixedLengthChunker.java` |
| DelimiterChunker | `rag/parse/impl/DelimiterChunker.java` |
| RagParseStatusEnum | `rag/enums/RagParseStatusEnum.java` |
| RagIndexStatusEnum | `rag/enums/RagIndexStatusEnum.java` |
| RagChunkStrategyEnum | `rag/enums/RagChunkStrategyEnum.java` |
| RagSystemConstants | `rag/constant/RagSystemConstants.java` |
接口列表:
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/rag/store/list` | 查询全部知识库 |
| POST | `/api/rag/store/query` | 知识库条件查询 |
| GET | `/api/rag/store/detail` | 获取知识库详情 |
| GET | `/api/rag/store/overview` | 获取知识库总览 |
| GET | `/api/rag/store/documentOverview` | 获取单个知识库文档概览 |
| POST | `/api/rag/store/save` | 新增/更新知识库 |
| POST | `/api/rag/store/delete` | 删除知识库 |
| POST | `/api/rag/documents/list` | 查询全部知识文档 |
| POST | `/api/rag/documents/query` | 知识文档条件查询 |
| GET | `/api/rag/documents/detail` | 获取知识文档详情 |
| POST | `/api/rag/documents/save` | 新增/更新知识文档 |
| POST | `/api/rag/documents/delete` | 删除知识文档 |
| POST | `/api/rag/documents/batchUpload` | 批量上传文档并创建 `rag_document` |
| POST | `/api/rag/documents/parse` | 批量解析知识文档 |
| POST | `/api/rag/documents/chunk` | 按策略异步生成文档切片 |
当前边界:
- 知识库 CRUD、文档 CRUD、批量上传、Tika 文本解析、解析快照和状态流转已完成。
- `rag_chunk` 已支持基于解析快照的手动异步切片,当前已落地定长切片和分隔符切片。
- `rag_chunk_embedding` 的结构层已就绪,尚未实现模型调用、向量化、索引任务和检索问答。
- 模型服务商配置与路由已有需求/设计文档,后续会作为 Embedding、Chat 和 Rerank 的统一接入层。
## 4. 数据模型关系
当前核心表关系如下:
| 表名 | 说明 | 关联 |
|------|------|------|
| `sys_enum` | 系统枚举配置 | 独立 |
| `sys_attachment` | 附件元数据 | 独立,被 rag_document 引用 |
| `rag_store` | 知识库主表 | 独立 |
| `rag_document` | 知识库文档表 | 关联 `rag_store.id``sys_attachment.id` |
| `rag_chunk` | 知识切片表 | 关联 `rag_store.id``rag_document.id` |
| `rag_chunk_embedding` | 切片向量表 | 关联 `rag_store.id``rag_document.id``rag_chunk.id` |
`rag_document` 是 RAG 模块与附件模块的连接点,`rag_chunk``rag_chunk_embedding` 是下一步检索链路的核心落点。
## 5. 配置与运行
关键配置文件:
| 文件 | 说明 |
|------|------|
| `application.yaml` | 环境选择(当前 `active: dev` |
| `application-dev.yaml` | 开发环境配置PostgreSQL 数据源、MyBatis-Plus、附件目录 |
| `application-template.yaml` | 配置模板 |
## 6. 测试策略
- **后端测试**围绕结构约束的单元测试Mapper/Service/Controller 继承体系、实体字段注解、方法签名验证)。
- **前端测试**Vitest + @vue/test-utils覆盖路由定义、布局组件、页面渲染、API 调用和 Long 类型解析。
## 6.1 注释规范
- 新增或修改核心业务代码时,需补充中文注释,优先说明类职责、方法目的、关键判断和扩展边界。
- 每次提交代码时,需要同步检查本次改动是否已经补齐对应中文注释,避免后续阅读只能靠反推代码语义。
- 注释应聚焦设计意图和边界,不建议堆砌“变量赋值”“循环遍历”这类低价值说明。
## 6.2 结构化枚举规范
- 长期固定的结构化文本字段,统一采用整型枚举值作为前后端传输协议,不再直接传递字符串名称。
- 后端 Java 枚举类是这类结构化枚举的单一事实来源,前端常量和 `sys_enum` 数据都基于它同步。
- 新增或修改结构化枚举时,需要通过统一的枚举初始化测试按 `catalog + type` 先删后全量重建写入 `sys_enum`
- 不同枚举组之间的 `catalog + type` 必须唯一,否则会破坏枚举组重建的确定性。
## 7. 当前不足
- RAG 尚未进入"可检索链路",当前完成上传、解析和手动切片,但未完成向量化和召回。
- 模型服务商配置、模型路由和调用日志尚未落地代码。
- Agent 运行时相关模型与服务尚未开始建设。
- 前端部分页面(附件管理、检索配置、最近任务)为占位或后续能力提示。
- 缺少鉴权、租户、操作日志。
## 8. 建议演进方向
1. 补 RAG 最小检索闭环:解析文本 → 生成切片 → 生成向量 → 检索召回。
2. 建设模型服务商配置与路由层,统一接入 Ollama、硅基流动、百炼等 OpenAI-compatible 来源。
3. 建设 Agent 域模型Agent、Session、Message、Tool、Task。
4. 补齐索引任务、重试、重建索引和前端任务视图。
5. 衔接模型供应商、Spring AI 适配层、工作流编排和前端管理台。