尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 ADK 构建 Eventarc 通用事件发布 Agent:CloudEvents 异步发布实战指南

使用 ADK 构建 Eventarc 通用事件发布 Agent:CloudEvents 异步发布实战指南 使用 ADK 构建 Eventarc 通用事件发布 AgentCloudEvents 异步发布实战指南【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python本文基于 ADKAgent Development Kit仓库中的 Eventarc 通用 Agent 样例generic_agent系统讲解如何让 LLM Agent 通过google.adk.integrations.eventarc模块内置的publish_message工具以 CloudEvents 标准格式将结构化事件异步发布到 Google Cloud Eventarc Message Bus。读完本文你将掌握 Eventarc 环境搭建、四种认证模式ADC / 服务账号 / 交互式 OAuth / Agent Identity的配置方法并从源码层面理解事件参数解析、数据序列化与连接池缓存机制为构建事件驱动型 AI 工作流打下基础。样例概述Agent 与 Eventarc 的第一次握手Eventarc 是 Google Cloud 的事件驱动架构EDA服务而 Eventarc 的 Message BusAdvanced 模式则承担了事件总线的角色生产者异步发布事件下游订阅者如 Cloud Run 服务、其他 Agent消费事件。ADK 将其封装为第一方工具first-party tool通过google.adk.integrations.eventarc模块对外分发。该通用 Agent 样例展示的核心链路非常简洁Agentadk_sample_eventarc_agent一个由LlmAgent构建的 LLM Agent工具EventarcToolset工具集内部托管publish_message工具行为Agent 按用户指令生成 CloudEvents 结构化事件通过工具**异步fire-and-forget**发布到指定的 Message Bus并借助连接池connection pooling与缓存caching跨调用复用底层 gRPC 客户端。与仓库中另一份 domain_specific_agent 样例不同本样例不锁定任何业务字段把 CloudEvent 规范完整暴露给 Agent由 Agent 自行决定bus、type、source、data等全部属性是最灵活、也最贴近通用语义的接入方式。典型输入示例样例 README 给出了两条可以直接喂给 Agent 的指令分别对应纯文本负载与结构化 JSON 负载两种场景Publish an event of type com.example.hello to bus projects/my-project/locations/global/messageBuses/my-bus with data Hello World and source //my/agentSend a JSON payload to Eventarc bus projects/my-project/locations/global/messageBuses/my-bus representing a user sign-up event可以看到Agent 需要从自然语言中抽取 CloudEvents 核心属性bus、type、source、data这正是publish_message工具的签名设计所决定的——它把 CloudEvent 规范完整映射成了工具参数。环境准备三步搭好 Eventarc 发布环境1. 启用 Eventarc API在 Google Cloud Project 中启用发布所需的两个 APIgcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com其中eventarcpublishing.googleapis.com是事件发布Publishing专用 APIpublish_message底层依赖的PublisherAsyncClient来自google-cloud-eventarc-publishing包正是与它通信。2. 创建目标 Message Busgcloud eventarc message-buses create my-bus \ --locationus-central1 \ --logging-configDEBUG创建完成后bus 的完整资源名格式为projects/{PROJECT_ID}/locations/{LOCATION}/messageBuses/{BUS_NAME}。务必把 agent.py 中实际使用的 bus 名称替换为你的真实资源名——样例通过GOOGLE_CLOUD_PROJECT环境变量注入project_id但 bus 全名由用户在指令中给出或按环境拼装。3. 安装 GCP 扩展依赖并配置 LLM发布事件依赖 Google Cloud 客户端库需要安装 ADK 的 GCP 扩展pip install google-adk[gcp]同时Agent 本身需要 LLM 服务。在.env文件中配置 Google AI Studio 或 Vertex AI 相关环境变量例如GOOGLE_GENAI_USE_ENTERPRISEFALSEGOOGLE_API_KEY{your api key}四种认证模式从本地开发到云端部署样例代码通过顶层变量CREDENTIALS_TYPE统一切换认证方式agent.py默认值为None。三种取值对应三个分支加上云端部署场景共四种模式。模式一应用默认凭据ADC—— 本地快速开发适用于 Agent 构建者即唯一使用者、需要快速跑通的开发阶段在运行 Agent 的机器上创建应用默认凭据Application Default CredentialsADC保持CREDENTIALS_TYPE None运行 Agent。对应代码分支会调用google.auth.default()获取环境凭据agent.py。ADC 会按GOOGLE_APPLICATION_CREDENTIALS环境变量、gcloud 登录态等顺序自动探测可用凭据。模式二服务账号密钥Service Account适用于以服务账号身份长期稳定运行如 CI、后台任务的场景创建服务账号密钥文件将CREDENTIALS_TYPE设置为auth_credential.AuthCredentialTypes.SERVICE_ACCOUNT下载密钥文件替换代码中service_account_key.json的路径agent.py运行 Agent。该分支通过google.auth.load_credentials_from_file(service_account_key.json)加载凭据并注入EventarcCredentialsConfig。模式三交互式 OAuthInteractive OAuth适用于以最终用户身份而非服务账号调用且希望通过浏览器完成授权的场景在 Google Cloud Console 中创建 OAuth 2.0 客户端凭据客户端类型选择Web配置 OAuth 同意屏幕添加 scopehttps://www.googleapis.com/auth/cloud-platform在Authorized redirect URIs中添加http://localhost/dev-ui/与 ADK Web 开发界面配合在.env中配置OAUTH_CLIENT_ID与OAUTH_CLIENT_SECRET将CREDENTIALS_TYPE设置为auth_credential.AuthCredentialTypes.OAUTH2后运行 Agent。该分支通过EventarcCredentialsConfig(client_id..., client_secret...)初始化ADK 的认证体系会在工具调用前触发 OAuth 流程agent.py。模式四Agent Identity —— 部署到 Agent Runtime / Vertex AI Reasoning Engine当把 Agent 部署到 Agent Runtime 时可以利用其基于 SPIFFE 的唯一身份Agent Identity完成认证无需任何显式密钥配置部署在 Agent 目录下创建.agent_engine_config.json指定identity_type: AGENT_IDENTITY使用默认凭据保持CREDENTIALS_TYPE None部署 Agent使用 ADK CLI 执行部署uv run adk deploy agent_engine \ --projectYOUR_PROJECT_ID \ --regionYOUR_REGION \ --display_nameeventarc-agent-test \ contributing/samples/integrations/eventarc/generic_agent授予 IAM 权限在项目级别为 Agent Identity 主体授予 Eventarc Message Bus User 角色roles/eventarc.messageBusUser。该模式是生产环境推荐的零密钥方案身份由运行平台自动签发与轮换。源码级解析publish_message 与 EventarcToolsetAgent 装配代码generic_agent 的 agent.py 完整展示了装配过程tool_config EventarcToolConfig(project_idos.getenv(GOOGLE_CLOUD_PROJECT)) toolset EventarcToolset( credentials_configcredentials_config, tool_configtool_config ) root_agent llm_agent.LlmAgent( nameEVENTARC_AGENT_NAME, descriptionAgent to publish structured CloudEvents to Google Cloud Eventarc., instructiontextwrap.dedent(\ You are a cloud engineer agent with access to Google Cloud Eventarc tools. You can publish CloudEvents structured messages to Eventarc message buses. ), tools[toolset], )变量名root_agent是约定ADK 调试 CLI 会把它识别为根 Agent。tools[toolset]将整个 Eventarc 工具集挂载到 Agent 上。EventarcToolset工具集的构造与生命周期EventarcToolset 继承自BaseToolset构造参数包括tool_configEventarcToolConfig发布行为配置credentials_configEventarcCredentialsConfigGoogle Cloud 凭据配置tool_name_prefix可选给工具名加前缀。构造时它会把publish_message函数包装成GoogleTool放入内部工具列表close()方法会调用eventarc_client.cleanup_clients()统一释放缓存的发布客户端确保应用退出时不泄漏 gRPC 连接源码。EventarcToolConfig两个关键配置项EventarcToolConfig 是一个 Pydantic 模型字段如下字段类型默认值说明project_idstr \| NoneNone可选。用于遥测与 API 调用的项目 ID样例从GOOGLE_CLOUD_PROJECT环境变量注入也可让 Agent 从上下文/用户输入推断publish_timeoutfloat15.0单次发布请求的超时秒数超时后工具返回 ERRORpublish_message完整的 CloudEvents 参数面publish_message 是工具集的唯一工具其签名把 CloudEvent 1.0 规范的属性几乎完整暴露给 Agent参数类型默认值说明busstr必填Message Bus 的完整 GCP 资源名格式必须严格匹配projects/*/locations/*/messageBuses/*typestr必填CloudEventstype属性描述事件类型如com.example.object.createdsourcestr必填CloudEventssource属性标识事件发生的上下文URI-referencedataAnyNone事件负载可为字符串、整数、浮点、布尔、字典或列表省略则不发送负载。二进制数据必须以 Base64 字符串传入并配合is_base64_encodedTrueis_base64_encodedboolFalse仅当data是表示二进制数据如图片、文件的 Base64 字符串时为True工具会解码为原始字节后发布include_tracing_extensionboolFalse为True时自动提取当前 ADK Agent 的分布式追踪上下文如 W3Ctraceparent注入 CloudEvent 扩展属性datacontenttypestr \| NoneNone数据的 MIME 类型如application/json、application/xml。省略时工具按数据类型自动推断字典/列表 →application/json字符串 →text/plain字节 →application/octet-streamspecversionstr1.0CloudEvents 规范版本subjectstr \| NoneNone事件主题常用于特定事件的路由idstr \| NoneNone事件唯一 ID省略时工具自动生成 UUIDv4timestr \| NoneNone事件时间戳RFC 3339 格式。省略时取当前 UTC 时间显式传空字符串则完全省略该属性custom_attributesdict[str, str] \| NoneNone自定义属性字典键必须是小写字母数字该工具是典型的fire-and-forget发布器不等待下游订阅者处理结果只保证事件成功进入总线非常适合事件驱动架构中 Agent 作为事件生产者的场景。调用返回与错误处理工具总是返回结构化的字典便于 Agent 判断结果成功{status: SUCCESS, message_id: id}message_id即事件id失败{status: ERROR, error_details: 原因}。值得注意的健壮性细节均可在 publish_message 源码中印证依赖缺失检测若google-cloud-eventarc-publishing未安装直接返回google-cloud-eventarc-publishing is not installed而非抛出难以排查的 ImportError参数校验type、source必须为非空字符串custom_attributes的键必须isalnum()且全小写time必须可解析为 RFC 3339内容类型推断dict/list 自动 JSON 序列化并注入datacontenttype属性失败自愈发布抛异常时会先从缓存中移除对应的 PublisherClient避免复用坏连接再返回错误详情。连接池与缓存跨调用复用发布客户端README 特别强调connection pooling and caching across calls。底层实现在 _client.py缓存键由(project_id, user_agent, os.getpid(), 凭据标识)组成其中凭据标识_get_credential_id能区分 ComputeEngine、服务账号按邮箱、用户凭据按 refresh token 哈希、Downscoped、External Account 等类型缓存 TTL 为 30 分钟_CACHE_TTL 1800最大缓存 10 个客户端_CACHE_MAX_SIZE 10使用OrderedDict 线程锁实现 LRU 式淘汰每个客户端携带adk-eventarc-tool google-adk/version形式的 User-Agent淘汰或移除客户端时会显式关闭其 gRPC transport channel。这套机制保证 Agent 在多轮对话、多次发布之间复用长连接避免反复建连带来的延迟与资源开销。仓库配套的单测test_client.py、test_message_tool.py、test_config.py、test_eventarc_toolset.py覆盖了缓存命中/淘汰、参数校验、序列化等关键行为可作为理解实现的参考。下一步构建完整的事件驱动 AI 工作流发布事件到 Message Bus 只是事件驱动之旅的前半程。要让这些事件真正驱动其他 Agent 或微服务还需要配置Eventarc Pipelines 与 EnrollmentsEventarc Pipelines定义从 Message Bus 出发的事件路由与转换逻辑将事件送达 Cloud Run、Cloud Functions 等目标Enrollments将 Pipeline 与目标服务建立关联实现事件 → 路由 → 消费的闭环。官方样例还提供了对应的 CodelabBuild Event-Driven AI Agents with Eventarc, Cloud Run and ADK演示如何用 Eventarc 把多个 AI Agent 连接起来同时仓库内的 domain_specific_agent 样例展示了create_publish_tool工厂方法——通过CloudEventAttributesBinding把bus、type、source绑定为静态值、运行时 Lambda 或选择性暴露给 Agent 的字段AgentProvided并配合严格校验的 Pydantic 负载模型防止 Agent幻觉出错误的路由目标。两相结合即可从自由发布平滑演进到受控发布的生产级事件出口。小结本文从 generic_agent 样例出发完整覆盖了 Eventarc 通用事件发布 Agent 的搭建、认证与原理从启用 API、创建 Message Bus、安装google-adk[gcp]到 ADC / 服务账号 / 交互式 OAuth / Agent Identity 四种认证模式再到publish_message的完整 CloudEvents 参数面与底层连接池缓存机制。这套能力让 LLM Agent 成为事件驱动架构中一个合格的事件生产者为后续接入 Pipelines、构建多 Agent 事件网络铺平了道路。【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表