← 返回博客列表

本地部署AI构建"第二大脑":从0到1的完整实践

📅 2026-06-05 ✍️ binqi (binqi) ⏱️ 阅读约 20 分钟 👁️ 0 次阅读

📋 目录

一、引言:为什么我要造一个"数据孪生体"

人的大脑是有限的。工作这些年,我积累了大量经验、笔记、决策案例,但记忆会衰减,检索会迟钝。我需要一个外接大脑——一个本地部署的AI系统,断网运行,不消耗API token,只用电,却能承载我大脑的一部分,帮我存储所有经验与智慧,最终成为提高效率的工具。

这篇文章记录了我从产生想法,到选型硬件,再到真正跑通RAG(检索增强生成)系统的完整过程。包括那些我踩过的概念坑,以及最终梳理清楚的全流程。

二、什么配置能达到"大学生反应速度"

我最初的核心问题是:要达到和正常人、大学生相当的反应速度,需要什么模型?什么配置?

2.1 定义"反应速度"

大模型有两个速度指标:

所以,"大学生反应速度" = TTFT < 1秒 + TPS > 15 tokens/s。这个门槛并不高。

2.2 硬件与模型匹配方案

目标 推荐模型 显存需求 推荐硬件 预算
基础对话 Qwen3.5-9B / Llama-3-8B 6-8G RTX 3060 12G / Mac Mini M4 16G <5000元
大学生水平(推荐) Qwen3.5-32B / DeepSeek-R1-32B 18-20G RTX 3090 24GRTX 4090 24G 10000-15000元
研究生/专家水平 Qwen-72B / Llama-3-70B 40-48G 双卡3090 / Mac Studio M4 Max 128G 20000-40000元
💡 甜点级建议:RTX 3090 24G(二手约6000-8000元)+ 64G内存 + 2TB NVMe SSD。这是性价比最高的"大学生智商"配置,能流畅运行32B参数模型。

三、不联网能自己迭代升级模型吗

直接结论:可以局部迭代,但无法完全自主升级。

3.1 完全从头训练 → 不可能

训练一个7B模型需要数万张A100跑数周,个人硬件无法实现。

3.2 轻量化微调(LoRA/QLoRA)→ 完全可行

这是个人迭代的核心路径:

3.3 知识库迭代(RAG)→ 最推荐

不需要动模型权重,只需持续投喂新文档:

四、架构设计:数据孪生体的双层结构

我最终确定的"数据孪生体"采用 RAG + 个性化微调 的双层架构:

第一层:外显记忆(RAG知识库)

承载所有文档、笔记、经验、项目资料。技术栈为 Ollama(模型服务)+ Chroma(向量数据库)+ BGE-large(嵌入模型)+ Cherry Studio(前端)

数据流如下:

你的笔记/PDF/聊天记录 → 文本清洗 → 切分Chunk → Embedding向量化 → 存入本地向量库
                              ↑
用户提问 → 问题向量化 → 相似度检索TopK → 拼接进Prompt → 本地大模型生成回答

第二层:内隐记忆(LoRA微调)

承载思维模式、决策风格、语言习惯。建议每3-6个月,用积累的对话数据训练一个新的LoRA适配器,与基础模型合并。

五、关键认知:知识库和模型是两个独立部分

在实践过程中,我产生了一个重要疑问:喂养(知识库)和模型是两个部分吗?换模型对同样的文档有什么影响?喂养必须是PDF吗?

5.1 架构上的三个独立组件

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   你的文档   │────→│  嵌入模型    │────→│  向量数据库  │
│ (PDF/TXT等) │     │(把文字转向量) │     │  (本地存储)  │
└─────────────┘     └─────────────┘     └─────────────┘
                                               ↑
                                               │ 相似度检索
                                               ↓
提问 ──→ 本地大模型(LLM) ←── 检索到的相关片段 ←─┘
核心结论:你可以随时更换LLM,而知识库里的文档无需重新喂养。

5.2 模型规模对同样文档的影响

维度 3B小模型(如我的配置) 更大的模型(14B/32B)
理解深度 能处理简单问答,遇到专业术语、逻辑推理时容易答非所问 能读懂隐含逻辑、因果关系、专业细节
上下文利用 通常只支持8K上下文,检索片段太长会"看后面忘前面" 支持32K-128K,能消化更多片段并交叉比对
幻觉控制 更容易"脑补",检索没提的内容可能瞎编 更忠实于原文,不确定会直接说不知道
回答风格 比较机械、简短,像"学生念笔记" 更自然、有层次,像"老师在讲解"
检索质量依赖 极高。理解力弱,检索不准则回答质量断崖下跌 中等。即使检索到边缘信息,也能筛选整合

