模型接口
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")参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
model | str | 模型标识符,格式为 provider/model-name |
temperature | float | 温度参数 (0-2),控制输出的随机性 |
max_tokens | int | 最大生成 token 数 |
timeout | float | 请求超时时间(秒) |
max_retries | int | 最大重试次数 |
base_url | str | 自定义 API 端点(兼容 OpenAI 格式) |
api_key | str | API 密钥(推荐使用环境变量) |
模型提供商
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",
)环境变量设置
模型初始化时会自动读取以下环境变量:
| 提供商 | 环境变量 |
|---|---|
| OpenAI | OPENAI_API_KEY |
| Gemini | GOOGLE_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
| Ollama | 无需 API Key(需要 OLLAMA_BASE_URL) |
| DeepSeek | DEEPSEEK_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模型支持的绑定功能
不同模型对结构化输出和函数调用的支持程度不同:
| 功能 | OpenAI | Gemini | Claude | Ollama |
|---|---|---|---|---|
| 结构化输出 | ✅ 原生 | ✅ 原生 | ✅ 原生 | ✅ |
| 并行工具调用 | ✅ | ✅ | ✅ | 因模型而异 |
| 流式输出 | ✅ | ✅ | ✅ | ✅ |
| JSON 模式 | ✅ | ✅ | ✅ | ✅ |
最佳实践
- 使用环境变量管理 API Key,不要硬编码
- 为生产环境设置超时和重试,防止偶发故障
- 根据任务复杂度选择模型,避免为简单任务使用昂贵模型
- 利用自定义端点接入兼容 OpenAI 格式的服务,增加灵活性
- 测试不同模型的表现,选择最适合你场景的模型