1. RAG技术现状与挑战:为什么需要全方位优化?
在大模型应用开发领域,检索增强生成(RAG)已经成为连接外部知识库与LLM推理能力的标准范式。但实际落地过程中,开发者常会遇到这些典型问题:
- 用户提问"Milvus和Elasticsearch在向量检索性能上的差异"时,系统返回的却是两个产品的安装教程
- 处理"帮我对比Transformer和RNN在长文本处理中的表现"这类复合查询时,检索结果支离破碎
- 当知识库达到TB级别后,检索延迟从毫秒级飙升到秒级
这些痛点的本质在于:基础RAG流水线存在三个结构性缺陷:
- 语义鸿沟问题:用户查询的表述方式与知识库文档的嵌入向量存在分布差异
- 上下文碎片化:固定大小的文本分块(chunk)割裂了原本连贯的技术说明
- 流程僵化:对所有查询采用相同的处理流程,无法适配简单查询与复杂需求的差异
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 查询增强:让问题命中知识靶心
2.1 假设性问题生成(Hypothetical Questions)
这个方法的核心思想是:与其直接匹配"问题-文档",不如先匹配"问题-问题"。我们在知识库预处理阶段就为每个文档块生成若干可能的问题。
实操示例(使用LlamaIndex):
python复制from llama_index.core import VectorStoreIndex
from llama_index.core.query_engine import SubQuestionQueryEngine
# 预处理阶段生成假设性问题
documents = [...] # 加载文档
questions = []
for doc in documents:
prompt = f"基于以下技术文档,生成3个用户可能提出的问题:\n{doc.text}"
generated_qs = llm.generate(prompt, n=3)
questions.extend([(q, doc) for q in generated_qs])
# 构建问题-文档映射索引
question_index = VectorStoreIndex.from_documents(questions)
# 查询时先检索相似问题
def