结论:同样的喂养文档,3B模型能当"快速查字典"用;大模型能当"深度研究助手"用。

5.3 文档格式:PDF不是唯一选择

最佳格式排序

  1. TXT / Markdown:纯文本,无格式干扰,切片最干净
  2. JSON / CSV:结构化数据,可精确控制字段映射
  3. DOCX / Word:多数工具支持,复杂表格可能解析错乱
  4. PDF(文字版):需要是"可选中文字"的PDF,不是扫描图片
  5. PDF(扫描版/图片):必须先OCR,否则系统看到的是空白
⚠️ 核心限制:必须是文字(不能是图片),加密文件需要去密码,排版混乱的文档(多栏杂志)解析后文字顺序可能错乱。

六、实践:跑通第一个RAG系统

前天,我终于跑通了第一个完整的RAG流程。这是我的运行记录:

PS D:\Projects\ByLifeCycle-Personal\smarttools> .env\Scripts\python.exe src/backend/generation/simple_ask.py
请输入问题: 林远睁开眼睛时看到了什么?
Loading weights: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 71/71 [00:00<00:00, 29195.65it/s]

回答: 林远睁开眼睛时看到的是手术室的蓝光已经熄灭了。

引用片段:
1. 《副本》
林远睁开眼睛时,手术室的蓝光已经熄灭了。
"上传完成。"AI 的声音像是从很远的地方传来,"您的意识副本已入驻'方舟'服务器,编号
7,291,004。"
他试着抬起手,却发现自己没有了手。视野里只有无尽的数据流和漂浮的虚拟城市。这就是
永生吗?他想着,向城市的中心飘去。
然后他在广场中央看到了另一个人。
那个人有着和他一样的脸,一样的记忆,一样地在五分钟前死去。那个"林远"转过头,对他…

虽然跑通了,但我意识到:跑通不等于搞懂。如果我不能说清楚数据是怎么流动的,那这个东西就不是我的工具,而是一个黑盒。于是我决定今天把全流程彻底梳理清楚。

七、深度解析:RAG系统的五大核心模块

通过阅读代码和反复验证,我梳理出了完整的数据流和五个核心模块:

7.1 项目结构对照

smarttools/
├── src/
│   ├── backend/
│   │   ├── generation/          ← simple_ask.py:加载模型 + 检索 + 生成
│   │   ├── embedding/          ← 文本转向量
│   │   ├── vector_store/       ← 向量数据库(Chroma/FAISS)
│   │   └── document_loader/    ← 文档解析
│   └── data/                   ← 原始文档(如《副本》.txt)
└── venv/

7.2 完整数据流

原始文档 → 文档解析/切片 → 文本块(Chunk) → Embedding模型 → 向量数据库(本地持久化)
                                                                    ↑
提问 → Embedding → 问题向量 → 相似度搜索(TopK) → 检索到的上下文 ──┘
                                                                    ↓
                                                           本地LLM(71/71权重加载)
                                                                    ↓
                                                              生成回答 + 引用片段

7.3 五大核心模块详解

模块1:文档加载与切片

模块2:Embedding(文本向量化)

模块3:向量数据库

模块4:检索与重排序

模块5:生成(LLM)

Prompt大致结构:

基于以下参考信息回答问题:
---
参考1:林远睁开眼睛时,手术室的蓝光已经熄灭了...
---

问题:林远睁开眼睛时看到了什么?

回答:

八、针对现有配置的优化建议

我的配置是 i7-12700H + 16GB内存 + 4GB显存 + qwen2.5-3b-q4

九、学习路径与自查清单

为了把"跑通"变成"搞懂",我制定了今天的学习计划:

  1. 阅读配置文件:找到 config.py.env,确认Embedding模型、向量库、LLM的路径。
  2. 手动走一遍喂文档流程:单步运行加载→切片→打印Chunk→Embedding→入库。
  3. 理解检索过程:在代码里找到检索逻辑,打印 retrieved_chunks,看送给LLM的上下文到底是什么。
  4. 理解生成过程:找到模型加载和 generate() 调用点,理解Prompt是如何拼接的。
  5. 动手改参数看效果:把 top_k 从3改成1,把 chunk_size 从512改成1024,把 temperature 从0.7改成0.1,观察输出变化。
📌 自查清单(全部答"是"才算真正搞懂):

十、总结:现实边界与正确预期

经过这一轮的探索,我对这个"数据孪生体"有了清醒的认知:

它能做什么

它不能做什么

最终定位:把这个系统当作"外接存储 + 检索助手",而不是"另一个你"。人的大脑负责创造和直觉,它负责存储和检索——这才是最高效的分工。
← 返回列表 下一篇:待更新 →