今天继续推进 KnowFlow Agent 项目。前几天主要完成了项目骨架、Spring Boot 后端基础、FastAPI AI 服务骨架、数据库设计以及 MySQL 基础配置。Day06 开始进入第一个具体业务模块:知识库模块。

本次的目标是先完成知识库模块的基础接口,让后端从简单的健康检查接口,逐步过渡到真实业务功能开发。

一、今日目标

Day06 的主要目标是完成知识库模块的基础 CRUD 接口。

CRUD 指的是:

Create:新增
Read:查询
Update:修改
Delete:删除

也就是后台系统中最常见的“增删改查”。

本次实现的接口包括:

GET    /api/knowledge-bases
POST   /api/knowledge-bases
GET    /api/knowledge-bases/{id}
PUT    /api/knowledge-bases/{id}
DELETE /api/knowledge-bases/{id}

分别对应:

查询知识库列表
新增知识库
查询知识库详情
修改知识库信息
删除知识库

二、为什么先做知识库模块

KnowFlow Agent 的定位是企业智能客服和售后支持系统。后续要实现 RAG 问答、文档解析、智能工单处理等功能,都需要围绕“知识库”展开。

例如用户提出问题:

产品过了保修期还能维修吗?
如何申请退换货?
售后工单一般多久处理?

系统不能凭空回答,而是需要从企业已有的售后政策、产品文档、维修流程等资料中检索内容,再生成回答。

因此,知识库模块可以理解为后续 AI 问答和智能工单功能的数据基础。先完成知识库管理,后面才能继续做文档上传、文档解析、向量化、RAG 检索等功能。

三、后端分层设计

本次知识库模块采用了比较常见的后端分层结构:

Controller
Service
Repository
Domain
DTO

1. Controller 层

Controller 层负责接收 HTTP 请求,并将请求交给 Service 层处理。

例如访问:

GET /api/knowledge-bases

请求会先进入 KnowledgeBaseController

2. Service 层

Service 层负责处理业务逻辑。

例如:

创建知识库
查询知识库是否存在
修改知识库信息
删除知识库
查询不到数据时抛出业务异常

这些逻辑都放在 KnowledgeBaseService 中。

3. Repository 层

Repository 层负责数据访问。

本次 Day06 暂时使用内存版 Repository,也就是 InMemoryKnowledgeBaseRepository。它可以先模拟数据保存和查询,方便我们在不启动 MySQL 的情况下把接口流程跑通。

后续 Day07 会把这一层替换为 MySQL 版本。

4. Domain 层

Domain 层表示业务对象。

本次新增了 KnowledgeBase,用于表示一个知识库对象。

主要字段包括:

id
name
description
ownerId
status
createdAt
updatedAt

5. DTO 层

DTO 用于接口数据传输。

本次新增了:

CreateKnowledgeBaseRequest
UpdateKnowledgeBaseRequest
KnowledgeBaseResponse

它们分别用于:

接收创建知识库请求
接收修改知识库请求
返回知识库数据

使用 DTO 的好处是可以让接口参数和内部业务对象分开,后续字段变化时更容易维护。

四、接口统一返回格式

项目继续使用统一响应格式:

{
  "code": 0,
  "message": "ok",
  "data": {}
}

字段含义如下:

code:业务状态码,0 表示成功
message:提示信息
data:真正返回的数据

统一返回格式的好处是前端或其他服务在调用接口时,可以按照同一种方式处理结果。

如果每个接口返回格式都不同,前端判断成功、失败、错误信息和数据内容时就会比较混乱。

五、当前实现方式

Day06 当前使用的是内存版数据存储。

也就是说,知识库数据暂时保存在程序内存中:

服务启动后,可以新增、查询、修改、删除知识库
服务关闭或重启后,新增的数据会丢失

这不是最终方案,而是为了先完成接口和分层结构。

这样做的好处是:

不用依赖 MySQL,也能先测试接口
可以先验证 Controller、Service、Repository 的调用流程
方便后续把 Repository 替换成数据库实现

等 Day07 接入 MySQL 后,知识库数据就会真正保存到数据库中。

六、接口测试

本次为知识库模块新增了接口测试,主要覆盖以下场景:

查询知识库列表
新增知识库
修改知识库
删除知识库
查询不存在的知识库

最终测试结果:

8 个测试全部通过

说明 Day06 新增的知识库模块没有影响之前已经完成的健康检查接口和数据库健康检查接口。

七、今日学习重点

通过 Day06,需要重点理解以下内容:

什么是 CRUD
什么是 Controller、Service、Repository 分层
什么是 Domain
什么是 DTO
为什么接口需要统一返回格式
为什么接口需要参数校验
为什么要写接口测试
为什么可以先用内存实现,再替换为数据库实现

其中最重要的是理解后端业务模块的基本开发流程:

用户发送请求
Controller 接收请求
Service 处理业务逻辑
Repository 访问数据
返回统一格式 JSON

这个流程后续会在文档模块、问答模块、工单模块中反复使用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