在 LibreChat 页面里加了本地 Ollama 模型,发消息却报错或者一直没反应,通常不是模型本身的问题,而是三件事没对齐:自定义端点里的 baseURL 用了容器视角访问不到的地址、models 里的模型名和 Ollama 实际提供的名称不一致、请求根本没到达本地服务。排查时建议按“先配置字段、再网络可达、最后看日志证据”的顺序走,每一步都能单独确认,不要一上来就反复改模型参数。
可以先按这个顺序判断:在自定义端点里把 baseURL 和模型名对齐,再用容器视角的地址写法确认能访问宿主上的 Ollama,最后在 Ollama 服务端日志里看到对应请求记录。三步都过,才说明请求真的打到了本地模型。会话历史由 LibreChat 自己保存,不能拿它当作链路是否通的证据。地址写法需要结合部署方式确认,不同环境不一样。
在自定义端点里填本地服务地址与模型名
LibreChat 的本地模型一般通过自定义端点接入,配置写在项目根目录的 librechat.yaml 里,字段名以项目实际文档为准。下面是一个通用骨架,替换项是 name、baseURL 和 models.default:
version: 1.2.8
endpoints:
custom:
- name: "Local Ollama"
apiKey: "ollama" # 占位即可,Ollama 默认不校验
baseURL: "http://host.docker.internal:11434/v1"
models:
default: ["qwen2.5:7b"] # 必须和 ollama list 里的名称完全一致
fetch: false
titleConvo: true
modelDisplayLabel: "Local Ollama"两个字段的作用要分开理解。baseURL 决定请求发到哪个地址,走 OpenAI 兼容接口时通常以 /v1 结尾;models.default 决定页面上能选到哪个模型名,这个名字会原样带进请求体。模型名必须和 ollama list 输出的名称逐字对齐,包括冒号后面的 tag,写成 qwen2.5 而本地实际是 qwen2.5:7b,Ollama 会返回找不到模型的错误。models.fetch 设为 true 时会去请求 /v1/models 拉列表,如果这一步失败,页面可能表现为模型下拉为空,可以先设成 false 用手写模型名排除干扰。
分清容器内 localhost 与宿主地址的差别
LibreChat 通常以容器方式运行,而 Ollama 一般装在宿主机上。容器里的 localhost 指向容器自己,不是宿主机,所以 baseURL 写 http://localhost:11434 时,请求打到了 LibreChat 容器内部,那里没有 Ollama 在监听,结果就是连接被拒绝或超时。两种常见写法:
http://host.docker.internal:11434:Docker Desktop 环境默认可用;Linux 上需要在启动 LibreChat 时加`--add-host`=host.docker.internal:host-gateway,或在 compose 里配置extra_hosts做同样的映射。适合 Ollama 跑在宿主机、LibreChat 跑在容器里的情况。http://172.17.0.1:11434:这是默认 docker0 网桥的网关地址,用ip addr show docker0能看到实际的网关。适合自定义 bridge 网络或不想依赖 host.docker.internal 的环境。如果你改了网段,这个地址要跟着换。
反过来,如果 LibreChat 也装在同一台机器且不是容器运行,那就直接用 http://127.0.0.1:11434,不必绕宿主网关。另外要确认 Ollama 的监听范围:默认只监听 127.0.0.1 时,容器访问宿主地址会被拒绝,需要让 Ollama 监听 0.0.0.0,并注意这会把服务暴露到本机网络,是否开启要结合自己的环境决定。
发一条消息并确认请求打到本地模型
配置改完后要重启 LibreChat,让它重新读取 librechat.yaml,然后在页面上选本地模型发一条短消息。确认链路是否真的通了,看的是 Ollama 这一侧的记录,而不是页面有没有回复:
# Ollama 以 systemd 运行时
journalctl -u ollama -f
# Ollama 在容器里运行时
docker logs -f ollama
# 直接在 LibreChat 容器里验证网络是否可达
docker exec -it librechat sh -c "curl -s http://host.docker.internal:11434/api/tags"发消息的同时观察日志,如果出现 POST /v1/chat/completions 或 POST /api/chat 之类的请求记录,说明请求已经到达本地模型服务;如果日志毫无动静,问题就在地址或网络层,回到上一节核对容器视角的地址。上面那条 curl 只是用来判断网络可达性,能返回模型列表说明容器能访问到宿主上的 Ollama;返回连接失败就说明地址或监听范围需要调整。
对话记录落在平台侧而不是模型服务侧
Ollama 只负责接收请求和返回结果,它不保存聊天历史;你在 LibreChat 页面看到的历史会话,是 LibreChat 自己写进数据库的记录。验证方式很简单:发完消息后刷新页面,或从侧边栏重新打开这个会话,之前的内容仍然可见,就说明记录保存在平台侧。这也解释了一个常见误判——有人通过删除 LibreChat 里的会话去找“模型端的对话”,在 Ollama 那边是找不到的。排查链路时只用请求日志做证据,不要用历史会话能不能打开来判断本地模型有没有被调通。