首页 / 文章

LangChain与Ollama:本地Qwen链、工具及架构

将 langchain-ollama 指向本地的 Qwen 标签,即可在无需云密钥的情况下获取链式处理、流式处理、工具调用以及结构化输出。包括设置步骤及可能遇到的问题。

发布者:REACTAPP.TOP阅读约 4 分钟931 词

来源: LangChain integrations with Ollama local LLM - qwen3.8:27b

通过 Ollama 使用本地 Qwen,集成至 LangChain

在您的机器上运行如 qwen3.8:27b 这样的开源聊天模型,并将它们接入 LangChain 的链、智能体及工具中——无需云 API 密钥,也无需按令牌计费。

一句话介绍 Ollama

Ollama 将模型权重、配置及运行环境封装在便于使用的 Modelfile 接口背后,同时自动处理常见场景下的 GPU 加速相关细节。只需拉取对应标签、输入提示语,即可在 11434 端口上暴露 HTTP API。

LangChain 对 Ollama 的集成

langchain-ollama 包提供了具备工具调用、结构化输出、多模态输入、流式处理、异步操作及对数概率功能的聊天模型——其界面与常见的云聊天服务类似,只是运行在本地主机上。

配置概要

安装 Ollama,拉取所需的聊天模型,并确认 API 能正常响应。在 Python 中,安装 LangChain 的 Ollama 集成模块,然后构建一个指向本地基础 URL 的聊天模型。

ollama pull qwen3.8:27b
ollama list

链与提示词

无需离开当前设备,即可构建简单的提示词→模型链来实现内容总结或问答功能:

from langchain_ollama import ChatOllama

llm = ChatOllama(
    model="qwen3.8:27b",
    temperature=0.3,
)

如果用户界面需要逐步更新,可实现令牌流式传输:

messages = [
    ChatMessage(role="control", content="thinking"),
    HumanMessage("What is 3^3?"),
]

工具与智能体

绑定工具的方式与绑定托管模型相同。本地模型必须支持调用工具,才能实现稳定的智能体循环——请选择已知能与 Ollama 工具协议兼容的标签。

messages = [
    SystemMessage(
        content="""
You are an expert at reading screenshots and technical documentation.

Rules:
- Extract information only from the image.
- Do not hallucinate missing values.
- Return concise answers.
- Preserve commands exactly as shown.
"""
    ),
    HumanMessage(
        content=[
            {
                "type": "image_url",
                "image_url": f"data:image/png;base64,{image_b64}",
            },
            {
                "type": "text",
                "text": "What is the download command for the Gemma 7B model?",
            },
        ],
    ),
]
SystemMessage
    ↓
"You are a technical documentation analyst.
 Extract information only from the image.
 Do not guess.
 Return concise answers."

HumanMessage #1
    ↓
"What is the download command?"

HumanMessage #2
    ↓
"What version of the model is shown?"

HumanMessage #3
    ↓
"What is the model's parameter count?"

结构化输出

当需要 JSON 格式数据时,应使用结构化输出辅助功能,而不仅仅是简单地要求“返回 JSON”:

HumanMessage(
    content=[
        {
            "type": "image_url",
            "image_url": f"data:image/png;base64,{image_b64}",
        },
        {
            "type": "text",
            "text": """
The image is a screenshot from an Ollama model page.

Task:
1. Find the section containing model download instructions.
2. Locate the Gemma 7B model.
3. Return only the exact Ollama pull command.

Output format:
Return JSON only:

{
    "model_name": "",
    "download_command": "",
    "confidence": ""
}

Do not include explanations.
"""
        },
    ]
)

选择此技术栈的原因

数据保留在本地,可无限次迭代且无速率限制,同时仍可使用 LangChain 的 chain/agent 词汇。用最佳质量或速度来换取隐私性与成本可预测性——这对于原型、内部工具及离线演示而言是相当划算的选择。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。

建议在每个示例中都明确标注模型标签,以避免升级时在教程进行过程中悄悄改变行为。