LangChain 获得ChatModel的工厂方法源码分析

LangChain目前兼容了市场上主流的大模型,只要我们安装好对应的扩展包,以及配置相应模型的API Key,那么使用LangChain来与大模型进行信息传递,就会非常方便。

大模型服务商 模型名称 环境变量 LangChain 扩展包 Chat 模型类
OpenAI gpt-5-nano OPENAI_API_KEY langchain-openai ChatOpenAI
Anthropic claude-sonnet-4-6 ANTHROPIC_API_KEY langchain-anthropic ChatAnthropic
Google gemini-2.5-flash-lite GOOGLE_API_KEY langchain-google-genai ChatGoogleGenerativeAI

在LangChain(1.2.17)中我们只要声明模型的名称,就能够获得对应的模型实例。这典型的是一个工厂方法。

python 复制代码
from langchain.chat_models import init_chat_model

def print_current_model():  
    model_names = ['gpt-5-nano',  
                   'openai:gpt-5.4',  
                   'claude-sonnet-4-6',  
                   'google_genai:gemini-2.5-flash-lite']  
    for model_name in model_names:  
        model = init_chat_model(model_name)  
        print(f"'{model_name}' -> {type(model).__name__}(实例)")

输出如下,可以看到,只要我们输入了模型名称,对应就会返回一个相应的ChatModel回来。

shell 复制代码
'gpt-5-nano' -> ChatOpenAI(实例)
'openai:gpt-5.4' -> ChatOpenAI(实例)
'claude-sonnet-4-6' -> ChatAnthropic(实例)
'google_genai:gemini-2.5-flash-lite' -> ChatGoogleGenerativeAI(实例)

LangChain的架构

工厂方法模式

LangChain 能兼容"市场上主流的大模型"的根本原因------抽象层独立发布为 langchain-core,任何第三方只要依赖它并继承基类,就能无缝接入。

提供ChatOpenAI,ChatAnthropic,ChatGoogleGenerativeAI类的第三方包都依赖了langchain-core这个包,它们都继承了langchain-core的抽象类BaseChatModel。

使用 uv pip show langchain-core查看包详情,可以看到都被其他第三方模型的包所依赖。

内部具体根据模型名称创建对应的ChatModel如下:

  1. 根据模型名称找到模型提供商,langchain内部根据模型提供商维护了一个字典,字典里面有模型提供商对应的第三方模块已经实例化的ChatModel配置
  2. 找到模型提供商之后使用python内置模块importlib导入对应的第三方包。
  3. 实例化得到ChatModel.(源码中实例化用到了一个functools.partial提前绑定了cls参数)
相关推荐
AI人工智能+电脑小能手4 小时前
大白话说Java设计模式-34-命令模式(业务实战篇)
java·spring·设计模式·命令模式·异步任务·撤销重做·事务封装
用户202252215066 小时前
字节发布"豆包工作",我从AI PM角度看到的不是功能,是上下文
设计模式
AI人工智能+电脑小能手7 小时前
大白话说Java设计模式-37-中介者模式(源码剖析篇)
java·设计模式·线程池·中介者模式·源码分析·executor·applicationeventmulticaster
电子科技圈9 小时前
IAR与东软睿驰达成战略合作,强化软件开发效率与生态协作
设计模式·开源·软件工程·软件构建·代码规范·设计规范·代码复审
艾醒(AiXing-w)9 小时前
LangChain 1.0 入门(五):提示词工程、partial变量、ChatPromptTemplate、Hub模板库
服务器·网络·langchain
吴声子夜歌9 小时前
Java面试——设计模式(四)
java·设计模式·面试
jyOverQ11 小时前
LangGraph:子图动态路由与 Agent 工作流设计
python·langchain
吴声子夜歌1 天前
Java面试——设计模式(一)
java·设计模式·面试
淼澄研学1 天前
Python实战:基于LangChain与Chroma构建企业级RAG知识库问答系统
开发语言·python·langchain
minji...1 天前
LangChain-AI应用开发框架(2) - LLM 大语言模型的三种接入方式 : API 远程调用、开源模型本地部署和 SDK 接入
langchain