本节讲清楚 context_schema 的作用:它不是长期记忆,而是每次调用时传入的运行时上下文,尤其适合用户偏好、租户信息和权限信息。
context 是一次 Agent 调用时额外传入的结构化信息。它适合放“这次运行需要知道,但不一定要写入长期状态”的数据,比如用户偏好、当前组织、权限范围。
| 概念 | 生命周期 | 典型用途 |
|---|---|---|
| Runtime context | 一次 invoke/ainvoke 调用期间 | 用户偏好、租户 id、请求来源、权限 |
| Agent state | 可通过 checkpointer 跨调用保存 | 对话记忆、已收集字段、工作流进度 |
| System prompt | Agent 行为说明 | 角色、规则、回答风格 |
context 只是在运行时可用。要让模型使用它,通常需要 prompt 指示,或者通过 tool/middleware 明确读取。
Notebook 用 dataclass 定义一个颜色偏好上下文。传给 create_agent 的 context_schema 告诉 Agent:运行时 context 长什么样。
from dataclasses import dataclass
@dataclass
class ColourContext:
favourite_colour: str = "blue"
least_favourite_colour: str = "yellow"
agent = create_agent(
model=deepseek_model(),
context_schema=ColourContext,
)context_schema 负责类型约束和运行时访问结构,不等于把这些字段自动写进模型可见的消息里。
如果希望模型直接回答“我最喜欢的颜色是什么”,需要让模型知道它应该使用 runtime context。Notebook 用 system_prompt 明确告诉模型读取用户偏好。
response = agent.invoke(
{"messages": [HumanMessage(content="What is my favourite colour?")]},
context=ColourContext(),
system_prompt="Use the runtime context to answer questions about the user's preferences.",
)
print(response["messages"][-1].content)声明 context_schema 不代表模型天然知道字段值。更可靠的方式是让工具通过 ToolRuntime 读取 context。
工具函数可以声明一个 runtime: ToolRuntime 参数。运行时,LangChain 会把当前调用的 context 放到 runtime.context 上。
from langchain.tools import tool, ToolRuntime
@tool
def get_favourite_colour(runtime: ToolRuntime) -> str:
"""Get the favourite colour of the user"""
return runtime.context.favourite_colour
@tool
def get_least_favourite_colour(runtime: ToolRuntime) -> str:
"""Get the least favourite colour of the user"""
return runtime.context.least_favourite_colour工具描述告诉模型“有一个工具可以读取 favourite colour”。模型调用工具后拿到明确返回值,比让模型猜 context 字段更稳定。
创建 Agent 时同时传入 tools 和 context_schema。调用时传 context=ColourContext(...),工具就能读到当前调用的值。
agent = create_agent(
model=deepseek_model(),
tools=[get_favourite_colour, get_least_favourite_colour],
context_schema=ColourContext,
)
response = agent.invoke(
{"messages": [HumanMessage(content="What is my favourite colour?")]},
context=ColourContext(favourite_colour="green"),
)
print(response["messages"][-1].content)用户询问偏好。
模型调用读取偏好的 tool。
runtime.context 返回本次传入的值。
模型基于工具结果回答。
如果信息要被 Agent 在多轮对话中更新和保存,用 state;如果信息由外部系统在每次调用时传进来,用 context。