基于知识库的流式问答实现

4 阅读2分钟

第二篇:基于知识库的流式问答实现 (SSE)

适用场景:流式输出 (SSE) 与 RAG 集成
大神提示:此处涉及 Qwen 模型的特殊配置,大神可略过,求轻喷 🙏

本篇记录如何通过 Node.js 调用阿里云 OpenAI 接口,实现流式输出(SSE),并处理知识库检索与响应。

1. 核心逻辑 (Workflow)

  1. 接收请求:提取 query (用户问题) 和 parsedId (上一轮对话 ID)。

  2. 同步检索:先调用知识库检索接口,获取参考文档片段(暂存)。

  3. 建立连接:调用大模型 API,开启 stream: true,获取异步迭代器。

  4. 数据流处理

    • 提取会话 ID。
    • 清洗增量数据块。
    • 追加引用:AI 文本流结束后,将检索到的参考文档元数据追加发送。
  5. SSE 推送:设置响应头 text/event-stream,逐块序列化推送。

  6. 结束/异常:推送 [DONE] 或错误事件。

2. ⚠️ 核心配置 (Qwen 模型避坑)

  • 模型qwen3.6-plus

  • 流式开关stream: true

  • 深度思考reasoning: { effort: 'none' }

    • 特别说明:Qwen3.6-plus 默认开启深度思考,如果不设置为 none,会导致首字响应非常慢(亲测坑点)。
  • 知识库绑定

    "tools": [
      {
        "type": "file_search",
        "vector_store_ids": ["$KNOWLEDGE_BASE_ID"]
      }
    ]
    

3. 前端交互注意点

  • 必须使用 fetch 请求,处理流式输出。
  • 需处理 [DONE] 标记来结束流。
  • 需根据 parsed.type (如 content, source, id) 分别处理文本内容和引用来源。

💡 总结与代码获取
以上记录仅为个人开发过程中的关键点梳理,特别是阿里云 SDK 的参数构造和 Qwen 模型的流式配置。

由于代码量较多,包含完整的 Express 路由封装和环境变量配置,直接粘贴容易格式错乱。如果你需要完整的源码参考,可以私信我获取,欢迎交流讨论!