323 lines
16 KiB
Markdown
323 lines
16 KiB
Markdown
|
||
---
|
||
#领域/未知
|
||
|
||
#复盘/0 #临时/备忘 #状态/待处理
|
||
|
||
## 一句话描述
|
||
|
||
[__KeepAsking调研技术栈______]
|
||
|
||
---
|
||
|
||
|
||
|
||
结合你**个人极客知识管理、工程化落地、先功能后隐私、拒绝网红工具、坚守原子化 / 不造轮子**的核心诉求,先做**核心认知纠偏**,再逐层打磨整套技术选型,明确:**工业级 ≠ 商业闭源**,最终给出「工业级开源组件为主、纯商业工业软件完全摒弃、网红小众工具彻底排除」的完整方案,同时敲定 `LangChain` / `LlamaIndex` 两大框架的取舍与搭配。
|
||
|
||
# 一、先统一核心概念(选型前提,避免认知偏差)
|
||
|
||
在个人知识管理 + 自托管 RAG 这个场景里,把工具分为三类,这是后续所有选型的判定标准:
|
||
|
||
表格
|
||
|
||
|分类|定义 & 特征|适配你的场景|
|
||
|---|---|---|
|
||
|**1. 工业级开源组件(首选)**|开源、全球生产环境广泛使用、社区长期稳定维护、接口**向下强兼容**、迭代保守(只修 Bug / 优化性能,不堆砌花哨功能)、单一职责、可自托管。<br><br>代表:Click、LangChain、LlamaIndex、Sentence-Transformers、Chroma、Qdrant、Ollama|✅ **全场核心选型**<br><br>兼顾工程规范、稳定性、免费、可演进、无热度绑架,完美匹配个人极客长期使用。|
|
||
|**2. 纯商业工业软件(完全摒弃)**|闭源 / 付费、面向企业集群 / 多租户 / 高可用场景、功能臃肿(团队协作、权限集群、商用运维)、数据易绑定厂商、无法完全自托管。<br><br>代表:Pinecone 商业版、Milvus Cloud、商用闭源 RAG 平台、专属付费大模型服务|❌ 不选用<br><br>个人场景用不上企业级冗余能力,付费 + 厂商绑定违背「数据自主、渐进自托管」诉求。|
|
||
|**3. 网红 / 小众开源工具(彻底排除)**|短期热度高、迭代激进、接口频繁破坏性变更、堆砌 UI / 特效 / 娱乐化功能、维护周期不稳定、社区生命周期短。<br><br>代表:Typer、Python Fire、各类新兴小众 RAG 玩具、界面优先的一体化笔记工具|❌ 不选用<br><br>会被热度裹挟,后续被迫迁移、重构,和你长期稳定的目标冲突。|
|
||
|
||
## 顶层总策略(最终定调)
|
||
|
||
1. **全域基准**:全部选用 **工业级开源组件**,拒绝商业闭源、拒绝网红玩具;
|
||
2. **技术栈收敛**:主力语言固定 Python,不新增其他开发语言;交互入口固定为 Click CLI,不散落零散脚本;
|
||
3. **演进路线**:先对接**在线兼容 API**快速实现功能,后期**无缝切换本地自托管**保障隐私,两套模式代码基本不动;
|
||
4. **架构原则**:分层解耦、组件可插拔、原子化单一职责;仅在上层写**胶水 / 规则 / CLI 业务代码**,底层核心算法 / 能力完全复用开源组件,严守「不造轮子」红线;
|
||
5. **自动化边界**:所有批量操作保留 `dry-run` 预览、日志、备份回滚,坚持「人主导决策,机器执行机械动作」。
|
||
|
||
---
|
||
|
||
# 二、逐层深度打磨技术选型(全栈落地版)
|
||
|
||
按照架构分层从**底层数据 → 基础组件 → 核心 RAG 链路 → 大模型层 → 交互入口**逐层梳理,标注选型理由、备选、排除项、工业属性。
|
||
|
||
## 分层 1:原始数据存储层(知识本体,永久不变)
|
||
|
||
### 选型
|
||
|
||
- 载体:**本地文件系统 + 标准 Markdown + Frontmatter 元数据**
|
||
|
||
### 说明
|
||
|
||
1. 这是**通用工业级纯文本格式**,跨平台、无软件绑定、所有开源组件原生兼容;
|
||
2. 严格坚守:**不使用 HTML / 私有富文本 / 工具专属格式**(你反感的花里胡哨格式彻底排除);
|
||
3. 存量多格式素材单独归档为「原始素材目录」,不侵入核心 MD 知识库,格式混乱风险隔离。
|
||
|
||
### 备选 & 排除
|
||
|
||
- 无备选:纯文本 MD 是个人 / 工业文档存储的最优解;
|
||
- 排除:各类笔记软件私有格式、在线文档格式。
|
||
|
||
---
|
||
|
||
## 分层 2:交互入口层(CLI 命令行,人机交互唯一入口)
|
||
|
||
### 主选型:Click
|
||
|
||
### 对比 & 理由
|
||
|
||
1. **工业属性**:Python 生态**事实标准 CLI 框架**,Flask 作者维护,10 + 年稳定迭代,接口无破坏性变更,纯原子能力(仅做参数解析 + 命令路由),无多余美化功能;
|
||
2. 适配你的规则:天然支持**子命令 = 原子操作**,完美实现单一入口、功能拆分;
|
||
3. 对比其他方案:
|
||
|
||
- `argparse`(Python 内置):零依赖,极简,但代码冗余、扩展不便,适合超轻量场景,**作为备选**;
|
||
- `Typer / Python Fire`:网红 CLI 库,堆砌自动 UI、颜色、动画等花哨功能,**直接排除**。
|
||
|
||
|
||
### 最终结论
|
||
|
||
- 主力:**Click**(功能与稳定性平衡,工业标准);
|
||
- 极简兜底:`argparse`(仅当你追求零第三方依赖时切换)。
|
||
|
||
---
|
||
|
||
## 分层 3:文档处理 & RAG 框架层(核心检索 / 编排层,L 开头二选一 / 组合)
|
||
|
||
你重点关注的 **LangChain、LlamaIndex** 均属于**工业级开源 RAG 框架**,二者都不是网红工具,定位互补,下面明确取舍:
|
||
|
||
### 两款框架核心定位对比
|
||
|
||
表格
|
||
|
||
|维度|LangChain|LlamaIndex|
|
||
|---|---|---|
|
||
|核心设计|通用工作流编排框架,生态极丰富,偏向「工具调用、复杂 Agent、多链路串联」|检索优先框架,**专为文档索引、语义检索、结构化知识设计**|
|
||
|Markdown 适配|依赖第三方 Loader,对 MD 标题 / 层级结构化解析一般|内置专属 `MarkdownNodeParser`,原生保留文档结构、层级、代码块,**MD 体验最优**|
|
||
|检索能力|基础向量检索为主,复杂查询需二次开发|原生支持混合检索、多跳查询、节点关联,检索能力更强|
|
||
|复杂度|功能全面,配置项多|聚焦 RAG 核心,上手更轻,冗余功能少|
|
||
|工业属性|顶级工业开源,企业 / 个人大规模使用|顶级工业开源,RAG 领域标杆,长期稳定维护|
|
||
|
||
### 结合你的场景(纯知识管理、以 RAG 检索为核心,暂不需要复杂 Agent)给出三套方案
|
||
|
||
#### 方案 A(首选,推荐):**主力 LlamaIndex**
|
||
|
||
- 适用:90% 你的日常场景(MD 文档索引、语义检索、RAG 问答、结构化知识提取);
|
||
- 理由:天生为「私有文档知识库」设计,MD 解析、检索链路开箱即用,代码更简洁,无多余 Agent 冗余功能,贴合你「功能克制」的理念。
|
||
|
||
#### 方案 B(进阶组合):**LlamaIndex(检索层) + LangChain(编排层)**
|
||
|
||
- 适用:后续需要增加「多工具联动、复杂流程编排、简易 Agent」(比如检索 + 文件操作联动);
|
||
- 架构:`MD → LlamaIndex(索引/检索) → LangChain(规则/流程编排) → LLM`;
|
||
- 优势:各司其职,不重复造功能,工业界经典组合模式。
|
||
|
||
#### 方案 C(备选):**纯 LangChain**
|
||
|
||
- 适用:你后续计划深度探索 Agent、多工具调用,当前 RAG 仅作为附属能力;
|
||
- 短板:MD 结构化解析需要额外配置,检索能力不如 LlamaIndex 原生强大。
|
||
|
||
### 最终建议
|
||
|
||
现阶段**直接选用 LlamaIndex**;未来有复杂流程 / 工具联动需求,再叠加 LangChain,不一开始过度引入复杂度。
|
||
|
||
---
|
||
|
||
## 分层 4:嵌入层(文本向量化,语义理解核心)
|
||
|
||
### 选型组合
|
||
|
||
1. 推理库:**Sentence-Transformers**(工业级开源嵌入推理标准库,全球通用,迭代保守);
|
||
2. 嵌入模型:**BAAI/bge-large-zh**(中文领域**工业基线开源模型**,学术 + 工业场景广泛采用,中文语义效果公认优秀)。
|
||
|
||
### 说明
|
||
|
||
1. 整套组合纯离线可运行,后期自托管无任何依赖;
|
||
2. 拒绝频繁换新兴小众嵌入模型(热度模型普遍生命周期短),固定 BGE 系列作为长期基线;
|
||
3. 仅调用库与模型,**不自研向量化、归一化逻辑**(严守不造轮子红线)。
|
||
|
||
---
|
||
|
||
## 分层 5:向量数据库层(向量存储 & 相似度检索)
|
||
|
||
两款均为**工业级开源向量库**,根据你的数据体量二选一,支持**无缝迁移**(代码改动极小):
|
||
|
||
### 选项 1:Chroma(现阶段主力,强推荐)
|
||
|
||
- 形态:**文件型向量库**,零额外部署、无独立进程、运维极简;
|
||
- 适配:单机个人知识库,文档量 0 ~ 2000 篇;
|
||
- 优势:轻量化、和 Python 生态深度绑定、配置最少,完全匹配个人极客轻量化诉求。
|
||
|
||
### 选项 2:Qdrant(中长期备选)
|
||
|
||
- 形态:独立服务型向量库,Docker 一键部署;
|
||
- 适配:文档量 > 2000 篇、追求更高检索性能、未来有小范围扩容需求;
|
||
- 优势:工业生产级性能、支持复杂元数据过滤、分布式扩展;
|
||
- 迁移说明:两者 Python SDK 调用逻辑高度相似,后期迁移成本极低。
|
||
|
||
### 排除项
|
||
|
||
- 商业向量库(Pinecone、Milvus Cloud):付费 + 厂商绑定,排除;
|
||
- 小众向量库:维护不稳定,排除。
|
||
|
||
---
|
||
|
||
## 分层 6:大模型层(推理 + 调用,分「在线 API」「本地自托管」双模式)
|
||
|
||
遵循你「**先实现功能,再考虑隐私自托管**」的演进思路,整套链路统一、代码无缝切换,全部选用工业级开源组件。
|
||
|
||
### 6.1 统一调用抽象层(核心)
|
||
|
||
#### 主选型:LiteLLM
|
||
|
||
- 定位:工业级开源**多模型统一调用网关**,一套接口兼容百余种在线 / 本地模型;
|
||
- 价值:
|
||
|
||
1. 在线 API、本地模型切换**仅改配置,业务代码完全不动**;
|
||
2. 内置超时、重试、日志、成本统计、故障熔断(工业级容错能力);
|
||
3. 原生兼容 LangChain / LlamaIndex,集成零障碍。
|
||
|
||
|
||
#### 备选:OpenAI 官方 SDK
|
||
|
||
- 场景:仅使用 OpenAI 系模型,不需要多模型切换;
|
||
- 短板:多模型适配能力弱,后期切换本地模型需要小幅改代码。
|
||
|
||
### 6.2 在线模型(短期快速落地)
|
||
|
||
- 选型原则:选用 **OpenAI 接口兼容的国内开源 / 合规大模型 API**;
|
||
- 推荐服务:DeepSeek、智谱 AI、通义千问等(中文优化好、接口标准、合规稳定);
|
||
- 规则:仅作为过渡方案,用来快速验证 RAG 功能,不长期依赖。
|
||
|
||
### 6.3 本地自托管(中长期隐私方案)
|
||
|
||
#### 1. 本地推理服务:Ollama
|
||
|
||
- 定位:工业级轻量 LLM 部署工具,一行命令部署模型、提供标准 OpenAI 兼容 API;
|
||
- 优势:极简运维、资源占用低、个人 PC / 服务器均可运行,目前本地模型部署的事实标准。
|
||
|
||
#### 2. 本地开源大模型(轻量 7B 级,个人硬件友好)
|
||
|
||
- 首选:**Qwen2.5-7B**(通义千问开源版,中文能力顶尖、推理速度快、社区活跃);
|
||
- 备选:Llama 3-8B(通用能力强,长文本支持好);
|
||
- 规则:固定 7B 量级模型,不盲目上更大参数模型(硬件成本、运维复杂度上升,个人场景收益低)。
|
||
|
||
### 6.4 明确排除
|
||
|
||
- 闭源商业大模型专属 SDK、小众推理框架、网红本地模型。
|
||
|
||
---
|
||
|
||
## 分层 7:辅助运维组件(工业级轻量化配套,不额外引入新工具)
|
||
|
||
全部使用**系统原生 + Python 标准库**,零第三方依赖,延续极简原则:
|
||
|
||
1. 日志:Python 内置 `logging`(工业标准日志库);
|
||
2. 文件备份 / 回滚:Python 脚本 + 系统原生命令;
|
||
3. 定时增量同步 / 巡检:Linux `cron` / Windows 计划任务(系统原生定时服务);
|
||
4. 安全过滤:Python 代码实现目录 / 文件黑白名单(延续之前安全规则)。
|
||
|
||
---
|
||
|
||
# 三、最终完整版技术栈清单(打磨定稿,可长期使用)
|
||
|
||
## 🔹 核心工业级开源组件(必选,全套稳定无热度绑架)
|
||
|
||
表格
|
||
|
||
| 层级 | 组件 / 框架 | 版本 / 选型 | 核心作用 |
|
||
| ------ | ------------------------------------ | ------- | ---------------------- |
|
||
| 数据层 | 本地文件 + 标准 Markdown | 通用格式 | 原始知识存储,Frontmatter 元数据 |
|
||
| 交互层 | Click | 最新稳定版 | 唯一 CLI 入口,原子子命令调度 |
|
||
| RAG 框架 | LlamaIndex | 正式版 | MD 解析、索引构建、语义检索(主力) |
|
||
| 嵌入层 | Sentence-Transformers + bge-large-zh | 稳定版模型 | 文本向量化,语义编码 |
|
||
| 向量库 | Chroma | 持久化本地版 | 向量存储、相似度检索(现阶段) |
|
||
| 模型调用 | LiteLLM | 最新稳定版 | 大模型统一调用、容错、多模型适配 |
|
||
| 本地推理 | Ollama | 正式版 | 本地 LLM 部署、API 服务 |
|
||
| 本地 LLM | Qwen2.5-7B | 开源量化版 | 离线问答、内容摘要、标签建议 |
|
||
|
||
## 🔹 备选组件(同等级工业开源,按需平滑切换)
|
||
|
||
1. CLI:Click → `argparse`(追求零第三方依赖)
|
||
2. 向量库:Chroma → Qdrant(文档超 2000 篇,提升性能)
|
||
3. RAG 框架:LlamaIndex → 叠加 LangChain(新增复杂工作流 / Agent)
|
||
4. 模型调用:LiteLLM → OpenAI SDK(仅使用 OpenAI 生态)
|
||
|
||
## 🔹 永久排除清单(商业 / 网红,坚决不碰)
|
||
|
||
1. 纯商业工业软件:Pinecone 商业版、Milvus Cloud、闭源商用 RAG 平台;
|
||
2. 网红工具:Typer、Python Fire、各类界面优先的一体化知识库、小众 RAG 玩具;
|
||
3. 花哨格式:HTML、私有富文本、在线文档格式。
|
||
|
||
---
|
||
|
||
# 四、关键架构 & 规则重申(守住你的核心原则)
|
||
|
||
## 1. 完整数据流(永久架构,无需重构)
|
||
|
||
plaintext
|
||
|
||
```
|
||
本地MD文件
|
||
↓
|
||
LlamaIndex(解析MD + 切片 + 提取元数据)
|
||
↓
|
||
Sentence-Transformers + BGE(文本向量化)
|
||
↓
|
||
Chroma(向量+元数据存储)
|
||
|
||
# 检索&问答链路
|
||
用户输入 → Click CLI → 检索(grep精准检索 + 向量语义检索) → LiteLLM → LLM(在线/本地) → 结果输出
|
||
```
|
||
|
||
## 2. 造轮子红线(强制执行)
|
||
|
||
✅ 允许编写:CLI 命令逻辑、文件遍历、增量同步、黑白名单、dry-run 预览、日志、异常捕获、调用规则(纯业务 / 胶水代码)
|
||
|
||
❌ 禁止编写:文本切片算法、向量计算、相似度检索、模型推理、向量索引存储(底层核心能力,完全复用开源组件)
|
||
|
||
## 3. 人机分工红线(解决「自动化不放心」)
|
||
|
||
✅ 机器执行:文件移动、格式转换、索引同步、检索执行、摘要 / 标签**建议**
|
||
|
||
❌ 机器禁止:内容审核、价值判断、正文修改、自动打标签、文件删除(知识决策全人工)
|
||
|
||
## 4. 模型演进规则
|
||
|
||
1. 短期(0~1 个月):LiteLLM 对接在线 API,快速跑通全流程;
|
||
2. 中期(1~3 个月):部署 Ollama+Qwen2.5-7B,切换为本地自托管,数据隐私闭环;
|
||
3. 长期:组件仅做 Bug 修复式升级,不追逐新版本、新功能。
|
||
|
||
---
|
||
|
||
# 五、方案核心优势(匹配你所有诉求)
|
||
|
||
1. **无热度绑架**:全套都是行业长期使用的工业级开源组件,没有网红工具,架构十年可稳定使用,无需反复迁移;
|
||
2. **技术栈极简收敛**:主力仅 Python,单一 CLI 入口,学习、维护成本极低;
|
||
3. **完全可控**:数据本地存储、代码全可见、自动化带预览 / 回滚,彻底摆脱黑盒焦虑;
|
||
4. **演进灵活**:在线 / 本地模型一键切换、向量库可平滑迁移、框架可组合扩展;
|
||
5. **克制无冗余**:所有组件只做单一职责,没有 UI 美化、社区、多租户等无关花哨功能;
|
||
6. **零重复造轮子**:底层能力全部复用成熟开源,仅做上层业务编排,工程效率最大化。
|
||
|
||
---
|
||
|
||
# 六、分阶段落地执行(极简步骤)
|
||
|
||
### 阶段 1:基础环境搭建(1 天)
|
||
|
||
1. 规划 MD 目录、统一 Frontmatter 元数据规范;
|
||
2. 安装依赖:`click`、`llama-index`、`sentence-transformers`、`chromadb`、`litellm`;
|
||
3. 下载 `bge-large-zh` 模型,测试嵌入能力。
|
||
|
||
### 阶段 2:RAG 核心链路跑通(1~2 天)
|
||
|
||
1. 用 LlamaIndex 实现 MD 加载、切片、入库 Chroma;
|
||
2. 配置 LiteLLM 对接在线大模型 API,完成 RAG 问答;
|
||
3. 扩展 Click 子命令(同步、检索、问答、清理),新增 `dry-run` 预览。
|
||
|
||
### 阶段 3:安全与运维加固(1 天)
|
||
|
||
1. 配置文件黑白名单、全链路日志;
|
||
2. 编写备份 / 回滚脚本,配置定时增量同步。
|
||
|
||
### 阶段 4:切换本地自托管(按需推进)
|
||
|
||
1. 安装 Ollama,拉取 `qwen2.5:7b`;
|
||
2. 修改 LiteLLM 配置,切换为本地模型,完成隐私闭环。 |