Skip to content

模型接口

LangChain 提供了统一的模型接口,允许开发者通过 init_chat_model() 函数以相同的 API 调用不同提供商的 LLM。这种设计使得模型切换和混合使用变得极其简单。

init_chat_model()

init_chat_model() 是初始化和切换模型的统一入口。其基本用法如下:

python
from langchain.chat_models import init_chat_model

# 最简单的用法
model = init_chat_model("openai/gpt-4o")

参数说明

参数类型说明
modelstr模型标识符,格式为 provider/model-name
temperaturefloat温度参数 (0-2),控制输出的随机性
max_tokensint最大生成 token 数
timeoutfloat请求超时时间(秒)
max_retriesint最大重试次数
base_urlstr自定义 API 端点(兼容 OpenAI 格式)
api_keystrAPI 密钥(推荐使用环境变量)

模型提供商

OpenAI

python
from langchain.chat_models import init_chat_model

# GPT-4o 系列
model = init_chat_model("openai/gpt-4o")
model = init_chat_model("openai/gpt-4o-mini")
model = init_chat_model("openai/gpt-4-turbo")

# o 系列推理模型
model = init_chat_model("openai/o1")
model = init_chat_model("openai/o3-mini")

# 自定义参数
model = init_chat_model(
    "openai/gpt-4o",
    temperature=0.3,
    max_tokens=2048,
    timeout=30,
)

# 自定义 API 端点(兼容 OpenAI 格式的服务)
model = init_chat_model(
    "openai/gpt-4o",
    base_url="https://your-proxy.com/v1",
    api_key="your-api-key",
)

Google Gemini

python
# Gemini 系列
model = init_chat_model("gemini/gemini-2.0-flash")
model = init_chat_model("gemini/gemini-2.0-pro")
model = init_chat_model("gemini/gemini-2.5-pro-exp-03-25")

# 配置安全设置
model = init_chat_model(
    "gemini/gemini-2.0-flash",
    temperature=0.5,
    max_tokens=8192,
)

Anthropic Claude

python
# Claude 系列
model = init_chat_model("anthropic/claude-sonnet-4-20250514")
model = init_chat_model("anthropic/claude-3-5-haiku")
model = init_chat_model("anthropic/claude-opus-4-20250514")

# 需要设置 ANTHROPIC_API_KEY 环境变量
model = init_chat_model(
    "anthropic/claude-sonnet-4-20250514",
    temperature=0.2,
    max_tokens=4096,
)

Ollama (本地模型)

python
# Ollama 本地模型
model = init_chat_model("ollama/llama3.2")
model = init_chat_model("ollama/qwen2.5")
model = init_chat_model("ollama/deepseek-r1")

# 指定 Ollama 服务地址
model = init_chat_model(
    "ollama/llama3.2",
    base_url="http://localhost:11434",
    temperature=0.7,
)

DeepSeek

python
# DeepSeek 系列
model = init_chat_model("deepseek/deepseek-chat")
model = init_chat_model("deepseek/deepseek-reasoner")

# DeepSeek 通过自定义端点
model = init_chat_model(
    "openai/deepseek-chat",  # OpenAI 兼容格式
    base_url="https://api.deepseek.com/v1",
    api_key="your-deepseek-api-key",
)

更多提供商

python
# 通义千问
model = init_chat_model("qwen/qwen-max")

# Moonshot
model = init_chat_model("moonshot/moonshot-v1-8k")

# Groq(快速推理)
model = init_chat_model("groq/llama3-70b-8192")

# Azure OpenAI
model = init_chat_model(
    "azure/gpt-4o",
    base_url="https://your-resource.openai.azure.com",
    api_key="your-azure-api-key",
)

环境变量设置

模型初始化时会自动读取以下环境变量:

提供商环境变量
OpenAIOPENAI_API_KEY
GeminiGOOGLE_API_KEY
AnthropicANTHROPIC_API_KEY
Ollama无需 API Key(需要 OLLAMA_BASE_URL
DeepSeekDEEPSEEK_API_KEY
自定义通过 api_key 参数显式传递

创建 .env 文件:

bash
OPENAI_API_KEY=sk-xxxxxxxxxxxx
GOOGLE_API_KEY=AIzaxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx

运行时切换模型

LangChain 支持在运行时动态切换模型,无需重启应用:

python
from langchain.chat_models import init_chat_model
from langchain import create_agent
from langchain.tools import tool

@tool
def get_current_time() -> str:
    """获取当前时间。"""
    from datetime import datetime
    return datetime.now().isoformat()

# 基础 Agent
agent = create_agent(
    model=init_chat_model("openai/gpt-4o-mini"),
    tools=[get_current_time],
    system_prompt="你是一个有用的助手。",
)

# 简单场景使用快速模型
result_simple = agent.invoke({
    "messages": [{"role": "user", "content": "现在几点了?"}]
})

# 复杂推理场景切换到高级模型
agent.model = init_chat_model("openai/o3-mini")

result_complex = agent.invoke({
    "messages": [{"role": "user", "content": "解释量子纠缠的原理"}]
})

多模型路由

对于生产环境,可以根据任务类型路由到不同模型:

python
from langchain.chat_models import init_chat_model

class ModelRouter:
    """根据任务类型自动选择模型。"""
    
    def __init__(self):
        self.fast_model = init_chat_model(
            "openai/gpt-4o-mini",
            temperature=0.1,
        )
        self.balanced_model = init_chat_model(
            "gemini/gemini-2.0-flash",
            temperature=0.3,
        )
        self.reasoning_model = init_chat_model(
            "openai/o3-mini",
            temperature=0.5,
        )
    
    def get_model(self, task_type: str):
        if task_type == "simple":
            return self.fast_model
        elif task_type == "reasoning":
            return self.reasoning_model
        return self.balanced_model

模型支持的绑定功能

不同模型对结构化输出和函数调用的支持程度不同:

功能OpenAIGeminiClaudeOllama
结构化输出✅ 原生✅ 原生✅ 原生
并行工具调用因模型而异
流式输出
JSON 模式

最佳实践

  1. 使用环境变量管理 API Key,不要硬编码
  2. 为生产环境设置超时和重试,防止偶发故障
  3. 根据任务复杂度选择模型,避免为简单任务使用昂贵模型
  4. 利用自定义端点接入兼容 OpenAI 格式的服务,增加灵活性
  5. 测试不同模型的表现,选择最适合你场景的模型

下一步

本站为非官方中文学习站点,不代表 LangChain 官方。部分内容参考官方文档并重新整理为中文学习笔记。