文章总结: 本文是关于RAG(检索增强生成)AI开发的实战指南。首先解释了RAG是什么,它通过结合信息检索和文本生成技术来提升大模型回答的时效性与准确性,并能解决知识过时和模型幻觉等问题。接着,文章详细介绍了RAG开发的三个关键阶段:数据准备(包括清洗、分块和选择合适的Embedding模型)、知识检索(如向量检索和混合检索)以及答案生成(提示词工程和对话管理)。此外,还具体讲解了从基础RAG到高级RAG再到引入智能体(AgenticRAG)的实现方法与进阶技巧。 综合评分: 85 文章分类: AI安全,安全开发,技术标准,解决方案,数据安全
RAG AI开发实战
原创
凌木LSJ 凌木LSJ
AI技术LSJ
2026年3月29日 14:59 浙江
1. 什么是 RAG ?
RAG(Retrieval-Augmented Generation)
- 检索增强生成,是一种结合信息检索(Retrieval)和文本生成(Generation)的技术
- RAG技术通过实时检索相关文档或信息,并将其作为上下文输入到生成模型中,从而提高生成结果的时效性和准确性。
- 用户输入+检索信息 ——〉 大模型输入 ——〉大模型生成
RAG 的优势是什么?
- 解决知识时效性问题:大模型的训练数据通常是静态的,无法涵盖最新信息,而RAG可以检索外部知识库实时更新信息
- 减少模型幻觉:通过引入外部知识,RAG能够减少模型生成虚假或不准确内容的可能性
- 提升专业领域回答质量:RAG能够结合垂直领域的专业知识库,生成更具专业深度的回答
- 生成内容的溯源(可解释性)
2 Embedding
在人工智能领域,向量表征(Vector Representation)是核心概念之一。通过将文本、图像、声音、行为甚至复杂关系转化为高维向量(Embedding),AI系统能够以数学方式理解和处理现实世界中的复杂信息。这种表征方式为机器学习模型提供了统一的“语言”。
- 将文本转成一组 N 维浮点数,即文本向量又叫 Embeddings
- 向量之间可以计算距离,距离远近对应语义相似度大小
3 RAG入门到精通
3.1 Naive RAG(基础RAG)
Query -> 检索 -> Prompt -> LLM -> 回复
langchain实现
langchain 0.3.27 langchain-community 0.3.27 langchain-core 0.3.79 langchain-huggingface 0.3.1 langchain-mcp-adapters 0.1.13
from langchain_community.document_loaders import PyPDFLoaderfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_core.vectorstores import InMemoryVectorStore# 解析PDFfile_path = "./data/考核办法.pdf"loader = PyPDFLoader(file_path)docs = loader.load()# 拆分文档text_splitter = RecursiveCharacterTextSplitter( chunk_size=200, chunk_overlap=50, add_start_index=True)all_splits = text_splitter.split_documents(docs)# 索引建立vector_store = InMemoryVectorStore(embeddings)ids = vector_store.add_documents(documents=all_splits)#检索results = vector_store.similarity_search("客户经理每年评聘申报时间是怎样的?")print(results[0])
3.2 Advanced RAG(增强RAG)
User Query 用户查询
↓
Query Rewrite 问题重写
↓
Vector Retrieval 问题检索
↓
Rerank 重排序
↓
Context 内容生成
↓
LLM Answer
1)加载RAG向量数据库,转换成检索工具
2)查询重写
from langchain_openai import ChatOpenAIfrom langchain.prompts import ChatPromptTemplatefrom langchain.schema.output_parser import StrOutputParserllm = ChatOpenAI( api_key = os.getenv("DASHSCOPE_API_KEY"), base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1", model = "deepseek-v3" )rewrite_prompt = ChatPromptTemplate.from_template("""Rewrite the user query to be better for document retrieval.User query:{query}Rewritten query:""")query_rewriter = rewrite_prompt | llm | StrOutputParser()
3)检索文档与重排序
from sentence_transformers import CrossEncoder
docs = retriever.invoke(rewritten_query)#使用重排序模型model_dir = "/model/BAAI/bge-reranker-large"reranker = CrossEncoder("BAAI/bge-reranker-large", cache_folder=model_dir)
pairs = [[query, d.page_content] for d in docs]scores = reranker.predict(pairs)reranked_docs = [ doc for _, doc in sorted( zip(scores, docs), key=lambda x: x[0], reverse=True )]top_docs = reranked_docs[:3]
4)内容生成
3.3 Agentic RAG(Agent RAG)
User Question
│
▼
Agent (LLM Reasoning)
│
┌───┴───────────────┐
│ │
▼ ▼
Use Retriever Direct Answer
│
▼
Retrieve Docs
│
▼
LLM Generate Answer
1)构建检索 工具Tool
from langchain.tools import tool
@tooldef search_knowledge(query: str) -> str: """Search information from the knowledge base"""
docs = retriever.invoke(query) return "\n".join([d.page_content for d in docs])
2)创建Agent(langchain0.3 与 langchain1.x创建Agent方式不同)
from langchain.agents import AgentExecutor, create_react_agentfrom langchain.agents import initialize_agent, AgentTypefrom langchain import hub
tools = [search_knowledge]prompt = hub.pull("hwchase17/react")agent = create_react_agent( llm, tools, prompt)agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True)
3)运行 Agentic RAG
- RAG开发中三个关键阶段
1)数据准备
这是RAG的基础,决定了检索的“原料”质量。
-
数据清洗与预处理:移除特殊字符、统一编码、纠正OCR错误。如果原始数据包含大量噪声(如网页导航栏、PDF页眉页脚),检索时容易引入干扰。
-
文档解析与分块:
-
分块策略:块太大,检索精度下降,且容易塞入无关信息;块太小,上下文缺失,语义不完整。常见的策略包括按语义(段落、章节)切分、重叠切分(Overlap)或基于文档结构(Markdown层级)的智能切分。
-
元数据附加:为每个块添加来源、时间戳、章节标题、文件名等元数据。这在后续检索中可以进行过滤,并提升答案引用的准确性。
-
Embedding模型选择:针对特定领域(选择或微调Embedding模型,比使用通用模型能显著提升检索的召回率。
2)知识检索
这一阶段的目标是在海量数据中快速、精准地找到与问题最相关的上下文。
-
检索范式:
-
向量检索:利用语义相似度,适合处理同义词、多轮转述等模糊匹配问题。
-
混合检索:结合向量检索(语义)和关键词检索,是当前工业界的主流做法。
-
检索后处理:
-
重排序:初检可能召回Top-10个块,但大模型的上下文窗口有限。通过一个精排模型(如Cross-Encoder)对这些块进行重新打分,筛选出最相关的Top-K(通常是5个),能极大提升答案的准确性。
3)答案生成
这是RAG的最后一步,也是用户直接感知价值的一环。
- 提示词工程:需要明确指令,如“严格基于以下上下文回答,如果上下文没有提及,请直接说不确定”,以减少大模型产生幻觉或过度发挥的风险。同时,要求在回答中引用来源(如“根据[文档A]第3页…”),以增强可信度。
- 对话与记忆管理:在多轮对话场景下,需要考虑将历史对话压缩或摘要,再与当前问题一起进行检索。否则,当用户问“那它的价格呢?”时,系统无法知道“它”指代什么。
- Agentic RAG:在复杂场景下,单一的向量检索可能不够。可以引入智能体(Agent)自主决策:是先查数据库,还是调用API(应用程序接口),或者进行多跳检索(Multi-hop,即先检索出A文档,从A文档中提取实体再去检索B文档)。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AI技术LSJ 凌木LSJ 凌木LSJ《RAG AI开发实战》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论