发表时间:2026-08-31 14:04

RAG增强Agent实践:检索增强生成让智能体更懂你的业务

大模型的知识来源于训练数据,存在两个固有局限:知识截止日期(不知道最新信息)和领域深度不足(对企业的内部数据一无所知)。 RAG(Retrieval-Augmented Generation,检索增强生成)通过在生成回答前检索外部知识库,让Agent突破这些局限,获得实时、专业、可控的知识能力。

一、 RAG的核心原理

1.1 什么是RAG

RAG的工作原理可以用一个简单类比理解:

大模型像一个知识渊博但记忆有限的专家。当你问一个专业问题时,他可能:

• 凭记忆回答(可能过时或不准确)

• 说 "我不确定"

RAG的做法是:在专家回答之前,先去图书馆找到相关资料递给他,让他参考这些资料再回答。这样既利用了专家的理解和表达能力,又保证了信息的准确性和时效性。

1.2 RAG的工作流程

完整的 RAG流程包含四个阶段:

阶段一:知识入库( Indexing)

1. 收集文档( PDF、Word、HTML、数据库等)

2. 文档分块(将长文档切分为语义完整的段落)

3. 向量化(用 Embedding模型将文本块转为语义向量)

4. 存储(将向量存入向量数据库)

阶段二:查询检索( Retrieval)

1. 用户提问向量化

2. 在向量数据库中检索语义最相似的文本块

3. 返回 Top-K(通常3-5个)相关文本块

阶段三:上下文增强( Augmentation)

1. 将检索到的文本块与用户问题组合

2. 构建增强提示词: "基于以下信息回答用户问题:[检索内容] 用户问题:[问题]"

阶段四:生成回答( Generation)

1. 大模型基于增强提示词生成回答

2. 标注信息来源

3. 返回给用户

1.3 RAG vs 微调

对比维度RAG微调( Fine-tuning)
知识更新实时更新,只需更新知识库需要重新训练
计算成本推理时检索,成本较低训练成本高
可解释性可追溯信息来源黑盒,难以追溯
准确性依赖检索质量,可能召回不准模型内化知识,稳定但可能过时
适用场景频繁变化的业务知识稳定的领域知识 /风格学习
数据安全知识库可权限控制知识融入模型权重,难以删除

实践建议: RAG和微调不是非此即彼,可以组合使用——微调让模型理解领域语言风格,RAG提供最新业务知识。

二、 Agent中的RAG集成

2.1 将RAG作为Agent工具

最直接的集成方式是将 RAG检索作为一个工具供Agent调用:

# RAG工具定义 def search_knowledge_base(query: str, top_k: int = 5) -> str: """ 搜索企业知识库,获取与查询最相关的信息。 当需要查询企业内部文档、产品手册、 FAQ、历史案例时使用此工具。 参数: - query: 搜索关键词或问题 - top_k: 返回结果数量,默认5条 """ # 向量化查询 query_embedding = embedding_model.encode(query) # 向量检索 results = vector_db.search( query_embedding, top_k=top_k, filter={"department": "medical"} # 可选的元数据过滤 ) # 格式化结果 formatted = [] for i, result in enumerate(results): formatted.append( f"[来源{i+1}] {result.metadata['source']}\n" f"内容:{result.content}\n" f"相关度:{result.score:.2f}\n" ) return "\n".join(formatted) # 注册为Agent工具 tools = [ Tool( name="知识库搜索", func=search_knowledge_base, description="搜索企业内部知识库,获取产品文档、操作手册、历史案例等信息" ) ]

Agent在需要业务知识时主动调用此工具,而非依赖模型自身的训练知识。

2.2 RAG增强的Agent工作流

集成 RAG后,Agent的典型工作流:

用户:医院随访系统中,糖尿病患者的高血糖预警阈值是多少? Agent思考:这是企业知识库中的配置信息,需要调用知识库搜索 Agent行动:search_knowledge_base("糖尿病 高血糖 预警阈值") Agent观察: [来源1] 系统配置手册v2.3 内容:空腹血糖 >7.0mmol/L或餐后2小时血糖>11.1mmol/L时触发高血糖预警 Agent回答:根据系统配置手册v2.3,糖尿病患者的空腹血糖>7.0mmol/L或餐后2小时血糖>11.1mmol/L时,系统会触发高血糖预警。

