abc小站

2026-08-31

AnythingLLM:先建工作区,再把文件嵌进去

文档堆在磁盘上,聊天窗口看不见。AnythingLLM 干的就是这件事:自建一套能检索的文档对话,不必先搭一堆服务。作者是 Mintplex Labs。文档页此刻写着 v1.16.1。

两条安装路径。一个人用、数据不出这台机器,走 Desktop,一键装。要多人、要权限、要把聊天窗嵌到网站上、要在浏览器里打开,走 Docker。两边都开源。Docker 没有内置 LLM 提供方,Desktop 有。向量库、任意 LLM、内置嵌入、Agent,两边都有。

Docker 先把盘挂上

先拉镜像:

docker pull mintplexlabs/anythingllm:latest

跑容器时必须把宿主机目录挂到 /app/server/storage。文档写得很凶:不加 -v,容器一重启数据就没。默认路径用 $HOME/anythingllm,因为进程以 UID/GID 1000 跑,家目录你自己有写权限。挂到 /opt/data 这类 root 目录,常见报错是打不开 anythingllm.db。那时该 chown -R 1000:1000 存储目录,别 chmod 777——库、文件、带密钥的 .env 会变成谁都能读写。

起来之后浏览器打开 http://localhost:3001。连本机 Ollama,文档说失败几乎全是「容器里的 localhost 不是你电脑上的 localhost」,要按他们的 localhost 连接说明改地址。CPU 缺 AVX2 时,默认向量库会直接 Illegal instruction 退出,老机器和部分云实例会踩这个坑。

附加和嵌入不是一回事

先建工作区。模型只能看见这个工作区里的文档。聊天里拖文件,或点输入框的 +,叫附加。全文塞进当前对话。这份文件只属于这个工作区和这条线程,换一条聊天就没了。输入框上的数字是当前上下文占用,悬停能看。

上下文撑不住时,界面会问三件事:取消、硬塞(会裁切,文档不建议)、嵌入。嵌入就是 RAG:切块、用嵌入模型变成向量、写入向量库。以后每条线程都能检索。多人模式里,有权进这个工作区的人都能用。1.6.0 起也支持拖进聊天窗口时直接上传并嵌入;图片只作用于这一轮,且模型本身要能看图。

嵌入模型是系统级的,不能每个工作区换一个。换嵌入器要删掉已传文件再嵌一遍。向量库默认 LanceDB,也是系统级。文档劝你别在库之间来回跳,它不会自动搬家。

检索调不好,先开工作区齿轮。Max Context Snippets 多数模型先放 4–6 段,再多容易噪声,上下文还要分给系统提示、历史和当前问题。Document similarity threshold 默认会滤掉低分块(文档写过默认大约 20%),答非所问时可以先改成 No Restriction,看是不是好答案被滤掉了。LanceDB 下可以把搜索改成 Accuracy Optimized,多取再重排,文档说大约多 100–500 毫秒,第一次还会下载重排模型。

还不行,把已经嵌入的文档钉上。钉住等于全文进上下文,不走 RAG。只适合能塞进窗口、或这份文件对这个工作区特别关键的材料。

问法也要改。别对几百份食谱说「列出三道高热量的菜名」——模型并没有把整库装进脑子,它只拿到跟这句话靠近的几段。问具体菜名、具体章节,检索才有抓手。嵌入模型默认是 all-MiniLM-L6-v2 这类句向量,中文效果不好时,先换嵌入器,再谈提示词。

材料来自 AnythingLLM 文档:介绍Docker 总览本地 Docker文档附加与 RAG。开源仓库:Mintplex-Labs/anything-llm