惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
罗磊的独立博客
爱范儿
爱范儿
J
Java Code Geeks
博客园 - 司徒正美
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
小众软件
小众软件
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Jina AI
Jina AI
Y
Y Combinator Blog
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
Vercel News
Vercel News

博客园 - work hard work smart

Java 面试1 Java 常见面试问题 手撕java常用代码 WebStorm 创建react工程 构建企业级 Text-to-SQL Agent:基于 LangGraph 的智能数据查询系统设计 Harness 工程:驾驭 AI Agent 的工程化艺术 DeepAgents 多智能体架构实战:从设计模式到后端选型 Vue 自定义组件完全指南:从零构建待办事项应用 使用 LangChain + Hugging Face 构建文本向量化服务 SQLAlchemy 使用详解 Python 中使用 Elasticsearch 的完整指南 Qdrant 向量数据库使用指南 OpenEvals 快速入门:LLM 评估指南 DeepEval 快速入门:LLM 应用评估指南 LangSmith 批量评估完全指南 Qwen-Agent 入门指南:快速构建智能体应用 LangSmith 集成实战:从追踪到评估的完整指南 初识 go-zero:一款让你写后端更规范、更高效的 Go 微服务框架 RAG 中为什么需要 Rerank,以及如何使用 Rerank LangChain4j RAG 核心组件与组合方式 如何使用 Elasticsearch 进行全文检索和向量检索 MinerU Docker 部署指南 5 分钟上手:为 Cline 配置一个免费的 MCP 天气服务 Neo4j 图数据库安装与 Spring Boot 集成实战指南 LangFuse 实战指南:用 @observe 三行代码给 LLM 应用加上全链路追踪 Function Call 深度解析:让大模型从"嘴炮"到"实干"的技术革命 Spring AI 提示词模板实战:告别硬编码,实现提示词工程化管理 LangChain4j 实战指南:用 Java 轻松构建 AI 应用 Spring AI 对话短期记忆实战:让大模型拥有"记忆力" Spring AI 提示词工程实战:让大模型更懂你的意图
RAG学习笔记2--系统查询流程
work hard work smart · 2026-05-04 · via 博客园 - work hard work smart

总体流程概览

graph LR A[1.用户提问] --> B[2.商品确认<br/>qwen-flash] B --> C{2.是否有答案?} C -->|是/反问| D[8.答案输出] C -->|否| E[3.多路搜索] E --> F[3.1 向量检索<br/>BGE-M3本地] E --> G[3.2 HyDE检索<br/>qwen-flash+BGE-M3] E --> H[3.3 网络搜索<br/>百炼MCP] E --> I[3.4 知识图谱<br/>Neo4j未启用] F --> J[4.结果合并] G --> J H --> J I --> J J --> K[5.RRF融合排序] K --> L[6.重排序<br/>BGE-Reranker本地] L --> M[7.答案生成<br/>qwen-flash] M --> D

详细流程说明

1. 用户查询阶段

  • 前端页面: 用户输入查询问题
  • 历史对话: 从 MongoDB 加载近期对话历史
  • API调用: POST /query 接口 (支持流式SSE输出)

2. 商品名称确认节点 (node_item_name_confirm)

  • 历史加载: 从 MongoDB 获取最近对话记录
  • LLM提取: 调用大模型提取商品名称并重写问题 (qwen-flash 语言模型, JSON模式)
  • 向量化检索: 对提取的商品名进行向量检索 (BGE-M3 Embedding模型 - 本地)
  • 评分对齐: 根据 Milvus 检索评分确认商品名
    • 规则A: 单个高置信度 (>0.85) → 直接确认
    • 规则B: 多个高置信度 → 优先精确匹配
    • 规则C: 中等置信度 (0.6-0.85) → 生成候选列表
  • 条件分支:
    • 若无法确认唯一商品 → 生成反问/拒绝回答 → 跳到答案输出
    • 若确认商品 → 继续多路搜索流程

3. 多路并发搜索 (四路并行)

3.1 向量检索节点 (node_search_embedding)

  • 问题向量化: 对重写后的问题生成向量 (BGE-M3 Embedding模型 - 本地)
  • 混合检索: 在 Milvus 中执行稠密+稀疏混合检索
  • 商品过滤: 使用 item_name in [...] 过滤检索范围
  • 返回结果: Top 5 最相关文档片段

