为什么需要RAG?

大语言模型(LLM)虽然强大,但存在知识截止日期和幻觉问题。检索增强生成(Retrieval-Augmented Generation, RAG)通过将外部知识库与LLM结合,实现了基于私有数据的精准问答,是企业AI应用落地的核心架构之一。

RAG的核心流程

1. 文档分割:将长文档切分为300-800token的语义块(Chunk),使用重叠窗口保持上下文连贯。常见策略包括按段落分割、递归分割、语义分割等。

2. 向量化(Embedding):将文本向量表示,常用模型如OpenAI text-embedding-3-large、Cohere embed-v3、开源BGE-M3等,维度通常在768-1536之间。

3. 向量存储:将Embedding存入向量数据库(Milvus、Pinecone、Weaviate、pgvector),支持ANN近似最近邻检索。

4. 检索与重排:用户查询向量化后检索Top-K候选,再通过Cross-Encoder重排序提高精度。

5. 生成回答:将检索结果作为上下文注入LLM Prompt中生成最终回答。

企业级RAG的五大优化策略

混合检索:结合向量语义检索与BM25关键词检索,通过RRF(Reciprocal Rank Fusion)融合分数,兼顾语义理解与精确关键词匹配。

查询改写:使用LLM对用户原始问题进行改写、扩展、分解(Multi-Query),将复杂问题拆分为多个子查询,提高检索召回率。

路由机制:根据问题类型路由到不同知识库模块,如财务问题→财务文档库、HR问题→制度手册库,减少无关信息干扰。

自适应分块:根据文档类型动态调整分块策略——技术文档用大chunk保持逻辑完整,对话记录用小chunk便于精确定位。

反馈闭环:收集用户点击率、满意度评分、后续追问信号,持续优化检索模型与Prompt模板。

实战:基于LangChain的RAG pipeline

from langchain_community.vectorstores import Milvus
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vectorstore = Milvus.from_documents(docs, embeddings, connection_args={"host":"localhost","port":"19530"})

retriever = vectorstore.as_retriever(search_type="mmr", search_kwargs={"k": 6})

prompt = ChatPromptTemplate.from_template("""基于以下上下文回答问题:
{context}

Question: {question}

请用中文回答,并标注信息来源。""")

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | ChatOpenAI(model="gpt-4")
    | StrOutputParser()
)

评测与迭代

RAG系统的效果评测应关注四个维度:检索相关性(Precision@K、MRR)、回答忠实度(Faithfulness,通过LLM-as-Judge评估)、回答相关性(Answer Relevance)、上下文利用率(Context Utilization)。推荐使用RAGAS或TruLens进行自动化评测。从Baseline到生产级系统,通常需要3-5轮迭代调优。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部