专栏导读:Agent 为什么要 WebFlux
约 579 字大约 2 分钟
布欧-Lewyon
2026-06-08
首页 › Agent Spring Boot › WebFlux 与流式 API
从哪个项目开始
专栏配套代码的第一站是 agent-web-flux:一个单模块 Spring Boot 4 工程,只做一件事——用 WebFlux + WebClient 把 DeepSeek 的流式回复通过 SSE 推给浏览器。
后面三个子项目在此基础上叠加能力:
agent-web-flux → 流式骨架
agent-function-calling → + Tool Calling
agent-memory → + Redis 记忆
agent-rag → + RAG + 多模块为什么 Agent 要流式
大模型生成长回答时,同步接口会让用户干等十几秒。流式(SSE)边生成边展示,体验和 ChatGPT 一致,也能降低网关超时风险。
本阶段技术选型
| 项 | agent-web-flux 的选择 |
|---|---|
| Web 栈 | spring-boot-starter-webflux(不用 MVC) |
| HTTP 客户端 | WebClient(Reactive) |
| 模型 | DeepSeek OpenAI 兼容 API |
| 返回类型 | Flux<String> + TEXT_EVENT_STREAM |
| 前端 | React + Vite,打包进 static/ |
刻意没用 Spring AI:先用 WebClient 手写 SSE 解析,理解 choices[].delta.content 和 [DONE] 语义,后面 Function Calling、Memory、RAG 才好排查问题。
四层能力演进
| 层 | 端点形态 | 是否流式 |
|---|---|---|
| ① 流式聊天 | GET /api/chat/stream | 是(SSE) |
| ② Agent+Tool | GET /api/agent/chat | 否(JSON 一次返回) |
| ③ Agent+Memory | POST /api/agent/chat | 否 |
| ④ Agent+RAG | POST /api/agent/chat + mode | 否 |
注意:Function Calling 在本项目里用非流式,因为要先跑完 tool 循环再给用户最终答案。流式聊天和 Agent 是两条路径,在 agent-rag 里仍然并存。
学习点
- WebFlux 的
Flux是 SSE 的后端载体,一个元素对应一条data:行。 - DeepSeek 流式响应需解析 JSON chunk,过滤空行和
[DONE]。 - 前端用
fetch+ReadableStream消费 SSE(比EventSource更灵活,支持 POST)。 - Vite 构建产物输出到
src/main/resources/static,一个 jar 即可部署。
小结
agent-web-flux是专栏基石:WebClient 调 DeepSeek、Flux推 SSE、React 流式 UI。- 后续子项目在同一包名
com.lewyon.webflux上扩展,便于对比 diff。 - 先跑通流式,再学 Tool/Memory/RAG,顺序不要跳。
