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

推荐订阅源

S
Secure Thoughts
P
Privacy International News Feed
T
Tenable Blog
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
S
Securelist
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
月光博客
月光博客
T
The Blog of Author Tim Ferriss
Scott Helme
Scott Helme
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
C
Cisco Blogs
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LangChain Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Security Latest
Security Latest
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
博客园 - 三生石上(FineUI控件)
I
InfoQ
Spread Privacy
Spread Privacy
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
C
CERT Recently Published Vulnerability Notes
A
About on SuperTechFans
博客园_首页
Engineering at Meta
Engineering at Meta
Project Zero
Project Zero
Latest news
Latest news

博客园 - work hard work smart

使用 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 提示词工程实战:让大模型更懂你的意图 Spring AI ChatClient 深度解析:优雅构建大模型应用的利器 Spring AI Alibaba DashScopeChatModel 实战 Spring 中 SSE 流式输出的多种实现方式详解 OpenSandbox 实战指南:为 AI Agent 构建安全的代码执行沙箱 在本机启动 LangGraph 开发服务器:完整指南 DeepAgents中Backend的奥秘:让AI Agent拥有文件操作能力 为什么选择 Go 开发 Web 接口?从入门到实践 智能搜索DeepAgent笔记 RAG学习笔记1--系统文件导入流程 百炼 WebSearch 快速入门指南 Python 连接 MongoDB 完整指南:从连接配置到增删改查实战 一行命令搞定 MongoDB 开发环境:Docker Compose 部署 + 可视化管理 使用 Attu 可视化管理 Milvus 向量数据库 在 Windows Docker 中快速安装 Milvus 2.5.6 minio使用 Spark 集群搭建 hadoop集群安装 Spring AI Alibaba 入门实战 Windows 安装 OpenClaw 实战指南 MyBatis 核心流程和原理 Idea中安装Claude code插件 Spark 编程 使用Matplotlib 绘制直方图 Flink安装部署 Flume安装 查找导致cpu过高的代码方法 JVisualVM监控远程Java进程 jmap jacoco多模块生成java单元测试报告实践 arthas 使用demo LockSupport Exchanger CyclicBarrier CountDownLatch 手把手教你用python开始第一个机器学习项目
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算法: 倒数排名融合 (无需训练的排序算法)