ollama deepseek 本地部署 知识库

模型与算力

讲清用 AnythingLLM 给本地 ollama DeepSeek 挂私有知识库的完整步骤:选模型、切嵌入模型、分段投喂与检索自测。

本地 DeepSeek 已经能在 ollama 里跑起来了,但一让它答公司内部文档就胡说。这篇不聊参数和框架对比,只走一条动作线:在 AnythingLLM 里把 ollama 接上、给知识库配一个靠谱的嵌入模型、把文档切好灌进去,再用几个问题验证它到底有没有真读到你的资料。跑不通的地方也给排查顺序。

本地 DeepSeek 已经在 ollama 里跑起来,随口聊两句没问题,可一旦把公司内部的制度、产品说明、客服话术丢进去问,它就开始一本正经地编。原因不在模型不行,而是它压根没读到你的资料,只是拿训练时的印象在接话。要让它答得靠谱,得在中间加一层检索:把文档切好、转成向量存起来,提问时先把相关片段捞出来塞进上下文。AnythingLLM 就是干这层活的,图形界面点几下就能接上本地 ollama。

这篇不讲框架对比,也不聊参数调优,只走一条动作线:动手前确认三件事、先挑嵌入模型、再灌文档做分段、最后用几类问题验证它到底有没有真读到你的资料。跑不通的地方,末尾给一个从上到下的排查顺序。文档、模型这些数字会变,遇到要核对的地方我都指了站内页面,去那边看当时的值。

动手前先确认三件事

很多人一上来就装 AnythingLLM,结果卡在连不上,然后开始怀疑模型。其实连接层的问题和模型无关,先确认基础条件能省掉一大半来回。这三件事都不难,但顺序错了会浪费很多时间。

  • ollama 服务得能被 AnythingLLM 访问到:本机跑就填本机地址,容器里跑要改成宿主机可达的地址,两个东西不在同一网络里,填错地址当然连不上,这不是模型问题;
  • 确认拉下来的 DeepSeek 是对话模型,别把纯推理或纯补全的权重当聊天用,哪个权重适合对话,到 /models 看条目说明;
  • 先想清楚资料的用法:是「照着资料回答」还是「照资料改写」,前者对分段和召回的容错低,后者松一些。资料本身互相矛盾、或者大量表格扫描件,知识库只能照搬矛盾,不会替你裁决,这种情况不适用。

先挑嵌入模型,再谈挂知识库

知识库能不能答对,很大程度不取决于对话模型,而是取决于嵌入模型。嵌入模型负责把文档和问题都转成向量,靠向量距离找相关片段。嵌入选得不对,问法稍微一换就召不回,对话模型再强也只能干瞪眼——它根本没见过你要的那段资料。

配置项作用改完之后要做什么
对话模型生成回答,选对话权重无需重建索引,换个模型直接生效
嵌入模型文档和问题转成向量,决定召回必须重建索引,否则新旧向量对不上
分段设置决定每段多长、按什么切已入库文档需要重新投喂或重新同步
  • 中文资料优先挑中文语义检索表现稳的嵌入模型,别直接沿用默认的英文模型,选型维度可以去 /embeddings 对照;
  • 对话模型和嵌入模型是两个独立设置项,改完嵌入一定要重建索引,不然旧向量和新向量不在一个空间里,检索结果会乱;
  • 本地嵌入跑不动就换成外部嵌入接口,但得接受资料片段外发这一步,数据不出内网的要求下不适用。

投喂与分段:决定答得准不准

文档进库不是拖进去就完事,怎么切直接影响检索命中。切太碎,每段只剩半句话,上下文丢了;切太大,一段里塞了好几个主题,问题只匹配到其中一句,剩下全是噪声。分段粒度得按文档类型来定,没有一刀切的值。

  1. 先建一个小工作区挑一小批最典型的文件,比如三五个 FAQ 和一个制度文件,先灌进去跑通,出问题时才知道是哪一步坏。
  2. 按类型定分段条款、FAQ 这类短段落可以按自然段切;长章节按标题切,让每段围绕一个主题。
  3. 清理重复版本同一份制度存了三个版本,模型会把三版一起引用,答案自相矛盾。入库前先把旧版本删掉。
  4. 给文件起能看懂的名字检索时文件标题会一起参与匹配,命名混乱等于白白丢掉一路线索,用「部门-文档名-年份」这种格式。

怎么验证它真的读到了你的资料

灌完文档别急着用,先做一轮自测。核心是分清两种情况:是压根没召回相关片段,还是召回了但模型没答对。这两者的修法完全相反,搞混了会越调越乱。

  • 准备三类问题:文档里明写的、需要跨两段拼起来的、文档里根本没有的,第三类看它是否老实说不知道,而不是硬编;
  • 答错先看答案下面的引用来源,没引用任何文档说明没召回,引用了但答偏说明召回对、生成错;
  • 没召回就调分段和相似度门槛,召回了答错再考虑换对话模型或改写提问方式;
  • 多轮追问会带上历史上下文,测召回时用单轮问法,否则分不清是检索问题还是上下文干扰。

连不上、不回答、答得慢的排查顺序

出问题的表现就那几类,按层往下查比逐个试参数快得多。先排除最简单的连接问题,再动检索设置,最后才怀疑性能。

现象先查哪一层怎么判断
连不上模型连接层命令行先确认模型本身能出字,再查地址和端口
什么都搜不到检索层把相似度门槛调低做对照,能召回说明门槛太高
召回了但答偏生成层换对话模型或改写提问方式,看引用是否对得上
首字特别慢性能层看是模型加载占显存,还是长文档检索本身在等

显存和并发的量级算法,到 /models/deploy 自己套一遍,别凭感觉估。文档更新后要重新同步,更新频率高就做增量同步,更新少就直接重建索引,取舍看你的维护成本。

下一步本地部署只是起点,模型选型、显存需求、部署方式这些数字一直在变,去 /models/deploy 对照当时的实际配置,再决定要不要换权重或调并发。

常见问题

本地知识库能不能不联网就用?

检索和生成都可以完全在本地完成,前提是对话模型和嵌入模型都跑在自己机器上。一旦图省事把嵌入换成外部接口,投喂的资料片段就会离开本机,这时候「不联网」只剩对话那一段。想全本地,就选一个显存装得下的嵌入模型。

挂了知识库还是答不对,先改哪儿?

先看引用来源,别急着换更大的对话模型。来源没命中说明是分段或嵌入的问题,换模型也救不回来;来源对了但答案跑偏,再去看提问方式和上下文窗口够不够。一次只改一个变量,改完重跑同一批问题,才比得出效果。

多少份文档才值得上知识库?

看的是问答频率和资料稳定性,不是页数。资料经常改、答案又需要带出处,几份也值得建;资料基本不变、答案靠常识就能说清,塞进去反而增加维护量。小团队可以先拿一个高频问题的工作区试,用不上就别扩。

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