面试官经常会问:
“你们的 RAG 系统是怎么处理用户输入的?能识别不同类型的查询吗?”
很多候选人听到这类问题,会本能地回答:
“我们用 embedding 生成 query 向量,然后去检索。”
但这其实只是最表层的做法。 真正成熟的 RAG 系统,在进入检索之前, 都有一个独立的 Query 理解层(Query Understanding Layer)。
它决定了系统能否“听懂问题”, 也决定了检索、生成两个模块能否“找对方向”。
一、Query 理解模块的职责
如果用一句话总结这个模块的作用,就是:它是 RAG 系统的“调度员”和“翻译官”。
用户的提问往往是不完整、不清晰的, 比如“它能部署在本地吗”“昨天的数据更新了吗”“这篇论文主要讲什么”。
Query 理解模块要做的,就是把这种自然语言问题, 转化为系统能够理解、检索、路由的标准化 Query。
具体包括四个核心任务:
- 识别用户意图;
- 提取关键实体与约束;
- 改写或扩展 Query;
- 选择合适的检索策略或路由。
这四步的质量,直接决定了整个系统的“启动精度”。
二、意图识别:先搞清楚用户到底想干什么
这一步是 Query 理解的起点。
系统要能判断这条 Query 是属于哪种类型:
- 问事实(Factoid)
- 问解释(Definition)
- 问比较(Comparison)
- 问推理(Reasoning)
- 问计算或数据库查询
举个例子: “上季度 AI 领域融资最多的公司是哪家?” 这显然属于“事实型+时间约束”的查询, 系统就可以提前知道: 要去时间相关的数据源找答案。
实现方法一般有两类:
- 基于规则或模板的分类(正则、关键词);
- 基于轻量模型的意图分类器(BERT、LLM Prompt 分类)。
在大规模应用中,这一层可以显著提高检索准确率, 避免系统“误解问题”。
三、关键词与实体提取:从自然语言中提炼信息结构
第二步,是从Query中抽取关键要素。
它包括:
- 专有名词(人名、机构、术语)
- 时间与地点(昨天、上月、上海)
- 数值和约束条件(Top10、最近30天)
这些信息会被传递到检索模块,用于:
- 过滤搜索范围;
- 限定文档来源;
- 匹配结构化数据字段。
比如: Query:“昨天《独家新闻》里的化学制品行业关注度是多少?” 系统提取出:
- 时间:昨天
- 来源:《独家新闻》
- 实体:化学制品行业
- 指标:关注度
那么检索时就能直接带上这些过滤条件, 精准命中文档,而不是去“全局搜索”。
技术实现可以用 NER(实体识别)、依存句法分析、正则匹配等, 有些场景还会结合知识图谱做实体对齐。
四、Query 改写与扩展:让问题更容易被检索理解
这是 Query 理解中最有技术含量的一环。
很多用户提问简短模糊,比如:
- “它能跑在本地吗?”
- “这篇论文结果好吗?”
- “这家公司做什么的?”
这类问题如果不结合上下文,检索器根本不知道“它”指代什么、“这篇”是哪篇。
优化方法有两种:
- Query 改写(Query Rewriting): 用小模型或 LLM 对Query进行语义补全或重写, 比如将“它能跑在本地吗?”改写为“RAG 系统是否支持在本地部署运行”。 这样检索器能更好地理解语义。
- Query 扩展(Query Expansion): 生成若干语义相似的子Query,如同义词、近义表达。 比如对“RAG 优化”扩展成“RAG 性能改进”“RAG 检索优化”“RAG 生成质量提升”等。 这些改写后的Query会被并行检索,提高召回率。
在多轮对话场景中,还要加上上下文融合。 系统需识别代词指代关系(如“它”“他”“这件事”), 结合前几轮对话内容推断当前Query的完整含义。
五、检索路由:决定Query该走哪条管线
Query 理解的最后一步,是路由决策。
当系统知道了用户意图和关键要素,就能判断:
- 该Query是否走默认向量检索;
- 是否需要转向联网搜索;
- 是否调用计算模块或数据库查询;
- 是否拒答(如敏感内容、违规信息)。
比如:
- “帮我算下今年AI投资总额” → 路由到计算模块;
- “GPT-4发布的日期” → 走知识库检索;
- “你喜欢马斯克吗?” → 属于闲聊,走对话模型;
- “昨天某股票的走势” → 调用实时数据接口。
这一步的设计,决定了系统是否智能。 实现上可以采用多分类模型、规则路由、或Prompt式判断。
在大规模生产环境中,通常采用多策略融合: 优先模型判断,不确定时回退到规则策略。
六、优化策略与常见挑战
RAG 的 Query 理解模块虽然看似逻辑清晰,但落地时有不少坑。
- 过度解析问题: 有时解析得太复杂,反而误判意图。 工程上要设置置信度阈值: 如果模型信心低,就直接走原始Query检索, 避免错判导致召回偏移。
- 模糊与歧义处理: 用户问题不明确时,可以采用“宽召回+LLM推理”策略, 让生成阶段再做精简。 但要控制噪声,避免信息冗余。
- 持续学习与自我修正: 对于解析错误的Query,可通过用户反馈或离线标注进行再训练。 这属于RAG系统中常见的自适应优化手段。
- 跨语言与领域适配: 如果系统支持多语种或跨领域(医疗、法律), 解析模块需引入多语模型或领域词典, 确保意图识别和实体提取在不同语境下依旧准确。
七、模块间的协同:Query 理解是系统的“引擎前盖”
理解 Query,不是孤立的,它与其他三个模块密切相关。
- 它为在线召回模块提供更精确的搜索意图;
- 它帮助生成模块获得上下文线索;
- 它依赖离线解析模块提供的元数据结构。
一个成熟的 RAG 系统,往往在 Query 理解阶段就决定了后续质量。 解析准,检索少走弯路;解析错,后面全白搭。
所以在系统调优时,Query 理解的准确率(Intent Accuracy、Entity Recall) 是必须重点监控的指标。
八、面试答题模板:一分钟说清Query模块
当面试官问:“你们的 RAG 是怎么处理 Query 的?” 可以这样答:
“我们在系统中设计了独立的 Query 理解模块,负责意图识别、实体提取、Query 改写与检索路由。 在意图识别上,我们采用轻量分类模型区分查询类型; 在实体提取上结合 NER 与正则实现时间、地点、专有名词抽取; 在 Query 改写上,通过 LLM 对用户问题进行语义扩展, 同时结合上下文信息做代词消解。 最终根据解析结果选择不同检索路径,比如知识库检索或计算模块调用。 这种设计显著提升了整体召回准确率和系统鲁棒性。”
这种回答逻辑完整、落地感强, 能体现出你既懂算法,也懂工程。
九、结语:RAG的灵魂在理解,而非生成
很多人以为RAG的核心是检索或生成, 但真正决定系统表现的,往往是Query 理解的能力。
理解得好,后面的检索就像打靶——稳、准、狠。 理解得差,模型再强也答不对。
“RAG的智能,不在模型,而在解析。”