探测 127.0.0.1:3001,结果是 TimeoutError,1010.2 毫秒——沙箱里没装,端口是关的。
这一节真正要分清的是两个端口:11434 是模型,3001 是知识库。卸掉后者,模型照样能跑。
上一节把数据准备好了,但它还散在文件里。 这一节装一个「知识库外壳」,负责切块、检索、把资料拼进提示词。
一、它是什么,不是什么
AnythingLLM 管四件事:文档上传与切块、向量化与存储、检索、把检索结果拼进提示词。 它不含模型。 回答仍然是 Ollama 出的,AnythingLLM 只负责「在提问之前,把哪几段资料摆到模型眼前」。 这个分工想清楚了,后面所有问题都好定位:回答不准,先看检索给对了没;检索给对了还答错,才去怪模型。 它也是可选的。没有它,你得自己写切块、自己存向量、自己拼提示词——都要写,只是多几十行代码。 所以它不是必需品,是省事的东西。
二、两个端口,两个组件
装之前先把这张表记住,能省掉后面一半的困惑:
| 组件 | 端口 | 负责什么 | 能不能省 |
|---|---|---|---|
| Ollama | 11434 | 加载模型、跑推理 | 必须有 |
| AnythingLLM | 3001 | 管文档、切块、检索 | 可选 |
| 浏览器/桌面端 | 无 | 给人用的界面 | 可选 |
| 一句话记法:11434 出答案,3001 找材料。 | |||
| 所以「回答很傻」和「找不到资料」是两类问题,要去的端口都不一样。搞混了就会在错误的地方查半天。 | |||
| 还有一个常见的误判:以为装了 AnythingLLM 就有了模型。 | |||
| 实际上它第一次启动会问你「用哪个模型提供方」,选 Ollama、 | |||
| 填 11434——这一步填错,界面能打开但一条都答不出来。 |
三、装:三条路,按场景选
桌面版(Windows/macOS):下载安装包,双击,下一步到底。
自带 Node 运行时和默认嵌入模型,装完就能用。个人首选。
Docker 版:一条 docker run 加一个卷映射。
适合装在服务器上给多人用,也适合「不动本机环境」的场景。
源码版:克隆仓库、装依赖、跑构建。只有要改代码时才走这条。
三条路装出来的东西是一样的:一个监听 3001 的本地服务。所以判断装成没成的方法,三条路通用。
要提醒一句:桌面版和 Docker 版的数据目录不一样,换装法要迁移数据,不是重装就能接着用。
四、装之前算一下资源
它比 Ollama 重——因为自带 Node 运行时、向量库、默认嵌入模型。
| 项目 | 量级 | 说明 |
|---|---|---|
| 安装包 | 0.3 到 0.6 GB | 桌面版比 Docker 版大 |
| 装完占用 | 1.5 到 3 GB | 含运行时和默认嵌入模型 |
| 运行内存 | 1 GB 起 | 文档多的时候会涨 |
| 文档存储 | 看资料量 | 原文和向量各存一份 |
| 最后一行值得单独说:原文和向量各存一份,磁盘占用约是资料量的两倍。上传 1 GB 的 PDF, | ||
| 实际占 2 GB 左右。 | ||
| 还有一个隐藏开销:向量化要跑嵌入模型。第一次上传文档时会明显变慢,因为要把每一块都过一遍模型。 | ||
| 这次慢是一次性的,之后只算新增的部分。 |
五、动手 Demo:探测 3001:TimeoutError 1010.2 毫秒,端口是关的
用和探测 Ollama 同一段代码探 3001 端口,记录结果和耗时; 再把三个组件的分工和端口列成表,最后算一遍安装前后的资源占用。
host, port = u'127.0.0.1', 3001
s = socket.socket()
s.settimeout(1.0)
try:
s.connect((host, port))
alive = True
except Exception as e:
alive, why = False, type(e).__name__
finally:
s.close()
实跑输出:
--------------------------------------------------------------------
装 AnythingLLM:先看资源和端口,再看安装包
--------------------------------------------------------------------
默认端口 127.0.0.1:3001
探测结果 连不上(TimeoutError)
耗时 1013.6 毫秒
**沙箱里没装 AnythingLLM,所以端口是关的。**这一步测的是「没有」这个事实,方法本身是可用的——
装完再跑一次,同一段代码就会变成「服务在」。
它和 Ollama 的关系要理清,这是最容易搞混的一点:
组件 端口 负责什么 能不能省
---------------------------------------------------------------
Ollama 11434 加载模型、跑推理 必须有
AnythingLLM 3001 管文档、切块、检索、拼提示词 可选
浏览器/桌面端 - 给人用的界面 可选
**AnythingLLM 不含模型,它是个「知识库外壳」。**
卸掉它,模型照样能跑;但没有它,你得自己写切块和检索。
装之前要算的资源(含它自带的向量库和 Node 运行时):
项目 量级 说明
-----------------------------------------------------
安装包 0.3 ~ 0.6 GB 桌面版比 Docker 版大
装完占用 1.5 ~ 3 GB 含 Node 运行时和默认嵌入模型
运行内存 1 GB 起 文档多的时候会涨
文档存储 看你的资料量 原文和向量都存一份
最后一个数注意:**原文和向量各存一份,所以磁盘占用大约是资料量的两倍。**
结果:连不上(TimeoutError),耗时 1010.2 毫秒。 和第二章探 11434 那一次几乎一模一样——同一个方法,同一个结论形式。 沙箱里没装 AnythingLLM,所以这一段测的是「没有」这个事实。方法本身是可复用的:装完再跑一次, 同一段代码就会变成「服务在」。 表格那三行是这一节的核心。 Ollama 必须有、AnythingLLM 可选——这个判断决定了你的排障顺序:答不出来先查 11434, 答得不对先查 3001。 资源那四行里,「原文和向量各存一份」最容易被忽略。 很多人上传完发现磁盘涨得比预期快一倍,就是这个原因。 还有一点没在表里:第一次上传文档会很慢。因为要跑嵌入模型把每一块变成向量,这一步是一次性的, 之后只算新增。别把它当成「卡住了」。
30 秒实验
- 把端口从 3001 换成 11434 再探一次。 两个都连不上,说明这章的两个服务在沙箱里都没装。 同一个脚本,换个端口就能验一件事。
- 把超时从 1.0 改成 0.2,看耗时怎么变。超时设太小会把「慢」误判成「没有」,跨机器探测时尤其明显。
- 算一下:上传 500 MB 的 PDF,磁盘实际要占多少?按「原文加向量各一份」算,答案是 1 GB 左右。
常见误区
- 「装了 AnythingLLM 就有模型了」。它不含模型,回答还是 Ollama 出的。 第一次启动要选模型提供方,填错就是「界面能开、一句话都答不出」。
- 「3001 和 11434 是一回事」。一个是知识库,一个是模型。回答傻查 11434,找不着资料查 3001。
- 「上传完就占那么多空间」。原文和向量各一份,实际约两倍。 再加上嵌入模型本身,磁盘要比预期多留一半。
自测三问(点开对答案)
1. AnythingLLM 负责什么,不负责什么? —— 负责文档切块、向量化存储、检索、拼提示词;不负责生成回答。回答由 Ollama 里的模型出。 2. 为什么说它是可选的? —— 因为它做的事(切块、检索、拼提示词)都可以自己用几十行代码实现。它省的是工夫,不是能力。 3. 「回答很傻」和「找不到资料」分别该查哪个端口? —— 前者查 11434(模型),后者查 3001(知识库与检索)。两个端口对应两类完全不同的问题。装好之后要配四样东西,其中只有一个是真需要试的。下一节看切块参数怎么定。
- ☐ (本节完,下一节 3.2.2 配置AnythingLLM)