🧠 第三章 数据获取:构建AI模型的知识库
📄 一句话概括

探测 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 秒实验

  1. 把端口从 3001 换成 11434 再探一次。 两个都连不上,说明这章的两个服务在沙箱里都没装。 同一个脚本,换个端口就能验一件事。
  2. 把超时从 1.0 改成 0.2,看耗时怎么变。超时设太小会把「慢」误判成「没有」,跨机器探测时尤其明显。
  3. 算一下:上传 500 MB 的 PDF,磁盘实际要占多少?按「原文加向量各一份」算,答案是 1 GB 左右。

常见误区

  1. 「装了 AnythingLLM 就有模型了」。它不含模型,回答还是 Ollama 出的。 第一次启动要选模型提供方,填错就是「界面能开、一句话都答不出」。
  2. 「3001 和 11434 是一回事」。一个是知识库,一个是模型。回答傻查 11434,找不着资料查 3001。
  3. 「上传完就占那么多空间」。原文和向量各一份,实际约两倍。 再加上嵌入模型本身,磁盘要比预期多留一半。
自测三问(点开对答案) 1. AnythingLLM 负责什么,不负责什么? —— 负责文档切块、向量化存储、检索、拼提示词;不负责生成回答。回答由 Ollama 里的模型出。 2. 为什么说它是可选的? —— 因为它做的事(切块、检索、拼提示词)都可以自己用几十行代码实现。它省的是工夫,不是能力。 3. 「回答很傻」和「找不到资料」分别该查哪个端口? —— 前者查 11434(模型),后者查 3001(知识库与检索)。两个端口对应两类完全不同的问题。

装好之后要配四样东西,其中只有一个是真需要试的。下一节看切块参数怎么定。

相关笔记