你是否曾遇到过这样的窘境:当你问一个通用大模型(比如DeepSeek)关于你公司内部文档、专业领域论文或者某个小众爱好的问题时,它总是始一本正经地胡说八道?

这不怪大模型,毕竟大模型在训练的时候没有学习过我们的专属知识。但如果我们能给它“开小灶”,让它在回答问题前,先“阅读”一下我们指定的资料,那效果会不会炸裂?

答案是肯定的!这就是我们今天要介绍的主角—— RAG(Retrieval-Augmented Generation,检索增强生成) 技术。

简单来说,RAG就像是给大模型配上了一个可以随时查阅的“开卷考试”资料库。当用户提问时,系统会先从这个资料库里检索出最相关的内容,然后把这些内容连同问题一起交给大模型,让它根据这些“参考资料”来生成最终答案。

这样做的好处显而易见:

    1. 提升准确性:有效减少模型“幻觉”,让回答都有据可循。
    1. 知识实时更新:只需更新我们的知识库,就能让模型掌握最新信息。
    1. 降低成本:无需重新训练一个庞大的模型,省时又省钱。

今天我们尝试使用全开源、全本地的工具,搭建一个属于我们自己的RAG问答应用。我们只需要一台能跑得动本地模型的电脑,就能让AI成为我们专属的知识问答专家!

准备工作:我们的“兵器库”

在开始之前,我们需要先配置好开发环境。打开你的终端,运行以下命令来安装所有必需的Python库:

pip install pymupdf openai==1.99.0 numpy chromadb pydantic==2.11.0
  • pymupdf: 用于从PDF文件中提取文字。
  • openai: 虽然名字是OpenAI,但它是一个通用的API客户端,我们用它来连接本地部署的LM Studio服务
  • numpy: 用于处理数值计算,是Python数据科学的基石。
  • chromadb: 一款非常轻量、易于上手的开源向量数据库,负责存储和检索我们的知识。

同时,请确保你已经安装并运行了 LM Studio

什么是LM Studio?
LM Studio是一款能让你在个人电脑上(Windows/Mac/Linux)轻松下载、管理和运行各种开源大模型的软件。它还提供了一个与OpenAI API兼容的服务端点,让我们可以像调用官方API一样调用本地模型。

操作步骤

    1. 前往 lmstudio.ai 下载并安装。
    1. 在应用内搜索并下载一个适合中文的开源模型(例如 QwenYiDeepSeek 系列的GGUF格式模型)。
    1. 切换到 “developer” 标签页,选择你下载好的模型,然后点击 "开发者"标签,将"status"切换为start。


第一部分:RAG之“R” - 构建智能检索系统

这部分是RAG的基石,我们将完成从原始文档到可检索知识库的转化。

第1步:知识注入 - 从PDF中提取文本

万丈高楼平地起,我们的第一步是建立知识库。这里,我们以一个PDF文件(PDF文件需要那些内容都是文字形式的,如果PDF内容都是图片将无法解析)为例,你可以将其换成任何你希望AI学习的中文文档。

import fitz  # PyMuPDF库
import os

defextract_text_from_pdf(pdf_path):
"""从PDF文件中提取纯文本内容。"""
try:
        doc = fitz.open(pdf_path)
        full_text = ""
for page in doc:
            full_text += page.get_text("text")
        doc.close()
return full_text
except Exception as e:
print(f"读取PDF失败: {e}")
returnNone

# 为了方便演示,如果PDF不存在,我们直接使用一段示例文本
# 你可以创建自己的 "data" 文件夹和 "人工智能简史.pdf" 文件
ifnot os.path.exists("data"):
    os.makedirs("data")

pdf_path = "data/LLMBook.pdf"
if os.path.exists(pdf_path):
     extracted_text = extract_text_from_pdf(pdf_path)
