
前言今天继续做我的开源 AI 项目KnowFlow Agent。这个项目的目标是做一个面向企业智能客服和售后支持场景的 AI 平台整体架构是Spring Boot FastAPI RAG AgentDay 1 主要完成了项目骨架、README、文档、GitHub 仓库。Day 2 的重点是搭建 Spring Boot 后端基础工程让后端真正启动起来并返回统一格式的 JSON。一开始我以为 Day 2 的目标只是看到浏览器里返回一段 JSON后来才理解JSON 只是结果真正重要的是后端服务已经有了最小可运行基础。Day 2 的主要目标今天的目标可以总结成一句话让 backend-spring 从一个空目录变成一个可以启动、可以访问、可以测试的 Spring Boot 后端工程。具体做了这些事情创建 Spring Boot 项目配置 Maven 依赖编写 Spring Boot 启动类编写第一个接口/api/health设计统一返回格式ApiResponse添加业务异常类BusinessException添加全局异常处理GlobalExceptionHandler添加基础配置文件application.yml编写接口测试启动服务并在浏览器访问成功最终访问http://localhost:8080/api/health返回了{ code: 0, message: ok, data: { service: backend-spring, status: UP, time: 2026-06-28T11:02:50 } }这说明后端服务已经成功运行。今天学到的第一个概念backend-spring 是什么backend-spring不是启动命令而是项目里的一个目录。它代表KnowFlow Agent 的 Spring Boot 业务后端以后它会负责用户管理权限管理知识库管理文档管理工单管理问答记录MySQL 数据存储Redis 缓存给前端提供接口调用 AI 服务获取智能结果也就是说backend-spring是整个项目里的业务核心。真正启动它的命令是cd D:\Code\knowflow-agent\backend-spring mvn spring-boot:run今天学到的第二个概念什么是 API 接口API 接口可以理解成前端或者其他服务和后端沟通的入口比如今天访问的GET /api/health就是一个后端接口。它的作用是告诉调用方后端服务现在是否正常运行以后项目里还会有很多接口例如GET /api/tickets POST /api/tickets GET /api/knowledge-bases POST /api/qa/ask这些接口分别会负责查询工单、创建工单、查询知识库、发起智能问答等功能。今天学到的第三个概念什么是 GET 请求GET 是 HTTP 请求方式的一种。我今天先记住了一个简单规则GET 查询数据 POST 提交或新增数据 PUT 修改数据 DELETE 删除数据所以GET /api/health表示查询后端健康状态。它不会修改数据只是获取服务当前状态。今天学到的第四个概念为什么接口要统一返回格式今天项目里设计了统一返回格式{ code: 0, message: ok, data: {} }这样做的原因是前端需要稳定地处理后端返回。如果每个接口格式都不一样前端就会很难写。比如一个接口返回{ success: true, result: {} }另一个接口返回{ code: 200, data: {} }再另一个接口返回{ status: ok }这样项目一大就会很乱。统一格式以后前端只需要判断code 是否等于 0如果code 0说明成功读取data。如果code ! 0说明失败显示message。code、message、data 分别代表什么今天重点理解了这三个字段{ code: 0, message: ok, data: {} }codecode是业务状态码。0 表示成功 其他数字表示失败或特殊情况比如{ code: 400, message: 参数错误, data: null }messagemessage是提示信息。成功时可以是ok失败时可以是知识库不存在 无权限访问 参数错误 服务器内部错误datadata是真正返回的数据。比如健康检查接口里{ service: backend-spring, status: UP, time: 2026-06-28T11:02:50 }这部分就是接口真正想返回的信息。今天读懂的几个核心文件1. pom.xmlpom.xml是 Maven 项目的配置文件。它告诉项目用哪个 Spring Boot 版本用哪个 Java 版本需要哪些依赖怎么构建项目今天项目用的是Spring Boot 2.7.18 Java 11主要依赖有spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-test其中web让项目可以写接口validation以后做参数校验test用来写测试2. KnowFlowBackendApplication这是 Spring Boot 的启动类。可以理解为整个后端项目的开机按钮代码核心是SpringApplication.run(KnowFlowBackendApplication.class, args);运行它以后Spring Boot 会启动整个后端服务。3. HealthController这是今天写的第一个接口类。它负责处理GET /api/health当浏览器访问http://localhost:8080/api/healthSpring Boot 就会找到这个 Controller然后执行里面的health()方法最后返回 JSON。4. ApiResponseApiResponse是统一响应格式类。它规定以后所有接口都尽量返回{ code: 0, message: ok, data: {} }这样整个项目会更规范也方便前端处理。5. GlobalExceptionHandlerGlobalExceptionHandler是全局异常处理类。它的作用是当后端接口出错时不直接把 Java 报错返回给前端而是统一包装成 JSON 返回。比如以后出现业务错误可以返回{ code: 400, message: 知识库不存在, data: null }这样前端和用户看到的信息会更清楚。今天对 Spring Boot 后端的理解今天以前我可能只知道 Spring Boot 是后端框架。今天之后我对它有了一个更清楚的理解Spring Boot 可以启动一个后端服务。 后端服务运行后可以对外提供 API 接口。 前端、浏览器或其他服务可以调用这些接口。 接口返回 JSON 数据。今天的完整流程是浏览器访问 /api/health ↓ Spring Boot 接收到请求 ↓ 找到 HealthController ↓ 执行 health() 方法 ↓ 生成 service/status/time 数据 ↓ 用 ApiResponse 包装 ↓ 返回统一 JSON这就是一个最小后端接口的完整过程。今天也意识到写出来不等于学会今天有一个很真实的感受AI 很快就把代码生成出来了我会觉得“好像我什么都没干”。但后来我意识到真正重要的不是代码是谁敲出来的而是我能不能理解它。今天真正需要学会的是这个文件为什么存在这段代码解决什么问题浏览器为什么能看到返回值接口为什么要统一格式如果以后增加接口该放在哪里如果接口报错应该怎么返回所以今天不只是“生成了代码”而是开始学习一个后端项目的基本结构。Day 2 的收获今天的收获主要有这些知道了backend-spring是 Spring Boot 业务后端知道了什么是 API 接口知道了什么是 GET 请求知道了为什么后端要返回 JSON知道了为什么接口需要统一返回格式理解了code、message、data的含义知道了 Spring Boot 启动类的作用知道了 Controller 是处理接口请求的地方知道了全局异常处理的意义成功让后端服务启动并返回结果Day 2 的项目成果今天完成后KnowFlow Agent 的后端已经具备了最小可运行能力。可以这样总结Day 1项目从无到有完成开源仓库和文档 Day 2后端从无到有完成 Spring Boot 基础骨架现在项目已经不是只有目录和文档了而是有了一个真正能启动的后端服务。下一步计划接下来可以继续做后端基础能力。下一步可能会做后端基础包结构用户模块知识库模块文档模块工单模块数据库表设计MySQL 配置Redis 配置不过在继续写功能之前我需要先把今天这些基础概念搞懂。尤其是API 是什么 GET 请求是什么 统一返回格式是什么 Controller 是什么 Spring Boot 怎么启动这些是后面所有功能的基础。总结今天完成了 KnowFlow Agent 的 Day 2Spring Boot 后端基础工程。今天看到的 JSON 返回不只是一个简单页面而是证明后端服务已经启动成功 接口已经可以访问 统一返回格式已经生效 项目开始具备真实后端工程结构后面所有复杂功能比如知识库、工单、RAG、Agent都会建立在今天这个后端基础之上。Day 2 的核心一句话是让 backend-spring 活起来。