跳转至

模型

LangGraph 通过 LangChain 库内置支持LLM(语言模型)。这让你可以轻松将各种 LLM 集成到你的智能体和工作流中。

初始化模型

使用 init_chat_model 来初始化模型:

pip install -U "langchain[openai]"
import os
from langchain.chat_models import init_chat_model

os.environ["OPENAI_API_KEY"] = "sk-..."

llm = init_chat_model("openai:gpt-4.1")

👉 Read the OpenAI integration docs

pip install -U "langchain[anthropic]"
import os
from langchain.chat_models import init_chat_model

os.environ["ANTHROPIC_API_KEY"] = "sk-..."

llm = init_chat_model("anthropic:claude-3-5-sonnet-latest")

👉 Read the Anthropic integration docs

pip install -U "langchain[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"

llm = init_chat_model(
    "azure_openai:gpt-4.1",
    azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],
)

👉 Read the Azure integration docs

pip install -U "langchain[google-genai]"
import os
from langchain.chat_models import init_chat_model

os.environ["GOOGLE_API_KEY"] = "..."

llm = init_chat_model("google_genai:gemini-2.0-flash")

👉 Read the Google GenAI integration docs

pip install -U "langchain[aws]"
from langchain.chat_models import init_chat_model

# Follow the steps here to configure your credentials:
# https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started.html

llm = init_chat_model(
    "anthropic.claude-3-5-sonnet-20240620-v1:0",
    model_provider="bedrock_converse",
)

👉 Read the AWS Bedrock integration docs

直接实例化模型

如果某个模型提供商无法通过 init_chat_model 使用,你可以直接实例化该提供商的模型类。该模型必须实现 BaseChatModel 接口并支持工具调用:

API Reference: ChatAnthropic

# `init_chat_model` 已经支持 Anthropic,
# 但你也可以直接实例化它。
from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(
  model="claude-3-7-sonnet-latest",
  temperature=0,
  max_tokens=2048
)

工具调用支持

如果你正在构建一个需要模型调用外部工具的智能体或工作流,请确保底层 语言模型支持工具调用。兼容的模型可在 LangChain 集成目录中找到。

在智能体中使用

使用 create_react_agent 时,你可以通过模型名称字符串来指定模型,这相当于使用 init_chat_model 初始化模型的简写。这样就无需手动导入或实例化模型即可使用。

from langgraph.prebuilt import create_react_agent

create_react_agent(
   model="anthropic:claude-3-7-sonnet-latest",
   # 其他参数
)
from langchain_anthropic import ChatAnthropic
from langgraph.prebuilt import create_react_agent

model = ChatAnthropic(
    model="claude-3-7-sonnet-latest",
    temperature=0,
    max_tokens=2048
)
# 或者
# model = init_chat_model("anthropic:claude-3-7-sonnet-latest")

agent = create_react_agent(
  model=model,
  # 其他参数
)

动态模型选择

create_react_agent 传入一个可调用函数,在运行时动态选择模型。这在需要基于用户输入、配置或其他运行时条件选择模型的场景中很有用。

选择器函数必须返回一个聊天模型。如果你在使用工具,必须在选择器函数内将工具绑定到模型上。

API Reference: init_chat_model | BaseChatModel | tool | create_react_agent | AgentState

from dataclasses import dataclass
from typing import Literal
from langchain.chat_models import init_chat_model
from langchain_core.language_models import BaseChatModel
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent
from langgraph.prebuilt.chat_agent_executor import AgentState
from langgraph.runtime import Runtime

@tool
def weather() -> str:
    """Returns the current weather conditions."""
    return "It's nice and sunny."


# 定义运行时上下文
@dataclass
class CustomContext:
    provider: Literal["anthropic", "openai"]

# 初始化模型
openai_model = init_chat_model("openai:gpt-4o")
anthropic_model = init_chat_model("anthropic:claude-sonnet-4-20250514")


# 模型选择器函数
def select_model(state: AgentState, runtime: Runtime[CustomContext]) -> BaseChatModel:
    if runtime.context.provider == "anthropic":
        model = anthropic_model
    elif runtime.context.provider == "openai":
        model = openai_model
    else:
        raise ValueError(f"Unsupported provider: {runtime.context.provider}")

    # 使用动态模型选择时,必须显式绑定工具
    return model.bind_tools([weather])


# 使用动态模型选择创建智能体
agent = create_react_agent(select_model, tools=[weather])

# 通过上下文选择模型进行调用
output = agent.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "Which model is handling this?",
            }
        ]
    },
    context=CustomContext(provider="openai"),
)

print(output["messages"][-1].text())

LangGraph v0.6 新增

高级模型配置

禁用流式输出

若要禁用单个 LLM token 的流式输出,在初始化模型时设置 disable_streaming=True

from langchain.chat_models import init_chat_model

model = init_chat_model(
    "anthropic:claude-3-7-sonnet-latest",
    disable_streaming=True
)
from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(
    model="claude-3-7-sonnet-latest",
    disable_streaming=True
)

参见API 参考了解 disable_streaming 的更多信息

添加模型回退

你可以使用 model.with_fallbacks([...]) 添加回退到不同的模型或不同的 LLM 提供商:

from langchain.chat_models import init_chat_model

model_with_fallbacks = (
    init_chat_model("anthropic:claude-3-5-haiku-latest")
    .with_fallbacks([
        init_chat_model("openai:gpt-4.1-mini"),
    ])
)
from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI

model_with_fallbacks = (
    ChatAnthropic(model="claude-3-5-haiku-latest")
    .with_fallbacks([
        ChatOpenAI(model="gpt-4.1-mini"),
    ])
)

参阅此指南了解更多关于模型回退的信息。

使用内置限流器

LangChain 包含一个内置的内存限流器。该限流器是线程安全的,并且可以在同一进程中的多个线程之间共享。

API Reference: InMemoryRateLimiter | ChatAnthropic

from langchain_core.rate_limiters import InMemoryRateLimiter
from langchain_anthropic import ChatAnthropic

rate_limiter = InMemoryRateLimiter(
    requests_per_second=0.1,  # <-- 超慢!我们每 10 秒只能发起一次请求!!
    check_every_n_seconds=0.1,  # 每 100 ms 唤醒一次以检查是否允许发起请求,
    max_bucket_size=10,  # 控制最大突发请求大小。
)

model = ChatAnthropic(
   model_name="claude-3-opus-20240229",
   rate_limiter=rate_limiter
)

参见 LangChain 文档,了解如何处理限流的更多信息。

自带模型

如果你需要的 LLM 尚未被 LangChain 官方支持,可以考虑以下选项:

  1. 实现自定义 LangChain 聊天模型:创建一个符合 LangChain 聊天模型接口 的模型。此方式可与 LangGraph 的智能体和工作流完全兼容,但需要对 LangChain 框架有所了解。

  2. 自定义流式输出的直接调用:通过使用 StreamWriter 添加自定义流式逻辑来直接调用你的模型。请参阅自定义流式文档获取指导。该方法适用于不需要预构建智能体集成的自定义工作流。

更多资源