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

001:简单 RAG 入门

简单 RAG 入门

本文是 refine-rag 系列教程的第一篇,带你体验一下 RAG 的简单流程。
本文所有代码都在:https://github.com/zonezoen/refine-rag

前言

在学习 RAG 之前,我们先来对比一下 RAG 和 AI Agent 的概念,只有先了解这些概念,才能继续往前推进。

什么是RAG

简单来说就是允许你查阅书本,再来回答问题。

标准一点来说(也是简化过的):

  1. 整理原始文档,比如:pdf、word、excel、ppt 等
  2. 把整理好的文档内容进行清洗、切块
  3. 把切块好的数据向量化,并存储到向量数据库中
  4. 用户问一个问题
  5. 把这个问题的字符串向量化
  6. 然后根据【问题向量】去向量数据库查找相似的知识点
  7. 把查到的知识和问题一起传递给大模型
  8. 大模型根据查到的知识点来回答问题
    当然了,这个流程也是简化过的,不过不用在意,这个只是便于你理解这个概念。

还有你需要知道的是:RAG 可以解决一些时效性的问题和幻觉问题。相比 Fing-turning 微调,RAG 更节省成本,而且数据可以溯源,可以知道相关的知识点源自哪个文档。

或许看这个流程图或许会更直观一点
RAG案例流程白色背景

什么是AI Agent

如果把 RAG 比作是查知识库,那么 AI Agent 就是可以执行具体任务的助手。主要包括这几个特点:

  1. 规划:规划步骤,比如说买机票可以先查日期,再查天气,然后买机票
  2. 记忆:可以记住聊天上下文
  3. 工具使用:可以决定使用查天气的 API 还是执行一段 Python 代码
  4. 执行:规划好之后,可以执行具体的任务,并根据结果来执行下一步任务

主流RAG框架

目前主流的 RAG 框架有 LlamaIndex、langchain、Dify 等,我这边选择前面两个来做个示例:

大模型也分别选了 千问和 DeepSeek 来做展示:

环境准备

1. Python 环境要求

  • Python 3.8 或更高版本(推荐 3.10+)
  • 建议使用虚拟环境

2. 安装依赖包

LlamaIndex 示例所需依赖:

pip install llama-index
pip install llama-index-llms-dashscope
pip install llama-index-embeddings-dashscope
pip install dashscope
pip install python-dotenv

LangChain 示例所需依赖:

pip install langchain
pip install langchain-community
pip install langchain-huggingface
pip install langchain-deepseek
pip install langchain-text-splitters
pip install python-dotenv
pip install sentence-transformers  # HuggingFace embeddings 依赖

一键安装所有依赖:

pip install llama-index llama-index-llms-dashscope llama-index-embeddings-dashscope \dashscope langchain langchain-community langchain-huggingface \langchain-deepseek langchain-text-splitters python-dotenv sentence-transformers

3. API Key 配置

本文所有代码都在:https://github.com/zonezoen/refine-rag
创建 .env 文件,放到项目根目录:

# DeepSeek API 配置
DEEPSEEK_API_KEY=sk-xxx
# 千问
DASHSCOPE_API_KEY=sk-yyy

如何获取 API Key:

  • DeepSeek: https://platform.deepseek.com/
  • 千问(DashScope): https://dashscope.aliyun.com/

LlamaIndex 示例(千问)

文件名: 01_LlamaIndex.py

import os
from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
from llama_index.embeddings.dashscope import DashScopeEmbedding
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settingsfrom dotenv import load_dotenvos.environ['USER_AGENT'] = 'my-rag-app/1.0'
load_dotenv()
DATA_DIR = "./data"# 1. 配置 LLM
Settings.llm = DashScope(model_name=DashScopeGenerationModels.QWEN_MAX,api_key=os.getenv("DASHSCOPE_API_KEY")
)# 2. 设置嵌入模型
Settings.embed_model = DashScopeEmbedding(model_name='text-embedding-v2',api_key=os.getenv("DASHSCOPE_API_KEY"),timeout=60,  # 增加超时时间max_retries=5  # 增加重试次数
)# 3. 加载与索引
if not os.path.exists(DATA_DIR):print(f"错误:未找到路径 {DATA_DIR}")
else:# 建议直接使用绝对路径,避免相对路径带来的困扰print("正在加载文档...")documents = SimpleDirectoryReader(DATA_DIR).load_data()print("正在创建索引(此步涉及 Embedding 接口调用)...")index = VectorStoreIndex.from_documents(documents)# 4. 查询query_engine = index.as_query_engine()print("正在提问...")response = query_engine.query("2026春运时间是什么时候?")print(f"AI 回答结果:\n{response}")

运行方式:

python 01_LlamaIndex.py

运行结果:

正在加载文档...
正在创建索引(此步涉及 Embedding 接口调用)...
正在提问...
AI 回答结果:
2026年春运的时间是从2月2日至3月13日。

LangChain 示例(DeepSeek)

文件名: 02_LangChain_DeepSeek.py

