> ## Documentation Index
> Fetch the complete documentation index at: https://cndoc-langchain.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 上下文概述

**上下文工程**是构建动态系统的实践，旨在以正确的格式提供正确的信息和工具，使AI应用程序能够完成任务。上下文可以从两个关键维度进行描述：

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

<Tip>
  运行时上下文指的是本地上下文：你的代码运行所需的数据和依赖项。它**不**指：

  * LLM上下文，即传递给LLM提示词的数据。
  * “上下文窗口”，即可以传递给LLM的最大令牌数。

  运行时上下文是你在代理中串联数据的方式。你可以将值（如数据库连接、用户会话或配置）附加到上下文，并在工具和中间件中访问它们，而不是将内容存储在全局状态中。这使得内容保持无状态、可测试和可重用。例如，你可以使用运行时上下文中的用户元数据来获取用户偏好，并将其输入到上下文窗口中。
</Tip>

LangGraph提供了三种管理上下文的方式，结合了可变性和生命周期维度：

| 上下文类型                                                   | 描述             | 可变性 | 生命周期 |
| ------------------------------------------------------- | -------------- | --- | ---- |
| [**配置**](#config)                                       | 在运行开始时传递的数据    | 静态  | 单次运行 |
| [**动态运行时上下文（状态）**](#dynamic-runtime-context)            | 在单次运行期间演变的可变数据 | 动态  | 单次运行 |
| [**动态跨对话上下文（存储）**](#dynamic-cross-conversation-context) | 跨对话共享的持久数据     | 动态  | 跨对话  |

## 配置

配置用于不可变数据，如用户元数据或API密钥。当你拥有在运行过程中不会改变的值时使用此方式。

使用名为 **"configurable"** 的键来指定配置，该键为此目的保留。

```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
await graph.invoke(
  { messages: [{ role: "user", content: "hi!" }] },
  { configurable: { user_id: "user_123" } } // [!code highlight]
);
```

## 动态运行时上下文

**动态运行时上下文**代表在单次运行期间可以演变的可变数据，通过LangGraph状态对象进行管理。这包括对话历史、中间结果以及从工具或LLM输出派生的值。在LangGraph中，状态对象在运行期间充当[短期记忆](/oss/javascript/concepts/memory)。

<Tabs>
  <Tab title="在代理中">
    示例展示了如何将状态整合到代理的**提示词**中。

    代理的**工具**也可以访问状态，它们可以根据需要读取或更新状态。详情请参阅[工具调用指南](/oss/javascript/langchain/tools#access-context)。

    ```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    import { createAgent, createMiddleware } from "langchain";
    import type { AgentState } from "langchain";
    import * as z from "zod";

    const CustomState = z.object({ // [!code highlight]
      userName: z.string(),
    });

    const personalizedPrompt = createMiddleware({ // [!code highlight]
      name: "PersonalizedPrompt",
      stateSchema: CustomState,
      wrapModelCall: (request, handler) => {
        const userName = request.state.userName || "User";
        const systemPrompt = `You are a helpful assistant. User's name is ${userName}`;
        return handler({ ...request, systemPrompt });
      },
    });

    const agent = createAgent({  // [!code highlight]
      model: "claude-sonnet-4-6",
      tools: [/* your tools here */],
      middleware: [personalizedPrompt] as const, // [!code highlight]
    });

    await agent.invoke({
      messages: [{ role: "user", content: "hi!" }],
      userName: "John Smith",
    });
    ```
  </Tab>

  <Tab title="在工作流中">
    ```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    import { z } from "zod/v4";
    import { StateGraph, StateSchema, MessagesValue, START } from "@langchain/langgraph";

    const CustomState = new StateSchema({  // [!code highlight]
      messages: MessagesValue,
      extraField: z.number(),
    });

    const builder = new StateGraph(CustomState)
      .addNode("node", async (state) => {  // [!code highlight]
        const messages = state.messages;
        // ...
        return {  // [!code highlight]
          extraField: state.extraField + 1,
        };
      })
      .addEdge(START, "node");

    const graph = builder.compile();
    ```
  </Tab>
</Tabs>

<Tip>
  **启用记忆**
  有关如何启用记忆的更多详细信息，请参阅[记忆指南](/oss/javascript/langgraph/add-memory)。这是一个强大的功能，允许你跨多次调用持久化代理的状态。否则，状态仅作用于单次运行。
</Tip>

## 动态跨对话上下文

**动态跨对话上下文**代表跨多个对话或会话的持久、可变数据，通过LangGraph存储进行管理。这包括用户配置文件、偏好设置和历史交互。LangGraph存储在多次运行中充当[长期记忆](/oss/javascript/concepts/memory#long-term-memory)。这可用于读取或更新持久性事实（例如，用户配置文件、偏好设置、先前的交互）。

## 了解更多

* [记忆概念概述](/oss/javascript/concepts/memory)
* [LangChain中的短期记忆](/oss/javascript/langchain/short-term-memory)
* [LangGraph中的记忆](/oss/javascript/langgraph/add-memory)

***

<div className="source-links">
  <Callout icon="terminal-2">
    [将这些文档](/use-these-docs)通过MCP连接到Claude、VSCode等，以获取实时答案。
  </Callout>

  <Callout icon="edit">
    [在GitHub上编辑此页面](https://github.com/langchain-ai/docs/edit/main/src/oss/concepts/context.mdx)或[提交问题](https://github.com/langchain-ai/docs/issues/new/choose)。
  </Callout>
</div>
