上下文工程是指构建动态系统的实践,这些系统以正确的格式提供正确的信息和工具,使AI应用能够完成任务。上下文可以从两个关键维度来理解:
  1. 根据可变性:
    • 静态上下文:在执行过程中不会改变的不可变数据(例如,用户元数据、数据库连接、工具)。
    • 动态上下文:随着应用运行而演变的可变数据(例如,对话历史、中间结果、工具调用观察)。
  2. 根据生命周期:
    • 运行时上下文:作用域为单次运行或调用的数据。
    • 跨会话上下文:在多个对话或会话中持久存在的数据。
运行时上下文指的是本地上下文:你的代码运行所需的数据和依赖项。它不是指:
  • LLM 上下文,即传递给 LLM 提示词中的数据。
  • “上下文窗口”,即可以传递给 LLM 的最大 token 数量。
运行时上下文是一种依赖注入形式,可用于优化 LLM 上下文。它允许你在运行时向你的工具和节点提供依赖项(如数据库连接、用户 ID 或 API 客户端),而不是将它们硬编码。例如,你可以在运行时上下文中使用用户元数据来获取用户偏好,并将其馈送到上下文窗口中。
LangGraph 提供了三种管理上下文的方式,它结合了可变性和生命周期维度:

静态运行时上下文

静态运行时上下文代表不可变数据,如用户元数据、工具和数据库连接,这些数据在运行开始时通过 invoke/stream 的 context 参数传递给应用程序。这些数据在执行过程中不会改变。
详见智能体文档。
Runtime 对象可用于访问静态上下文以及其他实用程序,如活动存储和流写入器。 详见 Runtime 文档。

动态运行时上下文

动态运行时上下文代表可变数据,这些数据可以在单次运行中演变,并通过 LangGraph 状态对象进行管理。这包括对话历史、中间结果以及从工具或 LLM 输出中派生的值。在 LangGraph 中,状态对象在运行期间充当短期记忆。
示例展示了如何将状态融入智能体的提示词中。状态也可以被智能体的工具访问,这些工具可以根据需要读取或更新状态。详见工具调用指南。
开启记忆功能 关于如何启用记忆功能,请参阅记忆指南。这是一个强大的功能,允许你在多次调用之间持久化智能体的状态。否则,状态的作用域仅限于单次运行。

动态跨会话上下文

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

了解更多