
Google ADK 深度探索(一):“一等公民”上下文 Context 解析
了解了 Google ADK 宏大的上下文架构设计(回顾上一篇文章),我们不禁要问:这些精妙的思想,最终是如何落地到一行行代码里的? 本文将聚焦 ADK 中作为“一等公民”的上下文(Context)机制,详解其如何通过会话状态、数据传递、服务访问等核心功能,解决智能体开发中的状态维护、跨步骤协作和资源调度难题。无论是管理用户偏好的 session.state,还是按需加载的工件存储,抑或是身份跟踪的 InvocationContext,ADK 的上下文设计无不体现着一种理念:智能体的能力边界,本质上取决于其上下文管理的精度与效率。 上下文(Context) 在智能体开发领域,一个日益凸显的挑战是上下文管理的复杂性。传统方法(如无限制地堆叠聊天历史或工具输出)会导致成本飙升、信号衰减甚至物理性性能瓶颈。而 ADK 的突破性在于——它将上下文从“被动拼接的文本”升级为系统化管理的架构核心,通过分层设计、动态编译和最小权限原则,实现了生产级智能体的高效运作。 在 ADK 中,上下文(Context)指的是智能体及其工具在特定操作期间所能获取的关键信息。它也是有效处理当前任务或者会话所需的必要背景知识和资源。 智能体有效运行需要的不只是最新的用户消息,上下文至关重要,通过上下文可以: 维护状态 存储对话过程中多个步骤的详细信息(例如,用户偏好、上一步的结果),这些都通过**会话状态(session.state)**来管理。 会话(Session)在 ADK 中是一个重要的概念,用于跟踪独立的对话。用户第一次与智能体交互时会创建一个 Session 对象,这个对象作为一个容器保存了与对话相关所有状态: 历史记录(session.events):与该对话相关的所有交互,包括用户输入、智能体响应、工具调用请求/结果等。记录的事件序列提供了交互的完整、按时间顺序的历史记录,对于调试、审计和逐步了解代理行为非常有价值。这些信息是不可变的,是由框架自身维护的。 会话状态(session.state):从数据结构上看是一个包含键值对的集合(字典或者 Map),用于存储智能体有效执行需要用到的信息,比如记录用户偏好、跟踪多轮流程中的步骤、收集信息等。session.state 是可变的。 会话可以保存在内存(InMemorySessionService)、数据库(DatabaseSessionService、SqliteSessionService、PerAgentDatabaseSessionService)中,具体要看使用是哪种 SessionService 的实现了。比如最常见的 InMemorySessionService,从下面这行代码就很容易看出其储存结构了。 #self.sessions: dict[str, dict[str, dict[str, Session]]] = {} session = self.





