Skip to content

3.2 Models

本节介绍 LangChain 中的模型集成和使用方式。


什么是 Models?

在 LangChain 中,Models(模型) 是 Agent 的"推理引擎"。大语言模型(LLM)能够像人类一样理解和生成文本,驱动 Agent 的决策过程和工具选择。

LangChain 提供了统一的模型接口,让你可以轻松集成和切换不同的模型提供商。


支持的模型提供商

LangChain 支持数百种模型集成:

提供商包名最新模型 (2025.12)
OpenAIlangchain-openaiGPT-5.1 Instant/Thinking, o3, o3-pro, o4-mini
Anthropiclangchain-anthropicClaude Opus 4.5, Claude Sonnet 4.5, Claude Haiku 4.5
Googlelangchain-google-genaiGemini 3 Pro, Gemini 3 Pro Deep Think
Azure OpenAIlangchain-openaiAzure 托管的 OpenAI 模型
AWS Bedrocklangchain-awsClaude, Titan, Llama 等
Ollamalangchain-ollamaLlama 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-proOpenAI 最强推理模型数学、科学、复杂推理
o4-mini快速推理,成本优化编码、数学任务
Gemini 3 Pro1501 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
)

常用配置参数

参数类型说明
modelstr模型名称/ID
temperaturefloat输出随机性 (0-2),越高越随机
max_tokensint最大输出 token 数
timeoutfloat请求超时时间(秒)
max_retriesint失败重试次数

三种调用方式

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 Provibe coding、编码基准领先
Agent 开发Claude Sonnet 4.5, Gemini 3 ProAgent 工作流优化
快速响应Claude Haiku 4.5, GPT-5.1 Instant低延迟、自然对话
长文本Gemini 3 Pro1M 上下文窗口
本地部署Ollama + Llama 3.3隐私保护、无 API 成本
多模态Gemini 3 Pro最强多模态理解
成本敏感GPT-5.1 Instant, o4-mini性价比最优

最佳实践

  1. 选择合适的模型 - 根据任务复杂度选择模型,不必总是用最强的
  2. 设置合理的 temperature - 需要确定性输出时用低值,需要创意时用高值
  3. 使用流式输出 - 提升用户体验,特别是长文本生成
  4. 监控 token 用量 - 控制成本,避免意外高额账单
  5. 实现重试逻辑 - 处理 API 暂时性错误
  6. 使用缓存 - 对重复请求使用缓存减少成本

上一节3.1 Agents

下一节3.3 Messages

基于 MIT 许可证发布。内容版权归作者所有。