第二章:Models(模型)深入解析
1. 模型概述
大型语言模型(LLM)是强大的 AI 工具,能够解释和生成类人文本。在 LangChain 生态系统中,模型是构建智能应用的核心组件。
模型支持的核心能力
| 能力 | 说明 |
|---|---|
| 工具调用(Tool Calling) | 模型能够决定何时以及如何调用外部工具或函数 |
| 结构化输出(Structured Output) | 将模型输出格式化为预定义的数据结构(如 JSON、Pydantic 模型) |
| 多模态(Multimodality) | 支持处理图片、音频、视频等非文本数据 |
| 推理(Reasoning) | 进行复杂的逻辑推理和问题解决 |
模型在 Agent 中的角色
模型是 Agent 的推理引擎,承担以下关键职责:
- 决策制定:决定调用哪些工具以及调用顺序
- 结果解释:分析和理解工具返回的结果
- 响应生成:在适当时机给出最终答案
2. 初始化模型
核心 API:
init_chat_model(来自langchain.chat_models)
init_chat_model 是 LangChain 中初始化聊天模型的标准方式,提供统一的接口来连接不同的模型提供商。
OpenAI
import os
from langchain.chat_models import init_chat_model
os.environ["OPENAI_API_KEY"] = "sk-..."
model = init_chat_model("gpt-5.4")
Anthropic
import os
from langchain.chat_models import init_chat_model
os.environ["ANTHROPIC_API_KEY"] = "sk-..."
model = init_chat_model("claude-sonnet-4-6")
Azure OpenAI
import os
from langchain.chat_models import init_chat_model
os.environ["AZURE_OPENAI_API_KEY"] = "..."
os.environ["AZURE_OPENAI_ENDPOINT"] = "..."
os.environ["OPENAI_API_VERSION"] = "2025-03-01-preview"
model = init_chat_model(
"azure_openai:gpt-5.4",
azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],
)
Google Gemini
import os
from langchain.chat_models import init_chat_model
os.environ["GOOGLE_API_KEY"] = "..."
model = init_chat_model("google_genai:gemini-2.5-flash-lite")
AWS Bedrock
from langchain.chat_models import init_chat_model
model = init_chat_model(
"anthropic.claude-3-5-sonnet-20240620-v1:0",
model_provider="bedrock_converse",
)
HuggingFace
import os
from langchain.chat_models import init_chat_model
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "hf_..."
model = init_chat_model(
"microsoft/Phi-3-mini-4k-instruct",
model_provider="huggingface",
temperature=0.7,
max_tokens=1024,
)
OpenRouter
import os
from langchain.chat_models import init_chat_model
os.environ["OPENROUTER_API_KEY"] = "sk-..."
model = init_chat_model(
"auto",
model_provider="openrouter",
)
3. 模型参数详解
init_chat_model 支持以下标准参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型名称或标识符,支持 "provider:model" 格式(如 "openai:gpt-4") |
api_key |
string | 否 | 认证密钥,也可通过环境变量设置 |
temperature |
number | 否 | 控制输出随机性。值越高越有创意,值越低越确定性 |
max_tokens |
number | 否 | 限制响应的最大 token 数量 |
timeout |
number | 否 | 等待模型响应的最大秒数 |
max_retries |
number | 否 | 失败时的最大重试次数,默认值为 6,使用指数退避 + 抖动策略 |
参数配置示例
model = init_chat_model(
"claude-sonnet-4-6",
temperature=0.7,
timeout=30,
max_tokens=1000,
max_retries=6,
)
4. 三种调用方式
LangChain 提供三种主要的模型调用方式,适用于不同的使用场景。
4.1 invoke - 同步调用
核心 API:
model.invoke()
invoke 是最基本的同步调用方式,发送请求并等待完整响应返回。
response = model.invoke("为什么鹦鹉会说话?")
print(response)
4.2 stream - 流式调用
核心 API:
model.stream()
stream 方式允许逐块接收模型响应,提供更好的用户体验,特别适合生成长文本时减少等待时间。
for chunk in model.stream("为什么鹦鹉有彩色的羽毛?"):
print(chunk.text, end="|", flush=True)
流式消息聚合
如果需要在流式接收的同时获取完整响应,可以使用聚合方式:
full = None
for chunk in model.stream("天空是什么颜色?"):
full = chunk if full is None else full + chunk
print(full.text)
4.3 batch - 批量调用
核心 API:
model.batch()/model.batch_as_completed()
batch 方式允许同时处理多个请求,提高处理效率。
responses = model.batch([
"为什么鹦鹉有彩色的羽毛?",
"飞机是怎么飞的?",
"什么是量子计算?",
])
for response in responses:
print(response)
5. 工具调用(Tool Calling)
工具调用允许模型与外部函数或工具进行交互,是构建 Agent 的核心能力。
基本用法
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
def get_weather(location: str) -> str:
"""获取指定位置的天气"""
return f"{location}:晴天,25°C"
model_with_tools = model.bind_tools([get_weather])
response = model_with_tools.invoke("巴黎的天气怎么样?")
for tool_call in response.tool_calls:
print(f"工具: {tool_call['name']}")
print(f"参数: {tool_call['args']}")
print(f"ID: {tool_call['id']}")
工具调用的工作流程
- 绑定工具:使用
bind_tools()方法将可用工具注册到模型 - 模型决策:模型根据用户输入决定是否需要调用工具
- 返回调用请求:模型返回需要执行的工具调用信息
- 执行工具:应用层执行实际的工具调用
- 返回结果:将工具执行结果返回给模型进行最终响应
6. 结构化输出(Structured Output)
结构化输出允许将模型的响应格式化为预定义的数据结构,确保输出的一致性和可预测性。
使用 Pydantic 模型定义输出结构
from pydantic import BaseModel
from langchain.chat_models import init_chat_model
class Answer(BaseModel):
summary: str
confidence: float
model = init_chat_model("gpt-5-nano")
structured_model = model.with_structured_output(Answer)
result = structured_model.invoke("总结AI的最新趋势")
print(result.summary, result.confidence)
结构化输出的优势
- 类型安全:确保输出符合预定义的数据结构
- 易于处理:直接使用对象属性访问数据,无需手动解析
- 验证机制:自动验证输出是否符合指定的 schema
7. 连接弹性与重试机制
LangChain 内置了强大的重试机制,确保在面对临时故障时具有良好的容错能力。
默认重试配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
max_retries |
6 | 最大重试次数 |
| 重试策略 | 指数退避 + 抖动 | 避免重试风暴 |
重试行为
自动重试的情况:
- 网络错误
- 429 速率限制(Rate Limit)
- 5xx 服务器错误
不重试的情况:
- 401 未授权(Unauthorized)
- 404 未找到(Not Found)
生产环境建议
对于长时间运行的 Agent 应用,建议将 max_retries 增加到 10-15 次,以提高系统的稳定性:
model = init_chat_model(
"gpt-5.4",
max_retries=12,
timeout=60,
)
8. 多模态支持
现代语言模型支持处理多种类型的数据,不仅限于文本。
支持的模态类型
| 类型 | 说明 |
|---|---|
| 图片 | 分析图像内容、OCR、图像描述等 |
| 音频 | 语音识别、音频分析等 |
| 视频 | 视频内容理解和分析 |
多模态调用示例
from langchain_core.messages import HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-4o")
message = HumanMessage(
content=[das
{"type": "text", "text": "描述这张图片"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.jpg"},
},
],
)
response = model.invoke([message])
9. 最佳实践
9.1 使用 init_chat_model 而非直接实例化
# ✅ 推荐:使用统一的初始化接口
model = init_chat_model("gpt-5.4")
# ❌ 不推荐:直接实例化具体类
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-5.4")
优势:
- 统一的接口,便于切换模型提供商
- 更好的配置管理和默认值处理
- 内置重试和错误处理机制
9.2 生产环境配置
model = init_chat_model(
"gpt-5.4",
temperature=0.7,
max_tokens=2000,
timeout=60,
max_retries=10,
)
9.3 使用 LangSmith 追踪
LangSmith 提供强大的可观测性能力,帮助调试和优化模型调用:
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "ls_..."
model = init_chat_model("gpt-5.4")
# 所有调用将自动被 LangSmith 追踪
response = model.invoke("你好")
9.4 环境变量管理
建议使用环境变量管理敏感信息:
# .env 文件
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-...
LANGCHAIN_API_KEY=ls-...
from dotenv import load_dotenv
load_dotenv()
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5.4")
总结
本章详细介绍了 LangChain 中模型的使用方式,包括:
- 模型初始化:使用
init_chat_model统一接口 - 参数配置:灵活调整模型行为
- 调用方式:invoke、stream、batch 三种方式
- 高级功能:工具调用和结构化输出
- 生产实践:重试机制、多模态支持、可观测性
在下一章中,我们将学习如何使用 Prompts(提示模板) 来更好地组织和优化与模型的交互。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)