12 KiB
12 KiB
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.tsPinia 状态管理(当前为环境名占位)。 - 样式:
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已支持按知识库向量相似度召回 TopK,用于 Agent 调试链路引用回显。- RAG 对外检索问答接口、索引任务化和重排序能力仍在后续建设中。
3.3 Agent 模块
包路径:com.bruce.agent
职责:
- 维护 Agent 定义主数据(CRUD + 编码唯一性 + 绑定知识库校验)。
- 提供 Agent 调试对话接口,支持普通对话与 RAG 对话模式切换。
- 在 RAG 对话模式下,完成“问题向量化 -> 切片召回 -> 上下文组装 -> Chat 模型回答”的最小链路。
- 返回引用切片和请求 ID,便于前端调试与调用追踪。
关键类:
| 类 | 路径 |
|---|---|
| AgentDefinition | agent/entity/AgentDefinition.java |
| AgentDefinitionController | agent/controller/AgentDefinitionController.java |
| AgentDefinitionServiceImpl | agent/service/impl/AgentDefinitionServiceImpl.java |
| AgentDefinitionResponse | agent/dto/response/AgentDefinitionResponse.java |
| AgentChatResponse | agent/dto/response/AgentChatResponse.java |
| ChatModelGateway | modelprovider/gateway/ChatModelGateway.java |
| ChatModelGatewayImpl | modelprovider/gateway/ChatModelGatewayImpl.java |
| ChatRequest | modelprovider/gateway/ChatRequest.java |
| ChatResult | modelprovider/gateway/ChatResult.java |
接口列表:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/agents/list |
查询全部 Agent |
| POST | /api/agents/query |
Agent 条件查询 |
| GET | /api/agents/detail |
获取 Agent 详情 |
| POST | /api/agents/save |
新增/更新 Agent |
| POST | /api/agents/delete |
删除 Agent |
| POST | /api/agents/{agentId}/chat |
Agent 调试对话 |
当前边界:
agent_definition与前端 Agent 管理页已完成联调。- 对话入口已支持
ragEnabled开关,true走 RAG 召回,false走普通对话。 - 尚未落地会话持久化(
agent_session/agent_message)和工具调用编排。
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 |
agent_definition |
Agent 定义表 | 关联 rag_store.id |
rag_document 是 RAG 模块与附件模块的连接点,rag_chunk 和 rag_chunk_embedding 是检索链路核心落点,agent_definition 负责把 Agent 与知识库绑定到同一调用链路。
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 调试链路。
- Agent 运行时尚未持久化会话,工具调用与任务编排仍未落地。
- 前端部分页面(附件管理、检索配置、最近任务)为占位或后续能力提示。
- 缺少鉴权、租户、操作日志。
8. 建议演进方向
- 补 RAG 最小检索闭环:解析文本 → 生成切片 → 生成向量 → 检索召回。
- 把当前 Agent 调试链路升级为会话化运行:沉淀 Session、Message 和上下文裁剪策略。
- 建设 Agent 工具注册与调用协议,补齐任务状态与执行日志。
- 补齐索引任务、重试、重建索引和前端任务视图。
- 衔接模型供应商、Spring AI 适配层、工作流编排和前端管理台。