Runner 是执行引擎的核心:它协调智能体、工具与回调,共同响应用户输入,同时管理信息流、状态变化,以及与模型、工具、存储的交互。VeADK 的执行引擎完全兼容 Google ADK 的 Runner,其完整机制可参见 Google ADK 运行时文档。
多租户隔离
面向企业级多租户场景,Runner 通过 app_name、user_id、session_id 三个维度实现数据隔离:
最简运行
Runner.run() 直接运行一个智能体,处理输入并返回最终文本响应,适合本地测试:
run() 封装度较高。当 Runner 配置了短期会话时,它会按需自动创建会话。若需要更细粒度地控制执行过程,使用 run_async()。使用 Harness 增强执行
VeADK 1.0.1 提供可挂载到Runner 的 Harness 插件,用于在每轮调用前准备上下文、压缩较大的工具结果,并检查最终回答是否有工具结果支持。基础插件随 VeADK 提供;需要 Headroom 压缩实现时安装 harness 依赖组:
从 AgentKit 智能体中心发现远程智能体
部署 Harness 服务时,可以启用 AgentKit A2A Registry,使运行时按每轮请求从指定智能体中心发现匹配的远程智能体:REGISTRY_TOP_K 控制每轮最多召回的候选数量,默认值为 3。运行时需要访问 AgentKit A2A Registry;远程 Agent Card 声明鉴权方式时,还需要相应的 API Key 或 Identity OpenAPI 权限。OAuth2 远程调用的凭据处理见出站认证。
流式处理事件
Runner.run_async() 返回一个异步生成器,逐个产出智能体执行过程中的事件。相比 run() 只拿到最终文本,遍历事件可以获得思考过程、工具调用与结果、以及流式增量,便于自行开发上层逻辑。
run_async() 在调用前需已存在对应会话。若直接使用它,请确保 session_id 对应的会话已创建。解析事件
每个事件描述了执行过程中的一步。其常用字段如下:content.parts 中的每个 part 可能是不同类型,据此区分处理:
事件还提供了便捷方法:
is_final_response() 判断是否为最终回复,get_function_calls() 与 get_function_responses() 分别取出本事件中的工具调用与结果。