else:
print("PDF文件未找到,将使用内置的示例文本。")
    extracted_text = """
2022 年底,ChatGPT震撼上线,大语言模型技术迅速“席卷”了整个社会,人
工智能技术因此迎来了一次重要进展。面对大语言模型的强大性能,我们不禁要
问:支撑这些模型的背后技术究竟是什么?这一问题无疑成为了众多科研人员的
思考焦点。
必须指出的是,大模型技术并不是一蹴而就,其发展历程中先后经历了统计语言模型、神经网络语言模型、预训练语言模型等多个发展阶段,每一步的发展都凝结了众多科研工作者的心血与成果。作为大语言模型技术的重要推动者,OpenAI公司引领了本次技术变革,让我们再次回顾其针对大模型技术的研发历程。2015年,OpenAI 公司正式创立,开始探索通用人工智能的技术路线。早期的OpenAI团队围绕强化学习、多模态、语言模型等几个重要方向进行了深入研究。其中,由Ilya Sutskever 领导的团队主要关注语言模型的研究。当谷歌2017年推出基于注意力机制的Transformer模型后,OpenAI团队迅速洞察到了其潜在的优越性,认为这种模型可能是一种大规模可扩展训练的理想架构。基于此,OpenAI团队开始构建GPT系列模型,并于2018年推出了第一代GPT模型—GPT-1,能够通过“通用文本训练-特定任务微调”的范式去解决下游任务。接下来,GPT-2和GPT-3模型通过扩大预训练数据和模型参数规模,显著提升了模型性能,并且确立了基于自然语言形式的通用任务解决路径。在GPT-3的基础上,OpenAI又通过代码训练、人类对齐、工具使用等技术对于模型性能不断升级,推出了功能强大的GPT-3.5系列模型。2022年11月,ChatGPT正式上线,能够以对话形式解决多种任务,使得用户能够通过网络API体验到语言模型的强大功能。2023年3月,OpenAI推出了标志性的GPT-4模型,将模型能力提升至全新高度,并将其扩展至拥有多模态功能的GPT-4V模型。
反观GPT系列模型的发展历程,有两点令人印象深刻。第一点是可拓展的训练架构与学习范式:Transformer架构能够拓展到百亿、千亿甚至万亿参数规模,并且将预训练任务统一为预测下一个词这一通用学习范式;第二点是对于数据质量与数据规模的重视:不同于BERT时代的预训练语言模型,这次大语言模型的成功与数据有着更为紧密的关系,高质量数据、超大规模数据成为大语言模型的关键基础。上述的思路看似简单,但能够从早期众多的技术路线中寻找到这条路线,并且坚定地去执行这条路线,这就是OpenAI成功的关键所在。回顾OpenAI的早期论文,实际上早在GPT-2的论文中,就深入讨论了基于大规模文本预训练的通用任务学习范式,让人不禁感叹OpenAI团队的技术前瞻性。虽然这种研究模式很难复制,但是值得我们去思考、学习。
"""

# print(extracted_text[:200]) # 打印前200个字符看看
第2步:文本分块 - 把“大象”装进“冰箱”

直接把整篇文章丢给模型是不现实的,太长的文本会超出模型的“记忆”上限(上下文窗口)。因此,我们需要把长文本切分成一个个更小、更易于管理和检索的“知识块”(Chunks)。

defchunk_text(text, chunk_size=300, overlap=50):
"""
    将文本按指定大小和重叠率进行分块。

    参数:
    text (str): 待分块的文本。
    chunk_size (int): 每个块的理想字符数。
    overlap (int): 相邻块之间的重叠字符数,有助于保持上下文连续。

    返回:
    list[str]: 文本块列表。
    """
    chunks = []
    start = 0
while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end])
        start += chunk_size - overlap
return chunks

text_chunks = chunk_text(extracted_text)

print(f"文本被分成了 {len(text_chunks)} 个块。")
print("--- 第一个块示例 ---")
print(text_chunks[0])
第3步:向量化 - 让文字变成“数学”

计算机不理解文字,只懂数字。为了让计算机能“理解”文本并比较其相似度,我们需要将文本块转换成一串数字,这个过程叫做嵌入(Embedding),生成的结果就是向量(Vector)

