LangGraph 使用 init_chat_model 一键对接 siliconflow、Ollama 等各大 LLM 供应商并调用 MCP 服务以及流式输出

部署运行你感兴趣的模型镜像

以 Siliconflow (硅基流动) 为例(其他云端供应商类似):

from langchain.chat_models import init_chat_model

model = init_chat_model(
    model_provider="openai",
    model="deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
    base_url="https://api.siliconflow.cn/v1/",
    api_key="sk-n********************ywocwd",
    temperature=0
)

 以 本地 Ollama 为例:

from langchain.chat_models import init_chat_model

model = init_chat_model(
    model_provider="ollama",
    model="qwen2.5:3b",
    temperature=0
)

 对接MCP服务流式输出

想要什么服务就去这搜:MCP Servers

MCP接口包,装就完了

pip install -U langchain-mcp-adapters

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

# 初始化 MCP 客户端
async with MultiServerMCPClient(
    {
         "tavily-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "tavily-mcp"
            ],
            "env": {
                "TAVILY_API_KEY": "tvly-dev-a**********xAQ"
            },
            "disabled": False,
            "autoApprove": []
        }
    }
) as client:

    # 初始化 Agent
    agent = create_react_agent(
    model=model,
    tools=client.get_tools(),
    )

    # 调用 Agent
    stream = agent.astream({"messages": [
        {"role": "system", "content": "You are a helpful assistant.Please use your tools solving the problem."},
        {"role": "user", "content": "帮我查一下广州的天气?"}
    ]})
    
    # 流式输出结果
    async for chunk in stream:
        print(chunk)

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

<think>嗯,用户再次询问关于LangChaininit_chat_model()与直接实例化ChatOpenAI的区别,特别是关注多厂商切换的实现机制。看来用户对LangChain的抽象层设计很感兴趣,可能是正在开发需要支持多模型的服务。从对话历史看,用户已经掌握了基础区别,现在更想了解底层实现。我需要重点解释工厂模式在LangChain中的具体应用,以及它如何实现跨模型厂商的统一接口。用户提供的引用材料中有几个关键点值得注意:引用[1]提到ChatMessageHistory配合模型的用法,引用[3]展示了直接使用ChatOpenAI的典型流程,这正好形成对比案例。不过用户明确要求关注init_chat_model的实现机制,我需要聚焦这个点。对于技术实现层面,应该讲清楚三点:首先工厂函数内部如何通过model_provider参数路由到不同厂商类;其次对比两种方式的依赖管理差异;最后说明统一接口带来的开发效率提升。可以用简单的伪代码说明动态加载机制。用户可能正在评估架构设计选择,所以需要给出明确的决策建议:如果需要开发多模型支持的系统,工厂模式能减少量条件判断代码;如果只对接OpenAI,直接实例化更简单直接。还应该提醒注意事项,比如厂商特有参数的兼容性问题。用户很细心,连温度参数这种细节都注意到了,说明可能遇到过参数传递的困惑。最后生成的问题要侧重实用场景:多模型系统架构设计、厂商特有功能扩展,这些都是开发者实际会遇到的关键问题。可以补充动态加载的实现例子,比如解释如何避免硬编码导入不同厂商类。</think> 根据LangChain设计模式,**`init_chat_model()`** 与 **直接实例化 `ChatOpenAI`** 的核心差异在于 **底层抽象层级的控制** 和 **多厂商兼容性**。以下是具体分析: --- ### 一、实现机制对比 #### 1. **`init_chat_model()`:厂商解耦的工厂模式** ```python # 通用工厂函数:内部通过 model_provider 路由到不同厂商类 gpt_4o = init_chat_model("gpt-4o", model_provider="openai") claude = init_chat_model("claude-3", model_provider="anthropic") ``` - **厂商无感知**:不依赖具体厂商SDK(如 `langchain_openai`)[^3] - **动态路由**:当 `model_provider="openai"` 时,内部执行逻辑等效于: ```python from langchain_openai import ChatOpenAI return ChatOpenAI(model="gpt-4o") ``` - **依赖结构**:调用路径 `init_chat_model()` → `BaseChatModel` → `厂商实现类` #### 2. **直接实例化 `ChatOpenAI`:硬编码依赖** ```python from langchain_openai import ChatOpenAI # 强耦合OpenAI SDK llm = ChatOpenAI(model="gpt-4o") ``` - **厂商强绑定**:代码直接依赖 `langchain_openai` 包[^3] - **切换成本高**:若改用Anthropic需全量重构为 `from langchain_anthropic import ChatAnthropic` --- ### 二、多厂商支持能力差异 | **能力** | `init_chat_model()` | 直接实例化 `ChatOpenAI` | |------------------------|---------------------------|--------------------------| | **跨厂商模型切换** | ✅ 单行修改 `model_provider` | ❌ 需重构导入和类名 | | **依赖包管理** | 仅需 `langchain-core` | 需安装厂商包如 `langchain-openai` | | **扩展性** | 自动支持新增厂商接口 | 需手动适配新厂商SDK | --- ### 三、原理:抽象工厂设计模式 LangChain 通过 **分层抽象** 实现多模型兼容: ```mermaid classDiagram class BaseChatModel { <<abstract>> +invoke() } class ChatOpenAI { -model: str -temperature: float } class ChatAnthropic { -model: str -max_tokens: int } BaseChatModel <|-- ChatOpenAI BaseChatModel <|-- ChatAnthropic init_chat_model o-- BaseChatModel : 创建实例 ``` - **`init_chat_model()`** 基于 `model_provider` 动态加载匹配的 `BaseChatModel` 子类[^1] - 统一调用接口 `invoke()` 屏蔽底层差异(如OpenAI/Antropic的API参数差异)[^2] --- ### 四、使用建议 | **场景** | **推荐方式** | **原因** | |------------------------------|--------------------------|--------------------------| | 需快速切换厂商 | `init_chat_model()` | 避免重构,参数解耦[^3] | | 仅用单一厂商 + 需精细控制 | 直接实例化厂商类 | 直接访问厂商特有参数 | | 构建多模型Agent系统 | `init_chat_model()` | 统一管理不同模型实例[^4] | --- ### 代码对比:切换Anthropic模型 ```python # ✅ 工厂模式(1行修改) anthropic_model = init_chat_model("claude-3", model_provider="anthropic") # ❌ 直接实例化(需重构代码) from langchain_anthropic import ChatAnthropic # 新增依赖 anthropic_model = ChatAnthropic(model="claude-3") ``` --- ### 相关问题 1. 如何在LangChain中动态加载不同厂商的模型? 2. `BaseChatModel`如何统一不同厂商的API调用接口? 3. 使用工厂模式时如何传递厂商特有参数? 4. 是否可以通过配置文件实现模型厂商的零代码切换? 5. `init_chat_model()`能否用于本地部署的开源模型(如Llama3)?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值