🚀大模型落地开发实战指南!请关注微信公众号:「AGI启程号」 深入浅出,助你轻松入门!
📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN博客主页

概述

本文将以三种典型的 Retrieval-Augmented Generation(RAG)实现方式为主线,逐步剖析并提供完整代码示例:

  1. 默认 RAG:使用 LlamaIndex 的 VectorStoreIndex 与 OpenAI 默认嵌入模型快速上手(docs.llamaindex.ai, medium.com);
  2. 混合 RAG:在问答环节调用 DeepSeek-Chat,而向量化环节仍使用 OpenAI 嵌入,实现 DeepSeek + OpenAI Embedding 的混合流(ibm.com, machinelearningmastery.com);
  3. 全本地 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)

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)

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 应用。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