我们将使用本地LM Studio服务来生成这些向量。你需要确保在LM Studio中加载的模型支持生成嵌入向量(大部分模型都支持)。

from openai import OpenAI
import numpy as np

# 配置客户端,使其指向你的本地LM Studio服务器
client = OpenAI(base_url="http://localhost:1234/v1", api_key="not-needed")

defcreate_embeddings(chunks, model="text-embedding-qwen3-embedding-0.6b"):
"""使用本地模型为文本块列表创建向量嵌入。"""
# 注意:LM Studio可能默认使用其加载的聊天模型进行嵌入,
# model参数可能不会切换模型,但仍建议填写以保持代码清晰。
    response = client.embeddings.create(
        model=model,
input=chunks
    )
# 从响应中提取嵌入向量
    embeddings = [np.array(data.embedding) for data in response.data]
return embeddings

# 为我们所有的文本块创建向量
chunk_embeddings = create_embeddings(text_chunks)

print(f"成功为 {len(chunk_embeddings)} 个文本块创建了向量。")
print(f"每个向量的维度是: {len(chunk_embeddings[0])}")
第4步:向量入库 - 用ChromaDB构建知识索引

现在我们有了文本块和对应的向量,是时候把它们存入专业的向量数据库ChromaDB了。这就像是为我们的知识建立了一个高效的索引,方便后续快速查找。

import chromadb

# 1. 初始化ChromaDB客户端
# 这会在你的项目目录下创建一个 .chroma 文件夹来持久化存储数据
chroma_client = chromadb.Client()

# 2. 创建一个集合(Collection),类似于数据库中的一张表
# 如果集合已存在,先删除再创建,确保我们从一个干净的状态开始
collection_name = "ai_history_db"
if collection_name in [c.name for c in chroma_client.list_collections()]:
    chroma_client.delete_collection(name=collection_name)

collection = chroma_client.create_collection(name=collection_name)

# 3. 将文本块、向量和唯一ID存入集合
# 我们需要为每个块创建一个唯一的ID
chunk_ids = [str(i) for i inrange(len(text_chunks))]

collection.add(
    embeddings=chunk_embeddings,
    documents=text_chunks,
    ids=chunk_ids
)

print(f"知识库 '{collection_name}' 创建并填充完毕!")
第5步:语义检索 - 智能查询

知识库建好了,现在来试试效果。我们定义一个函数,它接收一个问题,将其向量化,然后在ChromaDB中查询最相似的文本块。

defsemantic_search(query, k=3):
"""
    在ChromaDB中执行语义搜索。

    参数:
    query (str): 用户的查询问题。
    k (int): 需要返回的最相关文本块的数量。

    返回:
    list[str]: 包含最相关文本块的列表。
    """
# 1. 将查询问题也转换成向量
    query_embedding = create_embeddings([query])[0]

# 2. 在集合中查询最相似的 k 个结果
    results = collection.query(
        query_embeddings=[query_embedding.tolist()], # 查询向量需要是 list 格式
        n_results=k
    )

return results['documents'][0]

# 测试一下!
my_query = "大模型有什么特点?"
relevant_chunks = semantic_search(my_query)

print(f"对于问题: '{my_query}'")
print("\n--- 检索到的相关信息如下 ---")
for i, chunk inenumerate(relevant_chunks):
print(f"【相关片段 {i+1}】\n{chunk}\n")

第二部分:RAG之“G” - 结合上下文生成答案

检索(R)部分已经完成!我们成功地根据问题找到了相关的“参考资料”。现在,我们进入生成(G)部分,让本地大模型基于这些资料,给出精准的回答。

第6步:构建提示词(Prompt)

这是RAG的“灵魂”所在。我们不能只把问题丢给模型,而是要创建一个包含“指令”、“上下文(检索到的知识)”和“用户问题”的完整提示词。

defbuild_prompt(query, context_chunks):
"""构建最终的提示词。"""

    context = "\n\n".join(context_chunks)

