LangChain LangGraph
Module 1 Module 2 Module 3
Module 2 · 工具、状态与多 Agent
1 2.1 MCP
2 2.1 Travel Agent
3 2.2 Runtime Context
4 2.2 State
5 2.3 Multi Agent
6 2.4 Wedding Planners
7 Bonus: RAG
8 Bonus: SQL
SUM Module Summary
HomeLangChainModule 2 · 工具、状态与多 Agent2.2 Runtime Context
📓 Notebook 📖 Explained
LANGCHAIN MODULE 2 · LESSON 2.2a

Runtime Context:运行时注入信息
context_schema · ToolRuntime · 偏好读取

本节讲清楚 context_schema 的作用:它不是长期记忆,而是每次调用时传入的运行时上下文,尤其适合用户偏好、租户信息和权限信息。

1 Context 是什么,不是什么

context 是一次 Agent 调用时额外传入的结构化信息。它适合放“这次运行需要知道,但不一定要写入长期状态”的数据,比如用户偏好、当前组织、权限范围。

概念生命周期典型用途
Runtime context一次 invoke/ainvoke 调用期间用户偏好、租户 id、请求来源、权限
Agent state可通过 checkpointer 跨调用保存对话记忆、已收集字段、工作流进度
System promptAgent 行为说明角色、规则、回答风格
本节重点

context 只是在运行时可用。要让模型使用它,通常需要 prompt 指示,或者通过 tool/middleware 明确读取。

2 定义 context_schema

Notebook 用 dataclass 定义一个颜色偏好上下文。传给 create_agentcontext_schema 告诉 Agent:运行时 context 长什么样。

Python
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,
)
schema 的作用

context_schema 负责类型约束和运行时访问结构,不等于把这些字段自动写进模型可见的消息里。

3 只传 context 还不够

如果希望模型直接回答“我最喜欢的颜色是什么”,需要让模型知道它应该使用 runtime context。Notebook 用 system_prompt 明确告诉模型读取用户偏好。

Python
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。

4 通过 ToolRuntime 读取 context

工具函数可以声明一个 runtime: ToolRuntime 参数。运行时,LangChain 会把当前调用的 context 放到 runtime.context 上。

Python
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 字段更稳定。

5 把 context 工具交给 Agent

创建 Agent 时同时传入 tools 和 context_schema。调用时传 context=ColourContext(...),工具就能读到当前调用的值。

Python
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)
1. User asks

用户询问偏好。

2. Model chooses tool

模型调用读取偏好的 tool。

3. Tool reads context

runtime.context 返回本次传入的值。

4. Model answers

模型基于工具结果回答。

6 什么时候用 Runtime Context

和 State 的分界

如果信息要被 Agent 在多轮对话中更新和保存,用 state;如果信息由外部系统在每次调用时传进来,用 context。