Skip to content
LangChain 文档版本 跟随上游 源快照 03ae3669 更新于 2026-10-08

上下文概览

上下文工程是构建动态系统的实践,这些系统以恰当的格式提供恰当的信息和工具,使 AI 应用能够完成某项任务。上下文可以从两个关键维度来刻画:

  1. 按可变性:
    • 静态上下文:在执行期间不会改变的数据(例如用户元数据、数据库连接、工具)
    • 动态上下文:随着应用运行而演变的数据(例如对话历史、中间结果、工具调用观察结果)
  2. 按生命周期:
    • 运行时上下文:作用域限于单次运行或调用的数据
    • 跨对话上下文:跨多个对话或会话持续存在的数据

TIP

运行时上下文指的是本地上下文:你的代码运行所需的数据和依赖。它不指:

  • LLM 上下文,即传入 LLM 提示词的数据。
  • "上下文窗口",即可传递给 LLM 的最大 token 数。

运行时上下文是一种依赖注入形式,可用于优化 LLM 上下文。它让你在运行时向工具和节点提供依赖(例如数据库连接、用户 ID 或 API 客户端),而不是把它们硬编码。例如,你可以使用运行时上下文中的用户元数据来获取用户偏好,并将其送入上下文窗口。

LangGraph 提供了三种管理上下文的方式,它们结合了可变性和生命周期这两个维度:

上下文类型说明可变性生命周期访问方式
静态运行时上下文在启动时传入的用户元数据、工具、数据库连接静态单次运行invoke/stream 的 context 参数
动态运行时上下文(state)在单次运行期间演变的可变数据动态单次运行LangGraph 状态对象
动态跨对话上下文(store)跨对话共享的持久数据动态跨对话LangGraph store

静态运行时上下文

静态运行时上下文表示不可变数据,例如用户元数据、工具和数据库连接,它们在运行开始时通过 invoke/stream 的 context 参数传递给应用。这些数据在执行期间不会改变。

python
@dataclass
class ContextSchema:
    user_name: str

graph.invoke(
    {"messages": [{"role": "user", "content": "hi!"}]},
    context={"user_name": "John Smith"}  
)
python
from dataclasses import dataclass
from langchain.agents import create_agent
from langchain.agents.middleware import dynamic_prompt, ModelRequest

@dataclass
class ContextSchema:
    user_name: str

@dynamic_prompt
def personalized_prompt(request: ModelRequest) -> str:  
    user_name = request.runtime.context.user_name
    return f"You are a helpful assistant. Address the user as {user_name}."

agent = create_agent(
    model="claude-sonnet-4-6",
    tools=[get_weather],
    middleware=[personalized_prompt],
    context_schema=ContextSchema
)

agent.invoke(
    {"messages": [{"role": "user", "content": "what is the weather in sf"}]},
    context=ContextSchema(user_name="John Smith")  
)

详情请参阅智能体。

TIP

Runtime 对象可用于访问静态上下文,以及活动 store、stream writer 等其他实用工具。 详情请参阅 Runtime 文档。

动态运行时上下文

动态运行时上下文表示可在单次运行期间演变、并通过 LangGraph 状态对象管理的可变数据。它包括对话历史、中间结果,以及由工具或 LLM 输出派生出的值。在 LangGraph 中,状态对象在一次运行期间充当短期记忆。

示例展示了如何把状态融入智能体的提示词。

智能体的工具也可以访问状态,并可按需读取或更新状态。详情请参阅工具调用指南。

python
from langchain.agents import create_agent
from langchain.agents.middleware import dynamic_prompt, ModelRequest
from langchain.agents import AgentState

class CustomState(AgentState):  
    user_name: str

@dynamic_prompt
def personalized_prompt(request: ModelRequest) -> str:  
    user_name = request.state.get("user_name", "User")
    return f"You are a helpful assistant. User's name is {user_name}"

agent = create_agent(
    model="claude-sonnet-4-6",
    tools=[...],
    state_schema=CustomState,  
    middleware=[personalized_prompt],  
)

agent.invoke({
    "messages": "hi!",
    "user_name": "John Smith"
})

TIP

开启记忆 关于如何启用记忆的更多细节,请参阅记忆指南。这是一项强大的功能,可让你跨多次调用持久化智能体的状态。否则,状态的作用域仅限于单次运行。

动态跨对话上下文

动态跨对话上下文表示跨多个对话或会话、并通过 LangGraph store 管理的持久化可变数据。它包括用户档案、偏好以及历史交互。LangGraph store 在多次运行之间充当长期记忆。它可以用来读取或更新持久化的事实(例如用户档案、偏好、先前的交互)。

了解更多


BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。