超级AI智能体完结篇

效果

现在项目就差一个前端,直接用cursor生成,

效果如下:

现在基本可用。

其中最让人折磨得点就是,前端在识别sse连接关闭的代码上浪费了很多的时间,因为,即使连接关闭了,但是前端不知道是超时,还是结束了,所以我查看了网上的资料,实现了一种比较优雅的结束方式,下面是代码;

后端

我们再结束之前再发送一次消息,这个消息比较特殊,是一个标致符号,用于前端做判断

java
复制代码
public class SseEmitterUtils { private static final String DONE_MESSAGE = "[DONE]"; /** * 完成SSE连接:发送结束标志并关闭连接 * * @param emitter 要完成的SseEmitter对象 */ public static void completeWithDone(SseEmitter emitter) { try { emitter.send(DONE_MESSAGE); } catch (IOException e) { // 可选:记录日志或处理异常 } finally { emitter.complete(); } } /** * 完成SSE连接并携带错误信息 * * @param emitter 要完成的SseEmitter对象 * @param ex 发生的异常 */ public static void completeWithError(SseEmitter emitter, Throwable ex) { try { emitter.send("ERROR: " + ex.getMessage()); } catch (IOException ignored) { } finally { emitter.completeWithError(ex); } } }

前端

vue
复制代码
eventSource.onmessage = (event) => { try { const data = event.data // 检查是否收到结束标志 if (data === DONE_MESSAGE) { console.log('收到SSE结束标志,正常关闭连接') eventSource.close() onClose() return } // 处理正常消息 onMessage(data) } catch (error) { console.error('解析SSE消息失败:', error) onError(error) } }

具体的代码我已经上传到github,地址:https://github.com/fenghuanghuai/feng_ai_agent

好啦,完结啦,后续有问题在继续补充把。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
青春的疯子
下载 APP