0基础在Windows本地搭建“DeepSeek”私人知识库 (附源码) 

文章摘要

嗯,用户让我生成一个关于在Windows系统上本地搭建DeepSeek私人知识库的教程摘要。他们要求大约150字,关键词密度在3%左右。首先,我得仔细阅读用户提供的文章内容,了解关键步骤和要点。 文章主要分为四个部分:准备环境、搭建项目、安装依赖库、运行知识库。用户可能希望摘要涵盖这些部分,但需要简洁明了。关键词方面,需要包含“Windows”、“DeepSeek”、“本地知识库”、“Ollama”、“Python”、“知识图谱”等,确保每词出现不超过总字数的3%。 首先,摘要应该提到使用Ollama和Python构建知识库,强调完全免费、无需联网和数据不出本地的特点。接着,分步骤概述搭建过程,包括准备环境、搭建项目文件夹、安装依赖库和运行知识库。每个步骤中提到关键操作,比如下载Ollama、安装Python、组织文件结构、安装包和运行脚本。 需要注意的是,摘要要保持连贯,逻辑清晰,同时控制在150字左右。可能需要合并一些步骤,避免过于详细,但又要涵盖所有关键点。最后,总结强调用户可以根据实际情况调整配置,适合不同需求。 现在,我得将这些内容浓缩成一段简洁的文字,确保涵盖所有重要步骤和注意事项,同时控制关键词的数量。这样用户就能快速了解搭建过程,无需阅读整篇文章。 </think> 这篇文章介绍了在Windows环境下本地搭建“DeepSeek”私人知识库的方法,完全免费且无需联网,数据也不上传至外部。文章分为四个主要部分:准备环境、知识库搭建、依赖库安装及运行。以下是摘要: 1. **准备环境**: - 安装Ollama作为AI知识脑,选择12G以上内存运行14b模型,或7b模型以优化速度。 - 安装Python 3.10或3.11,并勾选“Add Python to PATH”。 2. **知识库搭建**: - 创建项目文件夹并组织文档,推荐使用指定文件结构。 - 使用`build_kb.py`扫描文件夹,将PDF、Word、PPTX、Excel等文件转化为文本块,存储在`kb_chunks.npy`中。 3. **安装依赖库**: 在`build_kb.py`目录下运行`pip install`命令,安装所需库,包括`faiss-cpu`、`numpy`、`pypdf`等。使用清华镜像源加速下载。 4. **运行知识库**: - 在命令窗口运行`python build_kb.py`,构建知识库并生成向量索引。 - 运行`chat_rag.py`启动本地AI助手,支持与Ollama进行交互,回答问题并生成内容。 文章还提到了常见问题及解决方案,例如SSL错误、卡顿问题及新文档更新,用户可以根据实际需求调整配置。

[保姆级教程] 0基础Windows本地搭建“DeepSeek”私人知识库 (附源码)
在这个AI爆发的时代,你是否想过把电脑里的几百份PDF、Word文档变成一个可以随时提问的“超级大脑”?而且完全免费、不用联网、数据不出本地!

今天手把手教大家利用 Ollama + DeepSeek + Python 搭建一个本地 RAG(检索增强生成)系统。不用怕代码,照着做就行!

🛠️ 第一步:准备环境 (Windows篇)
我们需要两个核心工具:Ollama(运行AI的大脑)和 Python(处理文档的管家)。
1. 安装 Ollama

  • 下载:访问 Ollama官网 下载 Windows 版本并安装。
  • 验证:安装完成后,打开电脑的“命令提示符”(按 Win+R,输入 cmd,回车)。
  • 拉取模型:在黑框里输入以下命令并回车(这一步需要联网下载模型,约 9GB):
ollama pull DeepSeek-r1:14b复制代码

💡 注意:如果不差显存(12G以上)用 14b 效果最好;如果电脑配置一般(8G/16G内存),建议把命令换成 ollama pull deepseek-r1:7b,速度会快很多。
2. 安装 Python

  • 下载:访问 Python官网 下载最新的 Python 3.10 或 3.11 版本。
  • 关键一步:安装界面最下方一定要勾选 “Add Python to PATH” (添加到环境变量),然后点 Install Now。

📂 第二步:搭建项目文件夹 (把资料喂给AI)
这一步最关键!我们要把资料整理好,放在项目文件夹里。
DeepSeek 不挑食,你可以把文件直接散乱地堆在根目录,也可以建各种子文件夹分类存放,程序会自动把它们全部扫描出来。

1. 推荐的目录结构
在桌面上新建一个文件夹叫 MyLocalAI,建议参照下面的结构存放文件:

MyLocalAI/  (你的项目主文件夹)│├── build_kb.py          <-- (等下要创建的代码文件1,负责吃书)├── chat_rag.py          <-- (等下要创建的代码文件2,负责聊天)│└── 📂 知识库 (你可以随便起名,把所有资料丢这里)    │    ├── 📂 2024工作总结/    │   ├── 年终汇报.pptx    │   └── 部门会议纪要.docx    │    ├── 📂 行业研报/    │   ├── AI发展趋势.pdf    │   └── 竞品分析.pdf    │    └── 📂 财务数据/        └── Q4预算表.xlsx复制代码