import os
from dotenv import load_dotenvos.environ['USER_AGENT'] = 'my-rag-app/1.0'
load_dotenv()# 1. 加载数据
from langchain_community.document_loaders import TextLoader# 随便复制一些即时新闻放到 txt 文件中,例如:https://baike.baidu.com/item/2026%E5%B9%B4%E6%98%A5%E8%BF%90/66941026?fromModule=home_hotspot
loader = TextLoader(file_path="data/a.txt",encoding="utf-8"  # 如果是中文文件,确保使用 utf-8 编码
)docs = loader.load()# 2. 文档分块
from langchain_text_splitters import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
all_splits = text_splitter.split_documents(docs)# 3. 设置嵌入模型
# 使用本地 HuggingFace 模型(推荐,免费且稳定),可能需要科学网络
from langchain_huggingface import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5",  # 中文模型model_kwargs={'device': 'cpu'},encode_kwargs={'normalize_embeddings': True}
)# 4. 存到向量数据库中,为了方便测试,这里使用内存数据库
from langchain_core.vectorstores import InMemoryVectorStorevector_store = InMemoryVectorStore(embeddings)
vector_store.add_documents(all_splits)# 5. 构建用户查询,针对前面的即时新闻提问
question = "2026春运时间是什么时候?"# 6. 在向量数据库中搜索最相似的文档
retrived_docs = vector_store.similarity_search(question, k=3)
docs_content = "\n\n".join(doc.page_content for doc in retrived_docs)# 7. 构建提示模板
from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("""基于以下上下文回答问题。如果没有结果,就说没有找到对应信息。上下文: {context}问题: {question}回答:"""
)# 8. 把结果和问题都发给大模型,生成答案
from langchain_deepseek import ChatDeepSeekllm = ChatDeepSeek(model="deepseek-chat",  # DeepSeek API 支持的模型名称temperature=0.7,  # 随机性max_tokens=2048,  # 最大输出长度api_key=os.getenv("DEEPSEEK_API_KEY")  # 从环境变量加载API key
)answer = llm.invoke(prompt.format(question=question, context=docs_content))
print(answer.content)  # 只打印回答内容

运行方式:

python 02_LangChain_DeepSeek.py

运行结果:

2026年春运时间为2026年2月2日至2026年3月13日。

学习路径

  1. 简易RAG 学习
  2. LCEL 语法学习
  3. LangChain 读取数据
    1. LangChain 读取文本数据
    2. LangChain 读取图片数据
    3. LangChain 读取 PDF 数据
    4. LangChain 读取表格数据
  4. 文本切块
  5. 向量嵌入
  6. 向量存储
  7. 检索前处理
  8. 索引优化
  9. 检索后处理
  10. 响应生成
  11. 系统评估

项目地址

本文所有代码示例都在 GitHub 开源:

https://github.com/zonezoen/refine-rag

欢迎 Star 和 Fork,一起学习 RAG 技术!

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

相关文章:

  • 2026年3月铠装热电偶厂家推荐,聚焦企业综合实力竞争力 - 品牌鉴赏师
  • 2026年热门的澳洲移民方案规划指南 公司推荐:澳洲移民方案规划机构优质公司推荐 - 品牌宣传支持者
  • 2025年值得信赖的国外氧化镁直销品牌TOP榜,国外靠谱的氧化镁厂家技术引领与行业解决方案解析 - 品牌推荐师
  • 小牛津面料好用吗,看看这些专业厂家和品牌的口碑 - mypinpai
  • 收藏!小白程序员必看:Agent智能体为何如此重要?解锁大模型落地新价值
  • 数控喷泉新风尚,2026年广场口碑工程案例分享,数控喷泉选哪家综合实力与口碑权威评选 - 品牌推荐师
  • 多模态RAG入门指南:从理论到实践,收藏这份学习资料!
  • 盘点2026年欧美小牛津面料品牌供应商,前十名有哪些 - 工业品网
  • 2026冶金行业防爆温控箱优质产品推荐榜 - 优质品牌商家
  • 2026年3月智能家居沙盘厂家推荐,精准检测与稳定性能深度解析 - 品牌鉴赏师
  • 深圳香蜜湖推荐天御香山花园房产中介靠谱吗 - 工业设备
  • 收藏|2026 年 AI 行业最大机会,毫无疑问就在应用层!
  • 2026年汽车托运平台哪个比较靠谱,来看看海口华夏通优势在哪 - 工业推荐榜
  • 2026年私家车托运价格大揭秘,哪家费用低且服务好 - myqiye
  • 2026军工场景防爆控制柜优质供应商推荐榜:兰州防爆配电箱/防爆led吊灯/防爆led泛光灯/选择指南 - 优质品牌商家
  • 在RHEL 9.4上使用cephadm部署Ceph集群指南 - wanghongwei
  • 2026年无锡评价高的反冲洗过滤器加工厂排名,专业制造商全解析 - mypinpai
  • 牛客刷题-Day33
  • PipelinR:在Java中实现优雅的CQRS架构
  • openclaw问题修复 auth.profiles.ollama:default.mode: Invalid input
  • Touch_key调试相关
  • 靠谱的煤炭破碎机厂家怎么选,天丰机械厂符合要求吗? - 工业品网
  • 农业物联网基于STM32的LoRa无线通信系统设计与实现
  • 2026年3月氨水浓度计厂家推荐,聚焦企业综合实力竞争力 - 品牌鉴赏师
  • 2026年3月西安工厂搬家品牌推荐,精准服务与稳定性能深度解析 - 品牌鉴赏师
  • 2026年3月全自动保龄设备厂家推荐,行业测评与选择指南 - 品牌鉴赏师
  • Flutter 3.35 For HarmonyOS 如何正确的使用第三方库
  • Mysql---多表查询
  • 音箱选型指南:从入门到高端,总有一款适配你的听音需求 - 包罗万闻
  • 2026年长沙装饰装修团队优选推荐:美迪装饰 - 2026年企业推荐榜