为什么需要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轮迭代调优。

发表评论 取消回复