模型与消息

LangChain 通过 langchain-core 统一消息格式与模型接口,1.0 强调 provider:model 字符串与标准化 content blocks


模型标识符

from langchain.agents import create_agent

agent = create_agent("openai:gpt-4.1-mini", tools=[])
agent = create_agent("anthropic:claude-sonnet-4-6", tools=[])
agent = create_agent("google_genai:gemini-2.0-flash", tools=[])

格式:provider:model_id,由集成包解析并读取对应环境变量中的 API Key。


显式实例化模型

需要自定义 temperaturebase_url、代理等时:

from langchain_openai import ChatOpenAI
from langchain.agents import create_agent

model = ChatOpenAI(model="gpt-4.1-mini", temperature=0)
agent = create_agent(model, tools=[])

Anthropic、Google 等同理(ChatAnthropicChatGoogleGenerativeAI)。


消息类型

Agent 状态中的 messages 通常为:

类型含义
HumanMessage用户输入
AIMessage模型回复(可含 tool_calls
ToolMessage工具执行结果
SystemMessage系统指令
from langchain_core.messages import HumanMessage, AIMessage

result = agent.invoke({
    "messages": [HumanMessage(content="Hello")]
})
last = result["messages"][-1]
if isinstance(last, AIMessage):
    print(last.content)
    print(last.tool_calls)  # 若有工具调用

System prompt

静态系统提示:

agent = create_agent(
    "openai:gpt-4.1-mini",
    tools=[],
    system_prompt="You are a concise technical assistant.",
)

动态系统提示(按会话变化)用 Middleware 实现(见 Middleware)。


Tool calling 与 bind_tools

底层模型需支持 tool calling。手动绑定工具(不经过 create_agent 时):

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4.1-mini")
llm_with_tools = llm.bind_tools([my_tool])
msg = llm_with_tools.invoke("What is 2 times 3?")
print(msg.tool_calls)

create_agent 已替你完成绑定与循环。


结构化输出

方式 1:Agent 级 response_format

from pydantic import BaseModel

class Plan(BaseModel):
    steps: list[str]

agent = create_agent("openai:gpt-4.1-mini", tools=[], response_format=Plan)

方式 2:模型级 with_structured_output

structured_llm = ChatOpenAI(model="gpt-4.1-mini").with_structured_output(Plan)
plan = structured_llm.invoke("Plan a weekend trip to Hangzhou.")

前者适合 Agent 最终输出;后者适合工作流中的单步结构化节点。


Content blocks(1.0)

多模态与富内容(文本、图片、工具结果块)逐步统一为 content blocks,便于跨 Provider 一致处理。集成包负责将 blocks 映射到各厂商 API 格式。


动态选模型

Middleware 的 wrap_model_callmodify_model_request 可按状态切换模型(例如简单问题用小模型、复杂推理用大模型),实现成本与质量平衡。


下一步