在使用 LangChain 的 ChatOllama
接口时,我们常常需要设置 base_url
,以指定 Ollama 服务的访问地址。然而,LangChain 官方文档对这个参数的解释十分简略,仅提到:
param base_url: str | None = None # Base url the model is hosted under.
这让不少初次接触 Ollama 与 LangChain 集成的开发者感到迷惑:这个参数究竟如何工作?默认地址在哪?是否有优先级机制?
为了解答这些疑问,我深入分析了 LangChain 和 Ollama 的源码,揭开了它背后的调用机制。
🧩 一步步追踪:LangChain ➜ Ollama ➜ Python 客户端 ➜ Go 服务
在 LangChain 中,ChatOllama
实际是对 Ollama API 的封装,其底层调用的是官方的 ollama-python 客户端。而该 Python 客户端内部,最终通过 HTTP 请求与本地或远程的 Ollama 服务通信。
📌 关键点:base_url
实际控制的并不是 LangChain 本身,而是传递给 Ollama 客户端的参数。
🧭 Ollama Python 客户端中的地址优先级逻辑
在深入阅读 ollama-python 源码后,可以明确看到,客户端的请求地址(即 base_url
)遵循如下 优先级规则:
✅ 优先级一(最高):
显式传递 host
参数
from ollama import Client
client = Client(host="http://192.168.31.163:11500")
当你明确指定了 host
参数时,所有请求将使用该地址,无视其他设置。
✅ 优先级二:
环境变量 OLLAMA_HOST
如果未传入 host
参数,客户端会尝试从环境变量中读取:
export OLLAMA_HOST=http://192.168.31.163:11500`
或在 Python 中:
import os
os.environ["OLLAMA_HOST"] = "http://192.168.31.163:11500"`
这是推荐方式之一,适合开发环境切换和部署配置。
✅ 优先级三(最低):
默认地址
如果未传入参数,且未设置环境变量,则默认使用:
`http://127.0.0.1:11434`
这假定 Ollama 服务在本机默认端口启动。
🔍 ChatOllama 实际调用示例(结合 base_url)
`from langchain.chat_models import ChatOllama
llm = ChatOllama(base_url="http://192.168.31.163:11500", model="qwen3:0.6b")`
这里传入的 base_url
最终会被封装为 host
参数传入 Ollama 的 Python 客户端。
💡 实践建议
场景 | 推荐方式 |
---|---|
本地开发调试 | 设置 base_url 明确指向 127.0.0.1:11434
|
跨平台(如 WSL ➜ Windows) | 使用 host="http://<Windows IP>:<端口>"
|
多环境部署 | 设置环境变量 OLLAMA_HOST
|
📎 总结
虽然 LangChain 对 base_url
参数的说明非常简略,但其底层依赖的 Ollama Python 客户端却提供了清晰而严谨的地址优先级机制。理解这套机制对于我们在多平台、多端部署 Ollama 模型非常关键。
💬 欢迎交流你在使用 Ollama 和 LangChain 时的经验与问题,评论区见!
如需我帮助你整理封面图、目录或代码高亮样式(用于简书发布),可以随时告诉我!是否还希望添加对 ChatOllama
其他参数(如 model
, temperature
)的说明?