ollama + anythingllm 搭建知识库

模型与算力

讲清用 AnythingLLM 对接 Ollama 搭本地知识库的选型与排错动作:模型分工、嵌入与重排怎么配、切分与检索怎么调、出错按什么顺序查。

装完 Ollama 和 AnythingLLM,卡住的地方通常不是安装本身,而是选哪个模型当对话、哪个当嵌入、文档切多大、问不出东西时该先怀疑哪一环。这篇不铺概念,按你能动手的顺序给判断标准和排查路径,让你把一套本地知识库真正跑成能问的东西。

装完 Ollama 和 AnythingLLM,卡住的地方通常不是安装本身,而是选哪个模型当对话、哪个当嵌入、文档切多大、问不出东西时该先怀疑哪一环。很多人两个软件都装好了,界面也能打开,但一传文档就报错,或者能聊却永远答不到点子上,问题基本都出在配置链路而不是软件本身。这篇按你能动手的顺序给判断标准和排查路径,让你把一套本地知识库真正跑成能问的东西。

提前说一句:本文不涉及任何具体数值和版本号。模型能力、价格、部署门槛都在变,需要对比时去站内对应页面看当时的数字,别拿旧印象做决定。

先把三个角色的模型分清,再动手配

一套本地知识库至少牵扯三类模型,分工完全不同,混起来配是新手最常见的坑。对话模型负责读召回的资料、组织成人话回答;嵌入模型负责把文档和你的问题都转成向量,靠向量比对找相似;重排模型可选,只在召回之后对候选片段重新排序。三者职责分明,对话模型答得好不好,和嵌入模型找得准不准,是两条独立的问题。

  • 对话模型看的是理解和表达,中文知识库优先选中文语料充分、指令跟随稳的;
  • 嵌入模型看的是中文语义相似度,选错会出现「关键词对得上但语义召不回」,中文场景尤其要挑多语言或中文优化过的;
  • 重排模型只在召回之后起作用,文档几百页以上、问题里带具体名词时收益明显,几句话的小知识库可以先不加;
  • 挑选口径不要凭记忆,去站内的模型库核对当时可用的模型和规格,确认名字还在维护。
角色干什么配错的典型症状
对话模型读召回资料并组织回答能检索到但答非所问、夹杂外部知识
嵌入模型文档和问题转成向量做相似匹配召回为空,或永远只召回无关片段
重排模型对召回片段重新排序召回片段多但排在前面的都不相关

安装与对接:把两端说上话

顺序很重要:先让 Ollama 单独跑起来,确认本地接口能被别的程序调用,再把地址填进 AnythingLLM 的模型设置里。两边同时装同时试,出错了你根本分不清是哪一头的问题。Ollama 的本地接口地址、端口和兼容口径可以对照站内官方 API 说明确认,地址填错或端口被占,是「连不上」的第一大原因。

  1. 第一步:确认 Ollama 可用在终端里用一次简单调用验证服务在响应,确认监听地址和端口;这一步通不过,后面全是白搭。
  2. 第二步:填 AnythingLLM 的连接信息在模型设置里分别配对话模型和嵌入模型两个入口,两个都指向本地服务。只配一个,会出现「能聊天但上传文档就报错」。
  3. 第三步:分开验证两条链路先用一句话闲聊验证对话链路,再传一个小文件验证检索链路。哪一步失败,问题就锁定在哪一段。
  4. 第四步:记录能跑通的组合把模型名、参数和端口记下来,下次环境重建直接照抄,省掉重复试错。

如果填完地址一直转圈或超时,先检查 Ollama 是否允许外部程序访问、防火墙有没有拦端口,再去核对模型是不是已经下载到本地。很多时候不是配置错,是模型压根没拉下来。

文档切分与工作区组织

切分粒度没有万能参数,要按文档类型定。问答型手册、条目清晰的说明文档可以切小一点,提高命中精度;连续叙述的报告、长段落文档切大一点,保留上下文,否则一句话被拦腰截断,模型拿到半句话自然答不准。

  • 按工作区隔离主题,别把所有资料堆进同一个工作区,否则检索互相污染,回答容易串台;
  • 上传后先看切片预览,把被切断的表格、代码块手动调整,这一步收益比后面反复调提示词大;
  • 文档更新后必须重新嵌入,只替换文件不重建索引,问出来的还是旧内容;
  • 同一份文档在两个工作区重复上传,会互相抢召回,保持一份资料一个归属。
检索质量的大头在切分和工作区组织,不在提示词写得多花哨。

提问问不出东西时,按这个顺序查

不要一上来就换模型。问不出东西有四种完全不同的病因,按下面的顺序排查,每一步都能排除掉一大片可能,比乱试快得多。

  1. 第一步:查召回有没有命中把召回片段调出来看。召回为空,说明是切分或嵌入模型的问题,跟对话模型没关系,换对话模型纯属浪费。
  2. 第二步:查命中是否相关召回有内容但都不搭边,多半是切分太碎或工作区混装,先改切分、拆工作区,再看要不要加重排。
  3. 第三步:查命中且相关但答得离谱这时才轮到换对话模型或改提示词。提示词明确写「只根据给出的资料回答,资料里没有就说没有」,能挡住大部分瞎编。
  4. 第四步:查响应速度速度慢通常是显存不够导致模型频繁换入换出,去站内部署测算页面核一遍你的硬件和量化档位能不能装下,别硬扛。

什么情况下这套方案不适用

AnythingLLM 加 Ollama 适合个人和小团队自用,但它不是万能的,下面几种情况硬上会很快撞墙,提前认清能省掉后面的返工。

  • 文档量极大、更新频繁、还要多人并发提问时,单机方案会很快到瓶颈,该考虑带独立索引和权限控制的部署;
  • 需要严格权限隔离、审计留痕的场景,默认工作区模型不一定够,先确认合规要求再选型;
  • 只是想让模型知道几条固定规则,直接写进提示词比搭知识库省事得多,别为了用工具而用工具。

判断标准很简单:如果你的资料是「少量固定、几乎不变」,这套方案绰绰有余;如果资料是「大量、高频变动、多人用」,先想清楚维护成本再动手。

下一步选型前先去站内核对当时的模型清单和部署门槛,别拿旧印象做决定;跑通后把能用的组合记下来,下次直接复用。

常见问题

AnythingLLM 配好 Ollama 后,上传文档却总说找不到内容,先查哪里?

先看切片预览里文档有没有真的被解析出文字,扫描版 PDF 经常是空的;再确认嵌入模型那一栏也指向了本地服务,只配对话模型是查不到东西的。两步都正常,再去调切分粒度和工作区归属。

本地知识库回答里夹带模型自己的知识,怎么压住?

提示词里明确写「只依据提供的资料作答,资料中没有就直说没有」,同时把召回片段数量调高一点、切分调细一点,让答案有据可依。如果资料本身自相矛盾,先清理资料,靠提示词压不住源头问题。

同一套配置换台机器就问不动了,通常是什么原因?

多半是嵌入模型变了或没重新嵌入。嵌入模型换了以后旧索引和新问题不在同一个向量空间,检索必然失效,需要重建索引。迁移前先把模型清单和嵌入模型固定下来,再搬文档。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。