2. 支持的文件类型
你可以随意往里面丢以下格式的文件:

  • PDF (.pdf):各种论文、扫描件(必须是文字版,纯图片PDF读不了)。
  • Word (.docx):工作文档、合同、论文。
  • PPT (.pptx):汇报胶片、课件。
  • Excel (.xlsx):简单的表格数据(程序会转成文本读取)。

💻 第三步:安装依赖库
我们需要安装一些 Python 插件来处理文件。
在 MyLocalAI 文件夹的空白处,按住 Shift 键 + 点击鼠标右键,选择 “在此处打开 Powershell 窗口” (或者CMD)。

复制下面这行命令粘贴进去,回车:

pip install numpy faiss-cpu pandas pypdf python-docx python-pptx fastembed tqdm ollama openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple复制代码

(这里使用了清华镜像源,下载速度飞快)

📝 第四步:创建代码文件 (直接复制)
我们需要在文件夹里创建两个 Python 文件。
方法:新建一个文本文件 -> 粘贴代码 -> 保存 -> 重命名为 xxx.py。

文件 1:build_kb.py (构建知识库)
这个脚本负责扫描刚才那些文件夹,把文档“嚼碎”并存成AI能读懂的向量格式。

import osimport gcimport shutilimport loggingimport numpy as npimport faissimport pandas as pdfrom pypdf import PdfReaderfrom docx import Documentfrom pptx import Presentationfrom fastembed import TextEmbeddingfrom tqdm import tqdm# =========================# ⚙️ 配置区域# =========================# 设置国内镜像,解决下载慢的问题os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"logging.getLogger("pypdf").setLevel(logging.ERROR)BASE_DIR = "." # 扫描当前目录INDEX_FILE = "kb.index"CHUNKS_FILE = "kb_chunks.npy"BATCH_SIZE = 256# =========================# 📄 文档加载器# =========================def load_pdf(path):    try:        reader = PdfReader(path)        return "\n".join([page.extract_text().strip() for page in reader.pages if page.extract_text()])    except: return ""def load_docx(path):    try:        doc = Document(path)        return "\n".join([p.text.strip() for p in doc.paragraphs if p.text.strip()])    except: return ""def load_pptx(path):    try:        prs = Presentation(path)        out = []        for slide in prs.slides:            for shape in slide.shapes:                if hasattr(shape, "text_frame"):                    for p in shape.text_frame.paragraphs:                        if p.text.strip(): out.append(p.text.strip())        return "\n".join(out)    except: return ""def load_xlsx(path):    try:        return pd.read_excel(path).to_markdown(index=False)    except: return ""def split_text(text, size=500, overlap=50):    res = []    for i in range(0, len(text), size - overlap):        chunk = text[i:i + size].strip()        if len(chunk) > 20: res.append(chunk)    return resdef scan_files():    print("📂 正在扫描当前目录及子文件夹下的文档...")    chunks = []    supported_ext = ['.pdf', '.docx', '.pptx', '.xlsx']    files = []    for root, _, filenames in os.walk(BASE_DIR):        for f in filenames:            if any(f.lower().endswith(ext) for ext in supported_ext):                files.append(os.path.join(root, f))    print(f"📄 找到 {len(files)} 个文件,开始解析...")    for file_path in tqdm(files, desc="解析文件"):        content = ""        ext = os.path.splitext(file_path)[1].lower()        if ext == '.pdf': content = load_pdf(file_path)        elif ext == '.docx': content = load_docx(file_path)        elif ext == '.pptx': content = load_pptx(file_path)        elif ext == '.xlsx': content = load_xlsx(file_path)        if content:            # 在内容前加上文件名,方便AI知道出处            file_name = os.path.basename(file_path)            chunk_list = split_text(content)            chunks.extend([f"【来源:{file_name}】\n{c}" for c in chunk_list])    return chunks# =========================# 🚀 主程序# =========================def main():    # 1. 扫描文件并制作切片    # 如果想强制重新扫描,删除目录下的 kb_chunks.npy 即可    if os.path.exists(CHUNKS_FILE):        print("✅ 检测到旧缓存,直接加载 (如需更新请删除 kb_chunks.npy)...")        chunks = np.load(CHUNKS_FILE, allow_pickle=True).tolist()    else:        chunks = scan_files()        if not chunks:            print("❌ 没有找到有效内容,请检查文件夹里有没有文档!")            return        np.save(CHUNKS_FILE, np.array(chunks, dtype=object))    print(f"📦 共生成 {len(chunks)} 个文本块,准备向量化...")    # 2. 初始化模型    model_name = "BAAI/bge-small-zh-v1.5"    try:        embedder = TextEmbedding(model_name=model_name)    except:        print("⚠️ 模型加载受阻,尝试自动修复...")        cache_dir = os.path.join(os.getcwd(), ".fastembed")        if os.path.exists(cache_dir): shutil.rmtree(cache_dir)        embedder = TextEmbedding(model_name=model_name)    # 3. 向量化并建立索引    print("🚀 正在将文本转化为向量 (如果是第一次运行,会自动下载模型,请耐心等待)...")    embeddings = list(embedder.embed(chunks))    embeddings_np = np.array([list(e) for e in embeddings]).astype('float32')    dim = embeddings_np.shape[1]    index = faiss.IndexFlatIP(dim)    index.add(embeddings_np)    faiss.write_index(index, INDEX_FILE)    print(f"🎉 知识库构建完成!索引文件: {INDEX_FILE}")if __name__ == "__main__":    main()复制代码

