ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基础RAG搞不定的问题,高级RAG一招解决

基础RAG搞不定的问题,高级RAG一招解决 前四篇我们把基础RAG和Advanced RAG都讲完了——混合检索、Rerank重排序这些已经是生产标配。但有些场景光靠检索→重排→生成这条线性流水线还是搞不定用户问A公司的CEO之前在哪家公司任职——这个答案可能分散在三份不同的文档里需要先找到CEO是谁再找他之前的任职经历两次检索的结果要串联起来。这就是多跳推理基础RAG做不到。再比如用户问帮我分析一下这个季度的销售趋势——这种开放性问题没有标准答案Agent需要自己规划检索策略、多步获取数据、整合分析。这就是Agentic RAG。今天这篇讲RAG的前沿架构查询改写、多跳检索、GraphRAG、Agentic RAG。这些不是每个项目都用得上但当你遇到基础RAG搞不定的场景时它们就是你的杀手锏。查询改写让检索词更对路用户问的问题往往不是最优的检索query。比如用户问怎么退货但文档里写的是退换货流程——用怎么退货去检索可能找不到。方式1LLM改写让模型把用户问题改写成更适合检索的queryfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserrewrite_prompt ChatPromptTemplate.from_template( 请将以下用户问题改写为更适合检索的查询词。要求1. 补充同义词和相关术语2. 使用文档中可能出现的正式表述3. 输出3个不同角度的检索query用户问题{question}改写结果每行一个)rewrite_chain rewrite_prompt | model | StrOutputParser()# 用户问怎么退货queries rewrite_chain.invoke({question: 怎么退货})# 输出# 1. 退换货流程 退货条件 退货申请# 2. 商品退货政策 无理由退货 退货时限# 3. 退货操作步骤 退款流程 售后服务然后对每个query分别检索合并结果去重。方式2HyDE假设文档嵌入HyDE的思路很巧妙先让模型猜一个答案用答案去检索。因为答案的表述更接近文档中的写法检索效果比用原始问题好。hyde_prompt ChatPromptTemplate.from_template( 请回答以下问题。即使你不确定也请给出你的最佳猜测。问题{question}回答)hyde_chain hyde_prompt | model | StrOutputParser()# 用户问怎么退货hypothetical_answer hyde_chain.invoke({question: 怎么退货})# 输出退货流程如下1. 在订单详情页点击申请退货2. 选择退货原因...# 用这段假设答案去检索比用怎么退货效果好很多results vectorstore.similarity_search(hypothetical_answer, k5)HyDE在我测试中对短query5个字以内的提升最明显平均召回率提升15%左右。但对已经很明确的query反而可能降低效果——模型猜的答案跑偏了检索方向也就偏了。方式3Step-back Prompting让模型先问一个更宏观的问题用宏观答案提供上下文再检索具体问题stepback_prompt ChatPromptTemplate.from_template( 你是一个问题抽象专家。请将以下具体问题抽象为一个更宏观的问题。具体问题{question}宏观问题)# 用户问2025年Q3北京办公室的差旅报销上限是多少# → 宏观问题公司差旅报销政策的总体框架是什么# 先检索宏观问题获取背景知识再检索具体问题多跳检索把复杂问题拆成多步单次检索只能处理单跳问题——答案在一个文档里。对于需要跨文档推理的多跳问题需要多步检索问题A公司CEO之前在哪工作Step 1检索A公司CEO是谁 → 找到张三是A公司CEOStep 2检索张三之前的工作经历 → 找到张三2020-2023年在B公司任CTO→ 最终答案A公司CEO张三之前在B公司任CTO实现方式1迭代检索def multi_hop_search(query, max_hops3): 多跳检索每一步基于上一步的结果生成新的query all_context [] current_query query for hop in range(max_hops): # 检索 results retriever.invoke(current_query) all_context.extend(results) # 让模型判断当前信息够不够回答原始问题 judge_prompt f基于以下信息能否回答原始问题 原始问题{query}已有信息{[r.page_content for r in all_context]}如果信息不够请给出下一步应该检索的问题。如果信息足够请回复ENOUGH。 下一步检索问题 next_query model.invoke(judge_prompt).content if ENOUGH in next_query: break current_query next_query return all_context实现方式2用Agent做多跳用LangChain的create_agent把检索工具交给Agent让它自己决定检索几次from langchain.agents import create_agentdef search_knowledge_base(query: str) - str: 搜索公司知识库 results retriever.invoke(query) return \n.join([r.page_content for r in results])agent create_agent( modelgpt-4o, tools[search_knowledge_base], system_prompt你是一个研究助手。对于复杂问题你可能需要多次检索。每次检索后判断信息是否足够。如果不够换一个query继续检索。最多检索5次。,)GraphRAG用知识图谱增强检索GraphRAG是微软在2024年提出、2025年持续火热的方向。核心思想把文档中的实体和关系抽取出来构建知识图谱用图的结构化信息增强检索。GraphRAG vs 向量RAG维度向量RAGGraphRAG检索方式语义相似度图遍历语义检索全局性问题差只能找到局部片段强图结构天然支持全局推理实体关系隐含在文本中显式建模建索引成本低高要抽取实体和关系适用场景具体事实问答全局分析、关系推理什么时候该用GraphRAG适合你的文档有大量实体关系人物关系、公司股权、供应链网络用户经常问全局性问题“我们公司所有产品的市场定位是什么”需要跨文档的实体关联推理不适合FAQ类知识库问题跟答案是一一对应的文档量小少于100篇向量检索够用了团队没有图数据库经验Neo4j等用LlamaIndex快速搭建GraphRAGfrom llama_index.core import KnowledgeGraphIndex, SimpleDirectoryReaderfrom llama_index.core.graph_stores import SimpleGraphStore# 加载文档documents SimpleDirectoryReader(./docs).load_data()# 构建知识图谱索引graph_store SimpleGraphStore()index KnowledgeGraphIndex.from_documents( documents, max_triplets_per_chunk10, # 每个chunk最多抽取10个三元组 graph_storegraph_store,)# 查询query_engine index.as_query_engine( include_textTrue, # 同时返回原文和图信息 response_modetree_summarize,)response query_engine.query(张三跟李四是什么关系)Agentic RAG让RAG自己思考Agentic RAG是2025-2026年最受关注的RAG方向——不再是固定的检索→生成流水线而是让Agent自主决定检索策略。Agentic RAG的核心能力查询路由判断问题该走哪个数据源知识库、数据库、API、搜索引擎自适应检索简单问题直接答复杂问题多步检索结果验证检索到的内容对不对不对就换方式再检自我修正发现回答有误自动重新检索和修正查询路由实现from enum import Enumfrom pydantic import BaseModelclass QueryRoute(str, Enum): knowledge_base knowledge_base # 公司知识库 database database # 数据库查询 web_search web_search # 网络搜索 direct_answer direct_answer # 直接回答不需要检索class RouteResult(BaseModel): route: QueryRoute reason: str rewritten_query: str# 路由判断route_prompt 分析用户问题决定应该从哪个数据源检索。- 公司内部信息产品、流程、政策→ knowledge_base- 数据统计、报表数据 → database - 实时信息、新闻、外部知识 → web_search- 简单闲聊、通用知识 → direct_answer用户问题{question}# 用LLM做路由判断route_result model.with_structured_output(RouteResult).invoke( route_prompt.format(question上季度销售额多少))# → routedatabase, rewritten_querySELECT SUM(amount) FROM sales WHERE quarterQ3完整的Agentic RAG架构from langchain.agents import create_agent# 工具1知识库检索def search_knowledge_base(query: str) - str: 搜索公司内部知识库获取产品、流程、政策等信息 results hybrid_retriever.invoke(query) return \n.join([r.page_content for r in results])# 工具2数据库查询def query_database(sql: str) - str: 执行SQL查询获取业务数据 # 实际项目对接数据库 return f查询结果...# 工具3网络搜索def search_web(query: str) - str: 搜索互联网获取实时信息 return f搜索结果...agent create_agent( modelgpt-4o, tools[search_knowledge_base, query_database, search_web], system_prompt你是一个智能助手拥有多种信息获取渠道。决策逻辑1. 先分析用户问题的类型和所需信息来源2. 选择最合适的工具获取信息3. 如果第一次检索结果不够换一个query再试4. 基于检索到的信息生成回答标注信息来源5. 如果检索不到相关信息明确告知用户重要不要编造答案所有信息必须基于检索结果。,)Agentic RAG的坑90%的Agentic RAG项目在生产中失败主要原因太复杂Agent的决策过程不透明出了问题排查困难成本高每次查询可能触发3-5次模型调用2-3次检索延迟大多步检索模型决策单次查询可能要10秒以上不稳定同样的问法Agent可能选不同的检索路径结果不一致我的建议先用Advanced RAG把基础打牢确认混合检索Rerank已经做到80%以上准确率再考虑引入Agent能力。而且先从查询路由开始——这是投入产出比最高的一步。Java类比Agentic RAG就像你把一个固定的MVC Controller改成了策略模式责任链——灵活性上去了但调试难度也上去了。先用固定流水线把业务跑通再逐步引入动态决策。高级架构选型决策树你的RAG遇到什么问题├── 检索不准 → 先优化基础检索混合Rerank别急着上高级架构├── 复杂问题答不对 → 查询改写 多跳检索├── 全局性问题回答差 → GraphRAG├── 需要多数据源 → 查询路由 Agentic RAG└── 都想要 → Modular RAG模块化组合记住一个原则能用简单方案解决的别用复杂方案。80%的RAG项目Advanced RAG就够了。GraphRAG和Agentic RAG是给那20%的复杂场景准备的。本篇要点要点说明查询改写LLM改写多查询HyDE让检索词更对路HyDE先让模型猜答案用答案检索效果更好多跳检索迭代检索串联跨文档信息GraphRAG实体关系图谱社区检测解决跨文档推理Agentic RAGAgent自主决策检索策略查询路由按问题类型选数据源投入产出比最高选择原则80%项目用Advanced RAG够别一上来就Agentic学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表