RAG Engine
RAG Engine 是 AI Service 中负责检索增强生成的核心组件,整合 Retriever、Reranker、Contextual Compression 和 Citation Generation,为 LLM 提供外部知识。
#type / concept
#status / evergreen
#tech / ai
#tech / architecture
[!info] related notes
- 所属 MOC: RAG Engineering MOC
- 子组件: Retriever, [[reranker|Reranker]], Vector Database
- 上游: RAG 概念
RAG Engine
一句话定义
RAG Engine 是 AI Service 中负责检索增强生成的核心组件。它把 Retriever、Reranker、Contextual Compression 和 Citation Generation 组装成一个完整的管线,为 LLM 提供外部知识。
核心原理
管线结构
用户问题
│
▼
Query Rewriting (查询改写,可选)
│
▼
Retriever (检索)
├─ 语义搜索 (向量)
└─ 关键词搜索 (BM25)
│
▼
Reranker (重排序)
│
▼
Contextual Compression (上下文压缩)
│
▼
注入到 LLM 上下文
│
▼
LLM 生成回答 + 引用
Python 实现
class RAGEngine:
def __init__(self, retriever, reranker, compressor, llm):
self.retriever = retriever
self.reranker = reranker
self.compressor = compressor
self.llm = llm
async def query(self, question: str, context: dict = None) -> RAGResponse:
# 1. 检索
chunks = await self.retriever.retrieve(question, top_k=20)
# 2. 重排序
ranked = await self.reranker.rerank(question, chunks, top_k=5)
# 3. 压缩
compressed = await self.compressor.compress(question, ranked)
# 4. 构建上下文
context_text = "\n\n".join([
f"[{i+1}] {c.text}" for i, c in enumerate(compressed)
])
# 5. 生成回答
prompt = f"""基于以下参考资料回答问题。标注信息来源。
参考资料:
{context_text}
问题: {question}"""
answer = await self.llm.chat(prompt)
return RAGResponse(
answer=answer,
sources=[{"id": c.id, "title": c.metadata.get("title")} for c in compressed],
)
常见坑
- 只用一种检索: 语义搜索找不到精确术语
- 不做重排序: 向量搜索的排序不一定最优
- 不做压缩: 检索结果太多浪费 token
- 不标注来源: 无法验证回答的可信度