文件 2:chat_rag.py (开始对话)
这个脚本负责连接 Ollama 和刚才建好的知识库。

import osimport faissimport numpy as npimport ollamafrom fastembed import TextEmbedding# =========================# ⚙️ 配置区域# =========================os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"INDEX_FILE = "kb.index"CHUNKS_FILE = "kb_chunks.npy"# ⚠️ 如果你安装的是 7b 模型,请把下面这行改成 "deepseek-r1:7b"OLLAMA_MODEL = "deepseek-r1:14b" EMBED_MODEL = "BAAI/bge-small-zh-v1.5"def main():    if not os.path.exists(INDEX_FILE):        print("❌ 没找到知识库!请先运行 build_kb.py")        return    print("⏳ 正在加载大脑...")    index = faiss.read_index(INDEX_FILE)    chunks = np.load(CHUNKS_FILE, allow_pickle=True).tolist()    embedder = TextEmbedding(model_name=EMBED_MODEL)    print("\n" + "="*40)    print(f"🤖 本地AI知识库助手 ({OLLAMA_MODEL}) 已启动")    print("💡 输入 'exit' 退出")    print("="*40)    while True:        query = input("\n🙋 你的问题: ").strip()        if query.lower() in ['exit', 'quit']: break        if not query: continue        # 1. 检索        print("🔍 正在翻阅资料...", end="\r")        query_vec = list(embedder.embed([query]))[0]        D, I = index.search(np.array([query_vec], dtype="float32"), k=4)        context = []        for idx in I[0]:            if idx >= 0: context.append(chunks[idx])        # 2. 生成        prompt = f"""        基于以下资料回答问题。如果资料里没有提到,就说不知道,不要瞎编。        【资料】:        {"\n---".join(context)}        【问题】:{query}        """        print("\n🤖 DeepSeek 回答:")        try:            stream = ollama.chat(model=OLLAMA_MODEL, messages=[{'role': 'user', 'content': prompt}], stream=True)            for chunk in stream:                print(chunk['message']['content'], end='', flush=True)            print("\n")        except Exception as e:            print(f"❌ 也就是这里出错了: {e}")            print("请检查 Ollama 是否已在后台运行!")if __name__ == "__main__":    main()复制代码

▶️ 第五步:运行起来!
1. 构建知识库
在命令窗口输入:

python build_kb.py复制代码
  • 第一次运行会下载一个约 100MB 的向量模型(已配置国内镜像,很快)。
  • 你会看到进度条在扫描你的文档。
  • 显示 🎉 知识库构建完成! 就成功了。

2. 开始聊天
在命令窗口输入:

python chat_rag.py复制代码
  • 程序启动后,输入你的问题,比如:“总结一下Q4预算表的内容”、“2024年工作汇报里提到了什么”。
  • 你会发现 AI 回答的内容完全是基于你文件夹里的文件!

❓ 常见问题 (FAQ)
Q: 运行 build_kb.py 报错说 SSL 连接错误?
A: 这是网络问题。代码里已经加了 HF_ENDPOINT 镜像,如果还不行,尝试关掉你的科学上网工具,或者切换手机热点试试。

Q: 聊天时电脑非常卡,出字很慢?
A: 你的模型可能太大了。

去 CMD 运行 ollama rm deepseek-r1:14b 删除大模型。
运行 ollama pull deepseek-r1:1.5b (这个超快,渣机也能跑)。
记得修改 chat_rag.py 里的配置代码。
Q: 我往文件夹里加了新文档,AI 怎么不知道?

A: 只要删掉文件夹里的 kb_chunks.npy 和 kb.index 这两个旧文件,重新运行 python build_kb.py 即可重建索引。

教程结束,祝大家搭建愉快!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站所有资源来源于网络,仅限用于学习研究;无任何技术支持!不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除内容。如果您喜欢,请支持正版。如有侵权请邮件与我们联系处理。

0基础在Windows本地搭建“DeepSeek”私人知识库 (附源码) 
下一篇:

已经没有下一篇了!

常见问题
  • 网盘有时候会因为名字 关键词导致失效 大家可以给管理员提供失效信息,我们会给大家适当积分进行奖励 我们会第一时间进行补充修正 感谢大家的配合 让我们共同努力 打造良好的资源分享平台
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务