RAG Engine

RAG Engine 是 AI Service 中负责检索增强生成的核心组件,整合 Retriever、Reranker、Contextual Compression 和 Citation Generation,为 LLM 提供外部知识。

#type / concept #status / evergreen #tech / ai #tech / architecture

[!info] related notes

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],
        )

常见坑

  1. 只用一种检索: 语义搜索找不到精确术语
  2. 不做重排序: 向量搜索的排序不一定最优
  3. 不做压缩: 检索结果太多浪费 token
  4. 不标注来源: 无法验证回答的可信度

参考资料

创建于 2026/6/30 更新于 2026/7/15