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']}")

工具调用的工作流程

  1. 绑定工具:使用 bind_tools() 方法将可用工具注册到模型
  2. 模型决策:模型根据用户输入决定是否需要调用工具
  3. 返回调用请求:模型返回需要执行的工具调用信息
  4. 执行工具:应用层执行实际的工具调用
  5. 返回结果:将工具执行结果返回给模型进行最终响应

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(提示模板) 来更好地组织和优化与模型的交互。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