LangChain 接本地 Ollama,我踩的 6 个坑

王老师445 阅读

很多人接 LangChain 都是先接 OpenAI,一切顺利。一换成本地 Ollama,各种诡异问题就来了。这篇把我踩过的坑都记下来,希望能帮你少走弯路。

坑一:OllamaLLM 和 OllamaChat 别用混。前者是纯文本补全,后者是对话模型接口。我用 Qwen 这类 instruct 模型,必须用 OllamaChat,用错了会出现回答上下文完全不连贯的情况。

坑二:工具调用要显式声明。本地模型的 function calling 能力不稳定,LangChain 里 bind_tools 之后,如果模型不支持,它会直接返回一段 JSON 文本而不是真的调用工具。我的解决办法是先在 Ollama 里测 tools 参数是否生效,再决定要不要走工具链路。

坑三:流式输出的格式问题stream 方法返回的是一个个 chunk,但 Ollama 的 chunk 和 OpenAI 的格式不一样,解析代码别直接抄 OpenAI 的。

坑四:model 名要写全。Ollama 的模型名默认带 tag,比如 qwen2.5:14b,如果你在 LangChain 里只写 qwen2.5,会报 model not found。

坑五:temperature 传参。有些模型不支持某些采样参数,LangChain 会照传,导致 Ollama 直接报错。解决方案是给 OllamaChat 传 options={"temperature": 0.2},而不是直接传 temperature 参数。

坑六:并发限制。本地模型并发一高就 OOM,LangChain 里的异步调用会瞬间打满。生产环境记得在 Ollama 侧把并发限住。

其实 LangChain 接本地模型的核心思路就一句话:把它当成一个 OpenAI 兼容服务,但参数和行为都要按本地模型的实际能力来调。

评论0

还没有评论,来抢沙发~