模型¶
LangGraph 通过 LangChain 库内置支持LLM(语言模型)。这让你可以轻松将各种 LLM 集成到你的智能体和工作流中。
初始化模型¶
使用 init_chat_model
来初始化模型:
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
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
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
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
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 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
:
参见API 参考了解 disable_streaming
的更多信息
添加模型回退¶
你可以使用 model.with_fallbacks([...])
添加回退到不同的模型或不同的 LLM 提供商:
参阅此指南了解更多关于模型回退的信息。
使用内置限流器¶
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 官方支持,可以考虑以下选项:
-
实现自定义 LangChain 聊天模型:创建一个符合 LangChain 聊天模型接口 的模型。此方式可与 LangGraph 的智能体和工作流完全兼容,但需要对 LangChain 框架有所了解。
-
自定义流式输出的直接调用:通过使用
StreamWriter
添加自定义流式逻辑来直接调用你的模型。请参阅自定义流式文档获取指导。该方法适用于不需要预构建智能体集成的自定义工作流。