LangChain 接本地 Ollama,我踩的 6 个坑
很多人接 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
还没有评论,来抢沙发~