以编程方式使用文档

上下文工程 是构建动态系统的实践,这些系统以正确的格式提供正确的信息和工具,使 AI 应用程序能够完成任务。上下文可以沿两个关键维度进行表征:

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

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

上下文类型描述可变性生命周期
**配置**运行开始时传入的数据静态单次运行
**动态运行时上下文(状态)**单次运行中可变化的mutable数据动态单次运行
**动态跨对话上下文(存储)**跨对话共享的持久数据动态跨对话

配置

配置用于不可变的数据,如用户元数据或 API 密钥。当您的值在运行期间不会变化时使用此功能。

使用名为 **"configurable"** 的键来指定配置,这是为此目的保留的。

await graph.invoke(
  { messages: [{ role: "user", content: "hi!" }] },
  { configurable: { user_id: "user_123" } } // [!code highlight]
);

动态运行时上下文

动态运行时上下文 表示在单次运行中可变化的mutable数据,通过 LangGraph 状态对象进行管理。这包括对话历史、中间结果以及从工具或 LLM 输出中获取的值。在 LangGraph 中,状态对象充当运行期间的 短期记忆

In an agent

示例展示了如何将状态整合到智能体的 **提示词**.

状态也可以由智能体的 **工具**访问,这些工具可以根据需要读取或更新状态。请参阅 工具调用指南 了解更多详情。

    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",
    });
    

In a workflow

    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();
    

动态跨对话上下文

动态跨对话上下文 表示跨多个对话或会话持久存在、可变化的数据,通过 LangGraph 存储进行管理。这包括用户画像、偏好设置和历史交互记录。LangGraph 存储充当 长期记忆 跨多次运行。这可用于读取或更新持久化事实(例如,用户档案、偏好设置、先前交互)。

了解更多