第二篇:基于知识库的流式问答实现 (SSE)
适用场景:流式输出 (SSE) 与 RAG 集成
大神提示:此处涉及 Qwen 模型的特殊配置,大神可略过,求轻喷 🙏
本篇记录如何通过 Node.js 调用阿里云 OpenAI 接口,实现流式输出(SSE),并处理知识库检索与响应。
1. 核心逻辑 (Workflow)
-
接收请求:提取
query(用户问题) 和parsedId(上一轮对话 ID)。 -
同步检索:先调用知识库检索接口,获取参考文档片段(暂存)。
-
建立连接:调用大模型 API,开启
stream: true,获取异步迭代器。 -
数据流处理:
- 提取会话 ID。
- 清洗增量数据块。
- 追加引用:AI 文本流结束后,将检索到的参考文档元数据追加发送。
-
SSE 推送:设置响应头
text/event-stream,逐块序列化推送。 -
结束/异常:推送
[DONE]或错误事件。
2. ⚠️ 核心配置 (Qwen 模型避坑)
-
模型:
qwen3.6-plus -
流式开关:
stream: true -
深度思考:
reasoning: { effort: 'none' }- 特别说明:Qwen3.6-plus 默认开启深度思考,如果不设置为
none,会导致首字响应非常慢(亲测坑点)。
- 特别说明:Qwen3.6-plus 默认开启深度思考,如果不设置为
-
知识库绑定:
"tools": [ { "type": "file_search", "vector_store_ids": ["$KNOWLEDGE_BASE_ID"] } ]
3. 前端交互注意点
- 必须使用
fetch请求,处理流式输出。 - 需处理
[DONE]标记来结束流。 - 需根据
parsed.type(如content,source,id) 分别处理文本内容和引用来源。
💡 总结与代码获取
以上记录仅为个人开发过程中的关键点梳理,特别是阿里云 SDK 的参数构造和 Qwen 模型的流式配置。
由于代码量较多,包含完整的 Express 路由封装和环境变量配置,直接粘贴容易格式错乱。如果你需要完整的源码参考,可以私信我获取,欢迎交流讨论!