在LangChain中实例化模型,主要包括两种方式:直接初始化特定提供商的原生类,以及使用统一的初始化函数。核心区别在于:是想专注于开发,用最简洁的API;还是需要完全掌控模型的各项底层参数。
两种方式如下:
| 特性 | 直接初始化 | init_chat_model()函数 |
|---|---|---|
| 核心代码 | ChatOpenAI(model="gpt-4o", temperature=0.7) | init_chat_model("openai:gpt-4o", temperature=0.7) |
| 主要优点 | 直观,所用模型和参数一目了然。 | 统一接口,切换提供商(如从OpenAI换到Anthropic)仅需修改模型标识符,无需改变实例化代码 。 |
| 配置方式 | 显式,在__init__方法中直接配置。 | 统一,通过kwargs传递,框架会分发到具体的模型提供商 。 |
| 灵活性 | 高,能使用特定提供商的所有独有参数。 | 中高,覆盖大部分通用参数,可通过model_kwargs传递专属参数。 |
方式一:直接初始化
这是最标准、最直接的方式。需要从特定模型提供商的集成包中导入对应的类。
这种方式非常直观,并且能最大限度地利用特定模型的高级功能,因为可以直接在类的构造函数中设置该模型独有的参数 。
from langchain_openai import ChatOpenAI from langchain_anthropic import ChatAnthropic from langchain_google_genai import ChatGoogleGenerativeAI # 1. 实例化 OpenAI 模型 openai_model = ChatOpenAI( model="gpt-4o", temperature=0.7, max_tokens=1000, timeout=60, ) # 2. 实例化 Anthropic 模型 anthropic_model = ChatAnthropic( model="claude-3-5-sonnet-20240620", temperature=0.5, max_tokens=1024, ) # 3. 实例化 Google 模型 google_model = ChatGoogleGenerativeAI( model="gemini-1.5-pro", temperature=0.9, )方式二:使用统一的初始化函数 (init_chat_model)
这是LangChain官方推荐的更现代、更灵活的方式 。它的核心价值在于解耦代码和具体的模型提供商。
如果应用可能会因为成本、性能或功能等原因切换模型,这种方式会极大地降低修改成本。
它使用"provider:model_name"的字符串格式来指定模型 。
from langchain.chat_models import init_chat_model # 1. 初始化 OpenAI 模型 # 你只需要修改字符串,实例化代码无需改动 openai_model = init_chat_model( "openai:gpt-4o", # 格式: "提供商:模型名" temperature=0.7, max_tokens=1000, ) # 2. 切换到 Anthropic 模型 # 仅需修改第一个参数,下面的配置参数会根据新模型的语法进行传递 anthropic_model = init_chat_model( "anthropic:claude-3-5-sonnet-20240620", temperature=0.7, # temperature 等通用参数仍然有效 ) # 3. 切换到本地 Ollama 模型 ollama_model = init_chat_model( "ollama:llama3", # 前提是本地已运行 Ollama 服务 temperature=0.8, )两种方式怎么选?
为了快速开发或验证想法,使用“直接初始化”。这种方式代码清晰,对于熟悉特定模型(如OpenAI)API的开发者来说,上手最快 。
为了构建健壮、易于维护的生产级应用,优先选择
init_chat_model。它将应用逻辑与模型供应商解耦,未来更换模型时,只需修改配置文件中的模型名字符串,而不是大动干戈地修改核心业务代码。
进阶用法
模型实例化后,通常会用invoke、stream或batch方法来调用 。
此外,实例化模型后,通常可以直接用于构建更复杂的组件。
集成到智能体 (Agent):实例化的模型是智能体的核心推理引擎 。
from langchain.agents import create_agent from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4o") def get_weather(city: str) -> str: return f"{city}的天气是晴朗的。" # 将实例化后的模型传入智能体 agent = create_agent(model=model, tools=[get_weather])- 用于构建检索链 (Retrieval Chain):在检索增强生成(RAG)应用中,模型负责根据检索到的上下文生成最终答案 。
from langchain.chains import RetrievalQA from langchain_openai import ChatOpenAI from langchain.vectorstores import FAISS model = ChatOpenAI(model="gpt-3.5-turbo") # 假设 vector_store 已经准备好 # qa_chain = RetrievalQA.from_chain_type(llm=model, retriever=vector_store.as_retriever())