Danswer 接入本地 Ollama 与文档问答配置
Danswer 是一个可自托管的文档问答系统,核心用法是先把文档同步到知识库,再由大模型基于检索结果回答问题。
如果你已经用 Docker 把 Danswer 跑起来,下面真正影响能不能用的是两件事:模型提供方怎么接、文档怎么上传并验证检索是否命中。
本文按这个顺序讲,默认 Danswer 通过 Docker Compose 部署在 Linux 服务器上,本机另有 Ollama 提供模型。
先确认模型服务能被 Danswer 容器访问
Danswer 的各个容器和宿主机不在同一个网络命名空间里,所以在管理面板里填 http://localhost:11434 通常连不上 Ollama。
正确做法是填宿主机的局域网或内网 IP,例如 http://192.168.1.10:11434。
先在宿主机上验证 Ollama 本身可用:
curl http://127.0.0.1:11434/api/tags
有模型列表返回说明 Ollama 正常。
再让 Ollama 监听所有网卡,编辑 systemd 服务或环境变量:
sudo systemctl edit ollama
在打开的文件中加入:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
保存后重载并重启:
sudo systemctl daemon-reload
sudo systemctl restart ollama
然后用宿主机 IP 再测一次,确认防火墙放行了 11434 端口。
如果这一步不通,Danswer 面板里无论怎么填都会失败。
在管理面板添加模型提供方
以管理员账号登录 Danswer,进入 Admin Panel,找到 LLM 或 Model Providers 相关设置。
添加自定义提供方时,类型选 OpenAI 兼容接口,基础地址填 http://宿主机IP:11434/v1,API Key 随便填一个非空字符串即可,Ollama 不校验密钥。
生成模型和嵌入模型要分开选:生成模型用于组织回答,嵌入模型用于把文档切片转成向量。
嵌入模型一旦选定并开始索引,后续更换需要重建索引,所以第一次就选好。
保存后回到聊天页,发一句简单问题,观察是否返回模型输出。
如果报连接超时,优先回看上一节的 IP 和端口。
上传文档并验证检索效果
进入 Connectors 或知识库管理页,添加本地文件或网页连接器。
上传后系统会经历解析、切片、向量化三个阶段,状态从 In Progress 变为 Success 才算完成。
索引完成后不要只问一句“你好”,要问一个答案明确存在于文档中的问题,例如文档里写了某个配置项的值,就问这个值是多少。
如果回答泛泛而谈或答非所问,先检查检索是否命中:在回答引用的来源列表里看有没有对应文档片段。
没有命中通常是嵌入模型和索引不匹配,或文档切片过大导致语义被稀释,可以调小切片长度后重新索引。
常见卡点与避坑
- 面板里模型列表为空:多半是地址填了
localhost,改成宿主机 IP 再试。 - 上传后一直停在处理中:查看
docker compose logs里对应 worker 容器的报错,常见是嵌入模型加载失败或磁盘空间不足。 - 回答引用了无关文档:降低检索返回条数,或提高相似度阈值,避免把弱相关片段塞进上下文。
- 修改嵌入模型前先备份索引数据,否则需要全量重建,文档多时耗时明显。
验证是否真正可用
选三篇内容不同的文档,各提一个只有该文档能回答的问题,看引用来源是否指向正确文件。
再提一个文档中不存在的问题,观察系统是否明确表示没有相关信息,而不是编造答案。
这两类测试都通过,说明 Danswer 的检索和生成链路已经配置到位。