从零开始,用自己的电脑搭建第一个本地知识库问答机器人,大模型入门到精通,收藏这篇就足够了!
你是否曾遇到过这样的窘境:当你问一个通用大模型(比如DeepSeek)关于你公司内部文档、专业领域论文或者某个小众爱好的问题时,它总是始一本正经地胡说八道?
你是否曾遇到过这样的窘境:当你问一个通用大模型(比如DeepSeek)关于你公司内部文档、专业领域论文或者某个小众爱好的问题时,它总是始一本正经地胡说八道?
这不怪大模型,毕竟大模型在训练的时候没有学习过我们的专属知识。但如果我们能给它“开小灶”,让它在回答问题前,先“阅读”一下我们指定的资料,那效果会不会炸裂?
答案是肯定的!这就是我们今天要介绍的主角—— RAG(Retrieval-Augmented Generation,检索增强生成) 技术。
简单来说,RAG就像是给大模型配上了一个可以随时查阅的“开卷考试”资料库。当用户提问时,系统会先从这个资料库里检索出最相关的内容,然后把这些内容连同问题一起交给大模型,让它根据这些“参考资料”来生成最终答案。
这样做的好处显而易见:
-
- 提升准确性:有效减少模型“幻觉”,让回答都有据可循。
-
- 知识实时更新:只需更新我们的知识库,就能让模型掌握最新信息。
-
- 降低成本:无需重新训练一个庞大的模型,省时又省钱。
今天我们尝试使用全开源、全本地的工具,搭建一个属于我们自己的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一样调用本地模型。操作步骤:
- 前往 lmstudio.ai 下载并安装。
- 在应用内搜索并下载一个适合中文的开源模型(例如
Qwen
、Yi
或DeepSeek
系列的GGUF格式模型)。
- 切换到 “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)具有以下特点:
-
- 性能提升趋势的多样性
- • 大模型的能力可通过两种不同视角分析:
- • 扩展法则:以语言建模损失为指标,整体表现呈平滑、可预测的持续改进趋势,但可能存在边际效益递减现象。
- • 涌现能力:以任务性能为指标,在规模扩展时可能出现骤然跃升的趋势,且这种提升不可预测,一旦出现会带来显著的能力飞跃。
-
- 训练过程复杂性与成本高
- • 训练大模型通常需要更长时间,并需设计针对性的性能诊断方法(如GPT-4提出的可预测训练方法)。
- • 由于从头训练成本高昂,研究者常基于已公开模型(如LLaMA、FLAN-T5)进行继续预训练或微调,但需解决灾难性遗忘、能力均衡和任务特化等问题。
-
- 数据依赖与潜在局限
- • 训练数据在开始前需完成采集,可能导致信息过时或知识错误。因此,需要有效的微调策略以注入更新后的知识。
-
- 特定任务的显著优势
- • 大模型可能具备小模型无法实现的能力(如GPT-2的涌现能力),并在实际应用中表现出色(例如ChatGPT在对话任务中的突破性表现)。
-
- 学术关注度高
- • 以ChatGPT为代表的大语言模型应用引发了广泛关注,相关研究论文数量迅速增长。
看到这个结果了吗?大模型没有泛泛而谈,有使用了我们提供的《LLMBook.pdf》
中的内容来回答问题,但是回答的效果貌似没有最优,但是后续我们可以通过一些列的优化措施进行优化,提升RAG的效果。
总结与展望
我们已经成功地走完了一个最简RAG应用的完整流程,从数据处理到本地部署,全程DIY!
回顾一下我们的旅程:
-
- 环境配置:安装了必要的库,并启动了LM Studio本地服务。
-
- 知识检索 ®:我们提取、分块、向量化了PDF文本,并使用ChromaDB构建了一个可随时查询的本地知识库。
-
- 增强生成 (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 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。
L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。
L2阶段:攻坚篇丨RAG开发实战工坊
L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。
L3阶段:跃迁篇丨Agent智能体架构设计
L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。
L4阶段:精进篇丨模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。
L5阶段:专题集丨特训篇 【录播课】

四、资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!
更多推荐
所有评论(0)