# 一个优秀的提示词模板至关重要
    prompt_template = f"""
你是一个严谨的AI问答助手。请严格根据下面提供的“参考资料”来回答用户的问题。
不要编造任何参考资料中没有的信息。如果资料无法回答问题,请回复:“根据我手头的资料,我无法回答这个问题。”

--- 参考资料 ---
{context}

--- 用户问题 ---
{query}

--- 你的回答 ---
"""
return prompt_template

# 构建最终的提示词
final_prompt = build_prompt(my_query, relevant_chunks)
print("--- 发送给大模型的最终提示词 ---")
print(final_prompt)
第7步:生成最终答案

万事俱备,只欠东风!我们将这个精心构造的提示词发送给在LM Studio中运行的大模型,获取最终答案。

defgenerate_response(prompt, model="qwen3-14b-128k"):
"""使用本地大模型生成回答。"""

# client 已经在前面初始化过了
    response = client.chat.completions.create(
        model=model, # 'qwen3-14b-128k' 是LM Studio的默认占位符
        messages=[
            {"role": "user", "content": prompt}
        ],
        temperature=0.7, # temperature可以控制回复的创造性,对于问答,低一点好
    )
return response.choices[0].message.content

# 获取最终答案!
final_answer = generate_response(final_prompt)

print("\n\n============ 最终回答 ============")
print(final_answer)

示例输出可能如下:

============ 最终回答 ============

根据提供的资料,大模型(Large Language Model, LLM)具有以下特点:

    1. 性能提升趋势的多样性
  • • 大模型的能力可通过两种不同视角分析:
  • 扩展法则:以语言建模损失为指标,整体表现呈平滑、可预测的持续改进趋势,但可能存在边际效益递减现象。
  • 涌现能力:以任务性能为指标,在规模扩展时可能出现骤然跃升的趋势,且这种提升不可预测,一旦出现会带来显著的能力飞跃。
    1. 训练过程复杂性与成本高
  • • 训练大模型通常需要更长时间,并需设计针对性的性能诊断方法(如GPT-4提出的可预测训练方法)。
  • • 由于从头训练成本高昂,研究者常基于已公开模型(如LLaMA、FLAN-T5)进行继续预训练或微调,但需解决灾难性遗忘、能力均衡和任务特化等问题。
    1. 数据依赖与潜在局限
  • • 训练数据在开始前需完成采集,可能导致信息过时或知识错误。因此,需要有效的微调策略以注入更新后的知识。
    1. 特定任务的显著优势
  • • 大模型可能具备小模型无法实现的能力(如GPT-2的涌现能力),并在实际应用中表现出色(例如ChatGPT在对话任务中的突破性表现)。
    1. 学术关注度高
  • • 以ChatGPT为代表的大语言模型应用引发了广泛关注,相关研究论文数量迅速增长。

看到这个结果了吗?大模型没有泛泛而谈,有使用了我们提供的《LLMBook.pdf》中的内容来回答问题,但是回答的效果貌似没有最优,但是后续我们可以通过一些列的优化措施进行优化,提升RAG的效果。

总结与展望

我们已经成功地走完了一个最简RAG应用的完整流程,从数据处理到本地部署,全程DIY!

回顾一下我们的旅程:

    1. 环境配置:安装了必要的库,并启动了LM Studio本地服务。
    1. 知识检索 ®:我们提取、分块、向量化了PDF文本,并使用ChromaDB构建了一个可随时查询的本地知识库。
    1. 增强生成 (G):我们将检索到的知识与用户问题整合成一个强大的提示词,并交由本地大模型生成了有理有据的答案。

这只是一个开始。基于这个框架,我们可以继续探索:

  • 更复杂的知识库:加载多种格式的文件(Word, TXT, HTML),甚至整个网站。
  • 更优化的分块和检索策略:尝试不同的分块大小,或者更先进的检索算法。
  • 更强大的模型:在LM Studio中尝试不同的开源大模型,看看哪个效果最好。
  • 构建用户界面:使用Streamlit或Gradio为你的RAG应用创建一个漂亮的网页界面。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

Logo

更多推荐