2.3 多知识库RAG

企业可能有多个独立知识库, Agent需要根据问题类型选择检索哪个:

knowledge_bases = { "产品文档": product_doc_db, "客户案例": case_study_db, "技术规范": tech_spec_db, "FAQ": faq_db } def smart_search(query: str) -> str: """智能选择知识库并检索""" # 用分类模型判断问题类型 category = classifier.predict(query) # 在对应知识库中检索 db = knowledge_bases[category] results = db.search(embedding_model.encode(query), top_k=5) return format_results(results)

三、 RAG系统的关键优化

3.1 文档分块策略

分块质量直接影响检索效果,是 RAG系统最关键的优化点。

固定长度分块

按固定字数(如 500字)切分,实现简单但可能截断语义。

语义分块

按段落、标题、句子边界切分,保持语义完整:

# 基于标题的分块 def chunk_by_heading(document): chunks = [] current_heading = "" current_content = "" for line in document.split("\n"): if line.startswith("#"): if current_content: chunks.append({ "heading": current_heading, "content": current_content }) current_heading = line current_content = "" else: current_content += line + "\n" if current_content: chunks.append({ "heading": current_heading, "content": current_content }) return chunks

递归分块

先按大结构(章节)分,再按小结构(段落)分,兼顾上下文和精度。

推荐配置:

• 块大小: 300-800字(中文),512-1024 tokens(英文)

• 重叠:块之间保留 50-100字重叠,避免边界信息丢失

• 元数据:每个块标注来源文档、页码、章节标题

3.2 检索质量优化

混合检索

结合向量检索和关键词检索:

def hybrid_search(query, top_k=5): # 向量检索(语义匹配) vector_results = vector_db.search( embedding_model.encode(query), top_k=top_k * 2 ) # 关键词检索(精确匹配) keyword_results = keyword_db.search(query, top_k=top_k * 2) # 融合排序 merged = reciprocal_rank_fusion(vector_results, keyword_results) return merged[:top_k]

重排序( Reranking)

初检后用更精确的模型重排序:

def search_with_rerank(query, top_k=5): # 初检:快速召回top-20 candidates = vector_db.search( embedding_model.encode(query), top_k=20 ) # 重排:用cross-encoder精排 reranked = reranker.rank(query, candidates) return reranked[:top_k]

查询改写

将用户原始查询改写为更适合检索的形式:

• 扩展缩写和同义词

• 将口语化表达转为专业术语

• 将复合问题拆分为多个子查询

3.3 上下文窗口管理

当检索结果过多时,需要智能管理上下文:

• 按相关度排序,优先放入高相关度内容

• 对长文本块进行摘要后再放入

• 动态调整放入数量,确保不超过模型上下文限制

四、 RAG Agent的评估

4.1 评估指标

指标说明理想值
检索准确率检索结果中相关内容的比例>80%
检索召回率相关内容被检索到的比例>90%
回答准确率回答内容的正确性>85%
引用准确率引用的来源与回答对应性>90%
拒答率应能回答但拒答的比例<10%
幻觉率回答中编造信息的比例<5%

4.2 评估方法

人工评估

构建测试问题集,人工评估每个回答的准确性和完整性。适合小规模验证。

自动化评估

用 LLM作为评估器,自动评分回答质量:

def evaluate_answer(question, answer, reference): eval_prompt = f""" 问题: {question} 回答: {answer} 参考答案: {reference} 请从以下维度评分( 1-5分): 1. 准确性:回答是否与参考答案一致 2. 完整性:回答是否覆盖了所有关键信息 3. 引用准确性:引用的来源是否正确 """ return llm.evaluate(eval_prompt)

RAG是让Agent真正理解企业业务的关键技术。没有RAG的Agent只能依赖通用知识,难以在专业场景中提供准确回答。通过精心的分块策略、检索优化和上下文管理,RAG增强的Agent可以达到甚至超过人类专家的回答质量。随着向量检索技术的不断进步,RAG系统的效果将持续提升,成为企业AI应用的标配能力。

准备开始您的数字化项目?

留下需求,我们会在一个工作日内与您联系。

联系我们