Skip to content

RAG 查询路由:什么时候该走检索

挂载了 RAG ≠ 每个请求都走向量数据库。好的系统会先判断"这个问题是否需要外部知识",再决定走不走检索。


核心结论:不是所有问题都需要 RAG

场景是否走 RAG原因
闲聊问候("你好")LLM 自己就能应对
通用知识("Python 是什么")LLM 训练数据已包含
公司私有知识("年假制度")LLM 不知道内部文档
最新信息("今天的新闻")LLM 有知识截止日期
精确数据查询("订单状态")❌ 不走向量库走 SQL/API 更合适
创意写作("写一首诗")检索反而限制创造力

怎么判断是不是私有知识?三种策略

策略一:先检索,用分数说话(⭐ 生产首选)

核心思路:不猜,每次都检索,根据相关性分数决定是否使用结果。

python
def smart_rag(query, retriever, llm):
    # 每次都检索
    results = retriever.similarity_search_with_score(query, k=5)
    top_score = results[0][1] if results else 0
    
    if top_score > 0.75:
        # 高相关 → 知识库命中 → 用 RAG
        context = "\n".join([doc.page_content for doc, _ in results])
        return rag_answer(query, context, llm)
    else:
        # 低相关 → 知识库没有 → LLM 直接答
        return direct_answer(query, llm)

为什么推荐:向量检索只需 10-20ms,成本远低于判断错误的代价。

策略二:LLM 意图分类

关键在于告诉 LLM 知识库里有什么类目

python
ROUTER_PROMPT = """根据用户问题,判断是否需要检索知识库。

我们的知识库包含:
- 公司规章制度(考勤、年假、报销等)
- 产品文档(功能说明、API 文档)
- 技术方案(架构设计、部署文档)

涉及以上内容 → 返回 "rag"
通用知识/闲聊 → 返回 "direct"

用户问题:{query}"""

策略三:双重验证(高要求场景)

策略一 + 策略二组合:先 LLM 分类,再检索验证分数。适用于金融、法律等对准确性要求极高的场景。


方案选型

方案准确度延迟开销推荐场景
每次检索 + 分数阈值⭐⭐⭐⭐+15ms大多数场景(首选)
LLM 意图分类⭐⭐⭐+300ms知识库边界清晰
双重验证⭐⭐⭐⭐⭐+315ms金融、法律等高要求场景

💡 一句话总结:不要试图"猜"用户是不是在问私有知识——每次都检索,用分数说话。只有当检索本身成本很高时,才值得加一层路由判断。

坚持是一种品格