3.2 HyDE检索节点 (node_search_embedding_hyde)

  • 假设文档生成: 调用LLM生成假设性答案文档 (qwen-flash 语言模型)
  • 文本拼接: 将"原问题 + 假设文档"合并
  • 向量化检索: 对合并文本生成向量并检索 (BGE-M3 Embedding模型 - 本地)
  • 核心优势: 解决短查询语义稀疏问题,提升召回率
  • 返回结果: Top 5 最相关文档片段

3.3 网络搜索节点 (node_web_search_mcp)

  • MCP调用: 通过百炼 MCP 协议调用网络搜索工具
  • 搜索参数: count=5 (返回5条搜索结果)
  • 结果解析: 解析返回的JSON格式搜索结果
  • 返回结果: 网页标题、摘要、URL列表

3.4 知识图谱节点 (node_query_kg) - 当前未启用

  • Neo4j查询: 预留的知识图谱查询接口
  • 状态: 功能未启用,返回空结果

4. 结果合并节点 (node_join)

  • 虚拟节点: 无实际业务逻辑,仅作为多路搜索的合并点
  • 数据汇聚: 等待四路搜索结果全部完成
  • 状态传递: 将各路结果汇总到 state 中

5. RRF融合排序节点 (node_rrf)

  • 结果标准化: 将不同来源的结果统一格式
  • RRF算法: 使用 Reciprocal Rank Fusion 倒数排名融合
    • 公式: score = weight × (1 / (k + rank))
    • 参数: k=60 (经典常数), weight=1.0 (各路权重相等)
  • 融合来源: Embedding检索 + HyDE检索 (当前配置)
  • 返回结果: Top 10 融合排序后的文档

6. 重排序节点 (node_rerank)

  • 文档合并: 将本地知识库结果 + 网络搜索结果合并
  • 重排序计算: 调用重排序模型计算相关性得分 (BGE-Reranker-Large - 本地)
    • 输入: (查询问题, 候选文档) 对
    • 输出: 相关性分数 (越高越相关)
  • 动态TopK: 智能截断策略
    • 最大保留: 10条
    • 断崖检测: 分数差距 >25% 或 >0.5 时截断
  • 返回结果: 最终重排序后的文档列表

7. 答案生成节点 (node_answer_output)

  • 阶段1 - 答案检查: 检查 state 中是否已有答案 (如反问/拒绝回答)
  • 阶段2 - Prompt构建: 组织问题、历史对话、重排后的文档内容为最终Prompt
  • 阶段3 - LLM生成: 调用大模型生成最终答案 (qwen-flash 语言模型)
    • 支持流式输出 (SSE推送)
    • 支持非流式输出 (一次性返回)
  • 阶段4 - 历史记录: 将答案写入 MongoDB 历史
  • 阶段5 - 图片提取: 从检索结果中提取图片URL
  • 前端推送: 发送最终结果 (含答案+图片URL)

8. 状态监控

  • 任务状态: pending → processing → completed/failed
  • 节点进度: 实时记录已完成和运行中的节点
  • 流式推送: 通过 SSE 实时推送生成进度

数据流转示意

用户问题 + 历史对话
    ↓
商品名称确认 (qwen-flash + BGE-M3)
    ↓
重写问题 + 确认商品名
    ↓
四路并行搜索 (Embedding + HyDE + 网络 + 知识图谱)
    ↓
多路检索结果合并
    ↓
RRF融合排序 (Embedding + HyDE)
    ↓
重排序 (BGE-Reranker + 网络结果)
    ↓
最终答案生成 (qwen-flash)
    ↓
MongoDB历史记录 + 前端SSE推送

技术栈说明

  • Web框架: FastAPI + SSE流式输出
  • 工作流引擎: LangGraph (支持并发分支)
  • 向量数据库: Milvus (稠密+稀疏混合检索)
  • Embedding模型: BGE-M3 (1024维稠密 + 稀疏向量) - 本地部署
  • 语言模型 (LLM): qwen-flash (阿里云通义千问) - 商品识别、HyDE生成、答案生成
  • 重排序模型: BGE-Reranker-Large - 本地部署
  • 网络搜索: 百炼 MCP (Model Context Protocol)
  • 知识图谱: Neo4j (预留接口,当前未启用)
  • 历史存储: MongoDB (对话历史)
  • 对象存储: MinIO (图片URL提取)
  • RRF算法: 倒数排名融合 (无需训练的排序算法)