大模型学习应用 7: 基于LlamaIndex 的三种RAG实现方式
本文介绍了三种RAG(检索增强生成)实现方式,帮助开发者根据需求灵活选择。首先,默认RAG使用LlamaIndex的VectorStoreIndex结合OpenAI嵌入模型快速上手;其次,混合RAG在问答环节调用DeepSeek-Chat,向量化仍用OpenAI嵌入,实现性能优化;最后,全本地RAG使用DeepSeek问答和本地Hugging Face嵌入,实现纯本地化部署。此外,文章还简要探讨了
🚀大模型落地开发实战指南!请关注微信公众号:「AGI启程号」 深入浅出,助你轻松入门!
📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN博客主页
目录
概述
本文将以三种典型的 Retrieval-Augmented Generation(RAG)实现方式为主线,逐步剖析并提供完整代码示例:
- 默认 RAG:使用 LlamaIndex 的
VectorStoreIndex与 OpenAI 默认嵌入模型快速上手(docs.llamaindex.ai, medium.com); - 混合 RAG:在问答环节调用 DeepSeek-Chat,而向量化环节仍使用 OpenAI 嵌入,实现 DeepSeek + OpenAI Embedding 的混合流(ibm.com, machinelearningmastery.com);
- 全本地 RAG:问答环节继续使用 DeepSeek,同时将嵌入替换为本地 Hugging Face Sentence-Transformer,实现 DeepSeek + 本地 Embedding 的纯本地化部署(docs.llamaindex.ai, docs.llamaindex.ai)。
最后还将简要介绍其他可选方案与优化思路,帮助读者根据需求灵活选型。
1. 快速上手:默认 RAG 实现
1.1 安装与初始化
安装核心依赖:
pip install llama-index # LlamaIndex 核心:contentReference[oaicite:3]{index=3}
pip install openai python-dotenv # OpenAI 嵌入与 .env 支持
在代码首部,通过 load_dotenv() 加载 OpenAI Key,并导入基础组件:
import os
from dotenv import load_dotenv
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
load_dotenv() # 读取 .env 中的 OPENAI_API_KEY
1.2 默认 RAG 代码示例
# 1. 加载文档
documents = SimpleDirectoryReader(input_dir="./data/llamaindex_data").load_data()
# 2. 创建索引(默认使用 text-embedding-ada-002)
index = VectorStoreIndex.from_documents(documents)
# 3. 构建查询引擎并提问
query_engine = index.as_query_engine()
response = query_engine.query("deepseek v3 有多少参数")
print(response)
- 该流程中,LlamaIndex 会自动调用 OpenAI 的
text-embedding-ada-002模型生成向量,并将结果存入内部向量库,实现最简 RAG (medium.com, docs.llamaindex.ai)。
2. 深度定制:DeepSeek + OpenAI Embedding
在部分场景下,我们希望借助 DeepSeek 的聊天能力,同时仍依赖 OpenAI Embedding 完成检索。
import os
from llama_index.core import Settings, SimpleDirectoryReader, GPTVectorStoreIndex
from llama_index.llms.openai_like import OpenAILike
from llama_index.embeddings.openai import OpenAIEmbedding
# 1. 定义 Key 与 Base URL
deepseek_key = "sk-xxxx"
deepseek_url = "https://api.deepseek.com/v1"
openai_key = os.getenv("OPENAI_API_KEY")
# 2. 全局注入 DeepSeek Chat
Settings.llm = OpenAILike(
model="deepseek-chat",
api_key=deepseek_key,
api_base=deepseek_url,
is_chat_model=True,
is_function_calling_model=False,
) # DeepSeek `/chat/completions` 端点:contentReference[oaicite:6]{index=6}
# 3. 全局注入 OpenAI Embedding
Settings.embed_model = OpenAIEmbedding(
model="text-embedding-ada-002",
api_key=openai_key,
api_base="https://api.openai.com/v1",
)
# 4. 加载文档并创建向量索引
docs = SimpleDirectoryReader("data/llamaindex_data").load_data()
index = GPTVectorStoreIndex.from_documents(docs)
# 5. 执行检索增强生成
response = index.as_query_engine().query("请简要总结以上文档的核心观点。")
print(response)
- 此方案 检索由 OpenAI Embedding 完成,生成由 DeepSeek 提供,兼顾了两者优势(ibm.com, machinelearningmastery.com)。
3. 全本地化:DeepSeek + 本地 HuggingFace Embedding
针对无 OpenAI Key 或对本地化部署有需求的场景,可在向量化环节切换至 Hugging Face Sentence-Transformer。
import os
from llama_index.core import Settings, SimpleDirectoryReader, GPTVectorStoreIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.openai_like import OpenAILike
# —— 一、全局注入 ——
Settings.embed_model = HuggingFaceEmbedding(
model_name="sentence-transformers/all-MiniLM-L6-v2"
) # 本地生成 384 维向量:contentReference[oaicite:8]{index=8}
Settings.llm = OpenAILike(
model="deepseek-chat",
api_key="sk-xxxx",
api_base="https://api.deepseek.com/v1",
is_chat_model=True,
is_function_calling_model=False,
)
# —— 二、加载文档并构建索引 ——
docs = SimpleDirectoryReader("data/llamaindex_data").load_data()
index = GPTVectorStoreIndex.from_documents(docs)
# —— 三、检索增强生成 ——
query = "请简要总结以上文档的核心观点。"
response = index.as_query_engine().query(query)
print("=== 回答 ===")
print(response)
- 嵌入完全本地化,无需任何 API Key;生成依旧委托 DeepSeek,实现轻量化部署(docs.llamaindex.ai, docs.llamaindex.ai)。
4. 其他可选方案与优化
- 全本地 LLM+本地嵌入:若无需 DeepSeek,可将 LLM 也切换为本地模型(如 Mistral、LLaMA2 via
HuggingFaceLLM),一行代码注入即可完成端到端离线 RAG(docs.llamaindex.ai, youtube.com)。 - 向量数据库升级:可将检索层替换为 Milvus、Chroma、Weaviate 等专业向量库,通过 LlamaIndex 的
StorageContext接入,提升检索性能与可扩展性(docs.llamaindex.ai, llamahub.ai)。 - Chunk 策略:可自定义分块器(
TextSplitter)和过滤逻辑,以平衡上下文粒度与生成质量(stackoverflow.com)。 - 多模型混合:在同一流水线中,针对不同任务(摘要、问答、分类)可灵活切换 LLM 或 Embedding 模型,构建企业级 RAG Workflows(machinelearningmastery.com)。
结语
本文通过三种典型示例,演示了从最简到深度定制再到本地化部署的 RAG 实现路径。读者可根据自身资源与业务需求,选择最合适的方式进行落地,并在此基础上持续优化检索策略、模型组合以及向量存储架构,以构建高效、稳定且可扩展的 RAG 应用。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)