3.2 Models
本节介绍 LangChain 中的模型集成和使用方式。
什么是 Models?
在 LangChain 中,Models(模型) 是 Agent 的"推理引擎"。大语言模型(LLM)能够像人类一样理解和生成文本,驱动 Agent 的决策过程和工具选择。
LangChain 提供了统一的模型接口,让你可以轻松集成和切换不同的模型提供商。
支持的模型提供商
LangChain 支持数百种模型集成:
| 提供商 | 包名 | 最新模型 (2025.12) |
|---|---|---|
| OpenAI | langchain-openai | GPT-5.1 Instant/Thinking, o3, o3-pro, o4-mini |
| Anthropic | langchain-anthropic | Claude Opus 4.5, Claude Sonnet 4.5, Claude Haiku 4.5 |
langchain-google-genai | Gemini 3 Pro, Gemini 3 Pro Deep Think | |
| Azure OpenAI | langchain-openai | Azure 托管的 OpenAI 模型 |
| AWS Bedrock | langchain-aws | Claude, Titan, Llama 等 |
| Ollama | langchain-ollama | Llama 3.3, Qwen 2.5, Mistral 等本地模型 |
模型特点速览
| 模型 | 特点 | 适用场景 |
|---|---|---|
| Claude Opus 4.5 | 最智能,代码/Agent 最强 | 复杂推理、企业工作流 |
| Claude Sonnet 4.5 | 最佳编码模型,性价比高 | 编码、Agent 开发 |
| Claude Haiku 4.5 | 快速高效,成本低 | 实时响应、大规模处理 |
| GPT-5.1 Instant | 更智能、更自然对话 | 日常任务、快速响应 |
| GPT-5.1 Thinking | 动态推理、复杂问题 | 数学、编码、深度分析 |
| o3 / o3-pro | OpenAI 最强推理模型 | 数学、科学、复杂推理 |
| o4-mini | 快速推理,成本优化 | 编码、数学任务 |
| Gemini 3 Pro | 1501 Elo,1M 上下文,最强多模态 | 复杂推理、vibe coding |
| Gemini 3 Deep Think | 极致推理,41% Humanity's Last Exam | 超复杂问题 |
模型初始化
基本初始化
python
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
# OpenAI 模型
openai_model = ChatOpenAI(
model="gpt-4o",
temperature=0.7,
max_tokens=1000
)
# Anthropic 模型
anthropic_model = ChatAnthropic(
model="claude-sonnet-4-5-20250929",
temperature=0.7,
max_tokens=1000
)常用配置参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | str | 模型名称/ID |
temperature | float | 输出随机性 (0-2),越高越随机 |
max_tokens | int | 最大输出 token 数 |
timeout | float | 请求超时时间(秒) |
max_retries | int | 失败重试次数 |
三种调用方式
LangChain 提供三种主要的模型调用方式:
1. Invoke - 同步调用
最基本的调用方式,返回完整的 AIMessage 响应:
python
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
# 简单调用
response = model.invoke("你好,请介绍一下自己")
print(response.content)
# 使用消息列表
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="你是一个友好的助手"),
HumanMessage(content="北京有哪些著名景点?")
]
response = model.invoke(messages)2. Stream - 流式输出
实时生成输出,返回 AIMessageChunk 迭代器:
python
model = ChatOpenAI(model="gpt-4o")
# 流式输出
for chunk in model.stream("讲一个关于人工智能的故事"):
print(chunk.content, end="", flush=True)3. Batch - 批量处理
并行处理多个独立请求:
python
model = ChatOpenAI(model="gpt-4o")
# 批量处理
questions = [
"什么是机器学习?",
"什么是深度学习?",
"什么是强化学习?"
]
# 并行执行,可设置并发数
responses = model.batch(
questions,
config={"max_concurrency": 3}
)
for q, r in zip(questions, responses):
print(f"Q: {q}")
print(f"A: {r.content}\n")高级功能
Tool Calling(工具调用)
让模型调用外部工具:
python
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气"""
return f"{city}今天晴,气温25度"
@tool
def search_web(query: str) -> str:
"""搜索网页"""
return f"搜索结果: {query}"
# 绑定工具
model = ChatOpenAI(model="gpt-4o")
model_with_tools = model.bind_tools([get_weather, search_web])
# 调用
response = model_with_tools.invoke("北京今天天气怎么样?")
print(response.tool_calls)Structured Output(结构化输出)
使用 Pydantic 模型约束输出格式:
python
from pydantic import BaseModel, Field
from langchain_openai import ChatOpenAI
class Person(BaseModel):
"""人物信息"""
name: str = Field(description="姓名")
age: int = Field(description="年龄")
occupation: str = Field(description="职业")
model = ChatOpenAI(model="gpt-4o")
structured_model = model.with_structured_output(Person)
result = structured_model.invoke("张三是一名30岁的软件工程师")
print(result) # Person(name='张三', age=30, occupation='软件工程师')Multimodal(多模态)
处理图片、音频等多模态输入:
python
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
model = ChatOpenAI(model="gpt-4o")
# 图片理解
message = HumanMessage(
content=[
{"type": "text", "text": "这张图片里有什么?"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.jpg"}
}
]
)
response = model.invoke([message])
print(response.content)生产环境配置
Token 用量追踪
python
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import get_openai_callback
model = ChatOpenAI(model="gpt-4o")
with get_openai_callback() as cb:
response = model.invoke("Hello!")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")速率限制
python
from langchain_core.rate_limiters import InMemoryRateLimiter
from langchain_openai import ChatOpenAI
# 创建速率限制器
rate_limiter = InMemoryRateLimiter(
requests_per_second=1, # 每秒请求数
check_every_n_seconds=0.1,
max_bucket_size=10
)
model = ChatOpenAI(
model="gpt-4o",
rate_limiter=rate_limiter
)Prompt 缓存
减少延迟和成本:
python
from langchain_anthropic import ChatAnthropic
# Anthropic 支持隐式 Prompt 缓存
model = ChatAnthropic(
model="claude-sonnet-4-5-20250929",
extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}
)可配置字段
支持运行时动态切换模型:
python
from langchain_openai import ChatOpenAI
# 创建可配置模型
model = ChatOpenAI(model="gpt-4o").configurable_fields(
model_name=ConfigurableField(
id="model_name",
name="Model Name",
description="使用的模型名称"
)
)
# 运行时切换模型
response = model.with_config(
configurable={"model_name": "gpt-3.5-turbo"}
).invoke("Hello!")模型选择建议
| 场景 | 推荐模型 | 原因 |
|---|---|---|
| 复杂推理 | Gemini 3 Deep Think, o3-pro | 极致推理能力 |
| 代码生成 | Claude Sonnet 4.5, Gemini 3 Pro | vibe coding、编码基准领先 |
| Agent 开发 | Claude Sonnet 4.5, Gemini 3 Pro | Agent 工作流优化 |
| 快速响应 | Claude Haiku 4.5, GPT-5.1 Instant | 低延迟、自然对话 |
| 长文本 | Gemini 3 Pro | 1M 上下文窗口 |
| 本地部署 | Ollama + Llama 3.3 | 隐私保护、无 API 成本 |
| 多模态 | Gemini 3 Pro | 最强多模态理解 |
| 成本敏感 | GPT-5.1 Instant, o4-mini | 性价比最优 |
最佳实践
- 选择合适的模型 - 根据任务复杂度选择模型,不必总是用最强的
- 设置合理的 temperature - 需要确定性输出时用低值,需要创意时用高值
- 使用流式输出 - 提升用户体验,特别是长文本生成
- 监控 token 用量 - 控制成本,避免意外高额账单
- 实现重试逻辑 - 处理 API 暂时性错误
- 使用缓存 - 对重复请求使用缓存减少成本
上一节:3.1 Agents
下一节:3.3 Messages