Ch19: AnythingLLM 架构精读——减法设计与适配器模式
Part 3 续:平台专章(末) 前置:Ch18: FastGPT 后续:Ch08: 评估方法论 完整精读:精读: AnythingLLM
结论先行:AnythingLLM 用 有意识的不做(无 BM25、无 Rerank、无图谱)换 Electron 单文件、LanceDB 嵌入式、30+ LLM / 11 向量库适配器。对个人场景 80% 查询纯向量「够用」——WeKnora 应学的是 默认零配置体验 与 适配器扩展模式,而非复制其检索深度。
调研元信息
| 项目 | 值 |
|---|---|
| 仓库 | Mintplex-Labs/anything-llm |
| Stars | ~61K |
| 许可 | MIT |
| 栈 | Electron + Express + React + SQLite |
一、减法设计的三条底线
- 马上能用——无双击以外的安装步骤
- 数据留本地——SQLite + 文件系统,默认 LanceDB
- 模型可选——Ollama 离线 or 云端 API
不做:BM25、Rerank、KG、多租户、复杂 PDF 解析。
二、四层架构
Electron 壳
→ Express API(业务)
→ Collector(解析+向量化,独立进程)
→ React SPA
存储:不用 PostgreSQL——刻意减少进程数。
三、适配器模式(WeKnora 可对照)
// 概念接口 — 每种向量库一个文件
interface VectorDb {
connect(): Promise<void>;
addDocument(chunks): Promise<void>;
similarSearch(query, k): Promise<Chunk[]>;
}
业务层只调接口;新增 Qdrant/Milvus 等 只加适配器文件。WeKnora 十库后端同源思路——可读 vector/ 适配层与 AnythingLLM storage/ 对照。
四、Workspace 隔离
每个 Workspace = 独立文档集 + 向量索引 + 对话 + system prompt。
模拟人类 领域切换(工作/学习/私人),无跨 workspace 检索——简单有效,企业场景不适用。
五、@agent 渐进复杂度
默认:纯 RAG 问答。输入 @agent 激活工具(爬虫、代码、SQL)。
渐进暴露 vs Dify 全程 DAG——AnythingLLM 默认极简,复杂能力按需解锁。WeKnora 可借鉴:简单模式(三路默认开)+ 专家模式(调 RRF k、Rerank 权重)。
六、失败场景(必须坦诚)
| 查询 | 纯向量表现 |
|---|---|
ERR_OOM_KILL_001 |
弱(要 BM25) |
| 多跳关系 | 弱(要 KG) |
| 数千篇+复杂 PDF | 分块噪声↑ |
→ 个人够用,企业选 WeKnora/Dify/FastGPT。
七、离线可用的工程含义
本地 Ollama + LanceDB → 无网可问答。WeKnora 企业部署可考虑:内网 LLM 降级策略(API 不可达时切换本地模型 + 缓存检索结果)。
章末自检
- 说出 AnythingLLM 主动不做的三项 RAG 能力及原因
- 解释适配器模式如何支持 11 种向量库
- Workspace 与多租户的本质区别
- 列举 WeKnora 可从「减法设计」学的 two UX 点