当前位置: 首页 > news >正文

【总结01】简单实现RAG的完整流程

目录

一、什么是 RAG?

1.1 核心定义

1.2 技术原理

二、完整流程代码实现


一、什么是 RAG?

1.1 核心定义

从本质上讲,RAG(Retrieval-Augmented Generation)是一种旨在解决大语言模型(LLM)“知其然不知其所以然”问题的技术范式。它的核心是将模型内部学到的“参数化知识”(模型权重中固化的、模糊的“记忆”),与来自外部知识库的“非参数化知识”(精准、可随时更新的外部数据)相结合。其运作逻辑就是在 LLM 生成文本前,先通过检索机制从外部知识库中动态获取相关信息,并将这些“参考资料”融入生成过程,从而提升输出的准确性和时效性 。

💡一句话总结:RAG 就是让 LLM 学会了“开卷考试”,它既能利用自己学到的知识,也能随时查阅外部资料。

1.2 技术原理

那么,RAG 系统是如何实现“参数化知识”与“非参数化知识”的结合呢?如下图所示,其架构主要通过两个阶段来完成这一过程:

(1)检索阶段:寻找“非参数化知识”

  • 知识向量化嵌入模型(Embedding Model)充当了“连接器”的角色。它将外部知识库编码为向量索引(Index),存入向量数据库
  • 语义召回:当用户发起查询时,检索模块利用同样的嵌入模型将问题向量化,并通过相似度搜索(Similarity Search),从海量数据中精准锁定与问题最相关的文档片段。

(2)生成阶段:融合两种知识

  • 上下文整合生成模块接收检索阶段送来的相关文档片段以及用户的原始问题。
  • 指令引导生成:该模块会遵循预设的Prompt指令,将上下文与问题有效整合,并引导 LLM(如 DeepSeek)进行可控的、有理有据的文本生成。


二、完整流程代码实现

知识库准备:

【代码】

from langchain_community.document_loaders import UnstructuredMarkdownLoader, UnstructuredPDFLoader from langchain_core.prompts import ChatPromptTemplate from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings, DashScopeEmbeddings from langchain_core.vectorstores import InMemoryVectorStore from langchain.chat_models import init_chat_model from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from dotenv import load_dotenv load_dotenv() # 1.加载本地文档 fil_path = "C:/Users/Administrator/Desktop/英雄联盟英雄芸阿娜全面介绍.pdf" loader = UnstructuredPDFLoader(fil_path) docs = loader.load() print(docs) # 2.文档切割 spliter = RecursiveCharacterTextSplitter( chunk_size=300, # 分段的最大字符数 chunk_overlap=5, # 分段之间允许重叠的字符数 separators=["\n\n", "\n", ",","。", "!", "?", ";", ":", "…", "—", "~"], # 分段的依据 length_function=len # 字符统计依据(函数) ) split_docs_chunks = spliter.split_documents(docs) print(split_docs_chunks) # 3.构建中文嵌入模型 # embeddings = HuggingFaceEmbeddings( # model_name="BAAI/bge-small-zh-v1.5", # model_kwargs={"device": "cpu"}, # 默认使用cpu # encode_kwargs={'normalize_embeddings': True} # 对生成的向量进行 L2 归一化 # ) # 这边使用DashScopeEmbeddings embeddings = DashScopeEmbeddings( model="text-embedding-v2" ) # 4.构建向量存储 vectorstore = InMemoryVectorStore(embeddings) vectorstore.add_documents(split_docs_chunks) # 添加文档到向量存储中: 将文档转换为向量并存储在内存中 retriever = vectorstore.as_retriever( search_kwargs={"k": 3} # 搜索时返回的向量数量 ) # 5.构建提示词 prompt = ChatPromptTemplate.from_messages( messages=[ {"role": "system", "content": "你是一个AI助手,请根据参考资料: {context},回答用户的问题"}, {"role": "human", "content": "我的问题是{questions}"}, ], ) # 6.初始化模型 model = init_chat_model( model="deepseek-chat", ) # 7. 构建链 str_parser = StrOutputParser() def format_docs(docs_list): reference_text = '[' for doc in docs_list: reference_text += doc.page_content reference_text += ']' return reference_text chain = {"context": retriever | format_docs, "questions": RunnablePassthrough()} | prompt | model | str_parser # 8.调用链 response = chain.stream(input="介绍一下芸阿娜的基础属性?") for chunk in response: print(chunk, end="", flush=True)

生成结果:

http://www.jsqmd.com/news/663963/

相关文章:

  • cvpr2025:基于大模型与小模型协同的多模态医学诊断方法
  • Twitter数据采集终极指南:Go语言实现的免API密钥爬虫解决方案
  • C++ 信号处理怎么实现?
  • 20、未来展望:AI编程范式、AGI挑战与职业发展路径
  • SQL高效实现两表数据对比_利用FULL OUTER JOIN查找差异
  • 【限时解密】SITS2026未公开AI编码评估矩阵(含CPU/内存/可维护性三维评分卡)
  • 用于分类基于因果性和局部相关性的网络
  • 【2026最严移动端合规红线】:SITS2026项目如何用AI生成通过GDPR/等保2.0/信创适配的代码?
  • 范围管理化技术需求跟踪矩阵与变更控制流程
  • 【限时开放】SITS2026内部生成模型微调手册泄露版:3类业务场景Prompt工程模板+12个生产环境Guardrail规则(仅剩87份)
  • SITS2026闭门研讨纪要首度流出:LLM+AST+SBOM三模态依赖分析框架(含GitHub私有仓库适配补丁)
  • Spec研发平台实践,从Vibe Coding到范式编程,打造AI领域专家
  • C++零基础到工程实战(4.3.3):vector数组访问与遍历
  • 【AGI真相警告】:为什么所有千亿参数模型仍只是“高级鹦鹉”?3层认知架构缺失正在扼杀真正智能
  • AI 热点资讯日报20260418
  • 从Prompt Engineering到AST级重写:2026奇点大会独家披露——主流AI代码引擎的底层编译流程差异,为什么Copilot Pro在微服务重构中失败率高达41.6%?
  • 冲刺规划管理化技术中的冲刺规划计划冲刺规划实施冲刺规划验证
  • LayerDivider:如何实现单张插画智能分层的终极解决方案
  • Hermes Agent 架构深度解析,三层骨架六系统,解锁AI智能体的工程化落地密码
  • 【AGI突破路线图】:20年AI架构师亲授3大技术瓶颈的破解路径与2025关键窗口期
  • ‌学工软件厂家怎么选?这几个关键点别忽视
  • 为什么你的AI生成代码上线3天就报错?7类隐性依赖漏洞,87%开发者从未检测过!
  • 数据分析避坑指南:皮尔逊相关系数=0,真的代表两个变量没关系吗?
  • CSS Grid布局如何实现响应式排列_通过grid-template-columns适配不同屏幕
  • Milliohm毫欧电子高精度合金电阻与电流采样解决方案
  • ORA-01877: string too long 报错修复与远程处理技巧
  • Go语言的context.WithCancel系统协调
  • ‌如何为智慧校园系统选型?用好多维数据才能真正优化管理流程
  • 从实验室到手术室,AGI医疗转化率暴跌87%的5个致命盲区及反脆弱架构设计
  • ROHM罗姆推出支持10Gbps以上高速I/F的ESD保护二极管的特点和应用方案