Agent异步执行后如何接收结果并通过SSE推送前端?
1 个回答
天道忌满,人道忌全。 水满则溢, 物极必反。明月## 作用 Agent 异步执行后,需要把执行过程中的中间事件和最终结果实时通知后端,再由后端通过 SSE 推送给前端,实现: - 实时展示 Agent 的思考过程; - 实时展示工具调用、工具响应结果; - 逐字或分块推送最终回答; - 前端无需轮询,即可持续接收服务端事件并渲染。 ## 原理 ### 1. 使用 LangChain 的流式事件模式 LangChain 的流式输出中主要使用两类模式: - `updates` - Agent 每执行一个操作步骤都会产生事件; - 适合捕获工具调用、工具返回结果等状态变化。 - `messages` - 用于获取 Agent 的流式消息; - 可以从中过滤出思考过程和最终回答内容。 处理思路是: 1. 通过 `updates` 捕获工具调用事件和工具响应事件; 2. 通过 `messages` 获取并过滤 Agent 的思考过程; 3. 继续通过 `messages` 获取最终答案的流式内容; 4. 将这些数据统一转换成 SSE 事件发送给前端。 ### 2. 后端建立 SSE 接口 后端使用 FastAPI 提供流式接口: - 接收前端请求; - 异步启动或调用 Agent; - 遍历 LangChain 产出的流式事件; - 根据事件类型组装不同的 SSE 消息; - 通过 HTTP 长连接持续推送到前端。 典型的事件可以按类型区分,例如: - 思考过程事件; - 工具调用开始事件; - 工具调用结果事件; - 回答内容增量事件; - 执行结束事件; - 异常事件。 ### 3. 前端接收并分发渲染 前端通过 SSE 长连接监听后端事件: - 思考过程推送到“思考组件”展示; - 工具调用和工具响应推送到工具调用区域展示; - 最终答案的增量内容追加到消息列表中; - 收到结束事件后关闭连接或标记本次回答完成。 整体链路可以概括为: ```text 前端发起请求 -> 后端异步执行 Agent -> LangChain 流式产出 updates/messages 事件 -> 后端过滤并转换为 SSE 事件 -> 前端按事件类型实时渲染 ``` 核心是:Agent 的异步结果不是等待全部执行完再一次性返回,而是在执行过程中不断以事件形式向外产出;后端消费这些事件后,通过 SSE 实时转发给前端。发布于 2026-10-28 07:17 •IP属地 四川举报评论收藏
公众号进入网站体验更佳

