[控场AI]
· 8 分钟阅读· 4,368 字

用Google ADK打造自主代码监控Agent:让非技术人员也能管项目

用Google ADK打造自主代码监控Agent:让非技术人员也能管项目

用Google ADK构建三个协同AI Agent,实现代码库测试覆盖、提交日报与Kubernetes集群的全自动监控。

一位技术博主基于Google Agent Development Kit(ADK),为自己管理的多个由非技术人员维护的项目构建了一套自主代码库监控系统。文章首先厘清了Agent与Assistant的本质区别——前者通过Function Calling机制让LLM间接调用GitHub、Kubernetes等外部系统,突破了纯文本输出的局限。随后作者以不到25行代码搭建了第一个天气Agent演示工具调用流程,继而构建了三个具备生产价值的Agent:自动提升测试覆盖率并创建PR、每日提交摘要邮件、Kubernetes集群只读监控。其中集群监控Agent实测直接发现了7个长期被忽略的崩溃Pod。三个Agent最终部署为Google Cloud Run Jobs定时任务,全程运行在作者自己的Google Cloud基础设施内。作者同时坦承当前实现缺乏沙箱隔离,并强调只读权限最小化是Agent开发的重要安全实践。

AI Agent正在从概念走向落地。一位技术博主用Google的Agent Development Kit(ADK)构建了一套自主代码库监控系统,目标很直接:他手下有多个由独立开发者甚至非技术人员维护的项目,而他本人对代码库里发生的一切几乎零可见性。这个Agent的任务,就是充当一名不知疲倦的工程经理。

为什么要给代码库配一个AI经理

博主坦言,他目前有两个项目——一个餐厅系统和100xdevs.com——都不由他亲自主导,其中一个甚至是由非技术人员负责。现在的编程Agent已经足够强大,非技术背景的人也能借助它们完成开发任务。但问题随之而来:管理者对代码质量、安全漏洞、测试覆盖率的变化完全失去掌控。

他提出了一个颇具前瞻性的判断:未来可能会有大量小型企业(比如餐厅)不再雇佣专职开发者,而是让真正懂业务日常的人来主导项目。只要有合适的抽象层帮助部署网站,Agent足以构建功能。这意味着大量"内部系统"可能由小企业自建。而在这种模式下,一个能持续汇报代码库状态的自主Agent,就成了管理者的"眼睛"。

The agent development kit by Google.

Agent与Assistant的本质区别

在动手之前,博主先厘清了一个常被混淆的概念。你在ChatGPT网页上交互的其实是"助手"(Assistant)——输入文本、图片,得到文本或图片输出。而Agent能做的远不止于此:它可以调用GitHub创建Pull Request、读取代码库,可以连接Kubernetes集群检查服务健康状况,未来还能对接Sentry或PostHog读取日志和指标。

关键在于,底层依然是一个只能输出文本的大语言模型。区别在于,LLM输出的文本有时是一段"指令",比如"从github.com/hkirat/app读取仓库"。后端识别出这是一个工具调用意图,于是真正去访问GitHub、读取仓库,再把结果喂回给LLM。这样的多轮对话会反复进行——LLM可能接着要求运行kubectl get pods查看集群中的Pod,后端执行后再返回结果。最终LLM决定发送一封邮件,而发邮件本身也是一次工具调用。

所谓Agent,就是让LLM通过这种间接方式获得了它本不该拥有的能力。getCurrentTimegetCurrentWeather是最原始的工具调用示例,因为LLM本身没有实时数据访问能力,它只有训练时的历史数据。

这种"工具调用"机制在技术上通常被称为 Function Calling 或 Tool Use,是当前主流 LLM(如 GPT-4、Gemini、Claude)的标准能力之一。其工作原理是:开发者在调用 LLM API 时,预先声明一组可用工具的名称、描述与参数 Schema;LLM 在生成回复时,若判断需要外部信息或执行某项操作,会输出一段结构化的 JSON 而非普通文本,指示调用哪个工具、传入哪些参数。宿主程序捕获到这个 JSON 后,真正执行对应的函数(如访问 GitHub API),再将返回结果作为新消息插入对话历史,LLM 据此继续推理。这个"LLM 推理 → 工具执行 → 结果回填 → 再推理"的循环可以迭代多轮,直到 LLM 认为任务完成并输出最终回答。ReAct(Reasoning + Acting)是描述这一范式的经典论文框架,而 OpenAI、Google、Anthropic 各自的 Agent SDK 本质上都是对这一循环的工程化封装。

用ADK快速搭建第一个Agent

准备工作很简单:注册Google Cloud账号,充值约一千卢比即可获得价值300美元的额度,还支持UPI支付,入门门槛比其他云厂商低。博主用Google的IDE(anti-gravity)创建项目,整个过程以"vibe coding"为主——即主要靠提示词驱动AI写代码。

第一个提示词是:搭建一个带天气工具的简单ADK项目,并接入Google Cloud账号进行LLM调用。这里有个Google生态的便利之处:如果你的gcloud CLI已认证且账户有额度,就无需API密钥,Agent可以直接通过你的账号访问LLM。

最终成果不到25行代码,就复刻了开头演示的天气Agent:定义getWeather工具(当前硬编码返回72华氏度),初始化LLM Agent并导出即可。运行npm run dev会自动生成一个对话式UI。当你问"德里的天气如何",界面会完整展示整个过程——工具调用被触发、后端返回结果、LLM给出最终回复,整条消息轨迹清晰可查。

please?

从玩具到实战:构建代码审查Agent

真正的挑战在于构建有实际生产价值的Agent。博主为代码审查Agent规划了三项任务:提升测试覆盖率、安全漏洞审查、代码规范检查(暂时跳过第三项)。

漏洞审查是只读操作,相对简单——读取仓库后跑一系列安全检查、依赖检查即可。但提升测试覆盖率要复杂得多,因为它不仅要读,还要创建Pull Request。这意味着运行Agent的机器必须把代码库从GitHub拉取到临时目录,再给LLM暴露一整套编码Agent的标准工具:读文件、写文件、提交到GitHub等。本质上,这是在从零构建一个类似Claude Code、Gemini CLI或Cursor的编码Agent。

This is where things get a little tricky because now,

博主在提示词中明确给出了实现路径——克隆仓库、暴露工具、让LLM自主工作,并提供了针对私有仓库的Personal Access Token。他特别强调了架构选择的理由:如果不说明思路,Agent可能会用GitHub MCP的方式,而他认为在沙箱中复制文件才是编码Agent应有的做法。

他也坦诚指出了一个严重的安全隐患:当前实现没有任何沙箱隔离,仓库被克隆到与Agent运行相同的机器上。如果把这个Agent泛化到不可信的仓库,"事情会变得非常糟糕"。这是一个值得所有Agent开发者警惕的风险点。

文中提到的 GitHub MCP(Model Context Protocol)是 Anthropic 于 2024 年底提出的开放协议,旨在标准化 LLM 与外部数据源、工具之间的连接方式。开发者可以通过 MCP Server 将 GitHub、数据库、文件系统等封装成统一接口,LLM 客户端无需为每个服务单独集成即可调用。与直接在沙箱中克隆仓库、操作文件的方式相比,MCP 更侧重"通过 API 代理操作"而非"本地文件系统直接读写"。博主选择后者的理由在于:编码 Agent 需要在真实文件系统中运行测试、检查覆盖率报告,这类操作依赖本地执行环境,仅靠 API 调用难以完成。代价是必须将代码克隆到运行 Agent 的机器上,由此带来沙箱隔离的安全挑战——这也是他特别警示的风险所在。

三个Agent协同:覆盖率、日报与集群监控

实测中,覆盖率Agent成功生成了大量测试并创建了PR。博主指出两个可优化点:工具调用次数偏多,每天重新获取代码库上下文会推高AI账单,需要引入缓存机制;此外测试被写进了源码目录而非独立的测试目录,且生成的多为单元测试而非集成测试。

第二个Agent负责每日提交摘要——统计仓库当天的所有commit(示例中显示当天有16次提交),汇总谁做了什么改动,并附带漏洞检查,每天上午定时邮件发送给他。

第三个Agent最有意思:它以只读权限访问Kubernetes集群的特定命名空间,监控Pod崩溃、日志异常等情况。博主特意强调只授予只读权限,通过在集群中创建专门的只读角色来实现,这样即便Agent出问题也无法写入集群。运行结果直接发现了7个崩溃的Pod——都是一个此前被他忽略的payment sweeper(支付清算)服务。他坦言"我完全不知道这回事",而团队本身没有集群访问权限。这个真实案例生动说明了此类监控Agent的实际价值。

you know,

发送邮件方面,由于Agent已能访问其Google Cloud,博主只需创建OAuth凭证即可;也可以选择Resend、Mailgun等服务并提供SMTP凭证。

部署到Google Cloud:三个每日定时任务

最后是部署环节。三个Agent被部署为Google Cloud Run Jobs,通过Google Cloud Scheduler每天定时运行。整套流程完全跑在他自己的Google Cloud基础设施内:Agent持有GitHub凭证、可读取实时Kubernetes集群、可调用Gmail API发送邮件。

ADK的一大优势是灵活性——你可以本地运行、部署在自有基础设施,或干脆托管到Google Cloud后忘掉它。博主也给出了进阶方向:接入监控服务,让Agent在网站宕机等极端情况下仍能持续监控并告警;针对大型代码库还可采用更多上下文优化技巧。

这个项目完整展示了Agent的开发闭环:理解Agent本质、用Google ADK构建、部署到Google生态、授予外部服务访问权限,以及设置每日定时任务并自动汇报。对于想入门Agent开发的人来说,这是一条清晰且可复现的路径——尽管在生产环境中,沙箱隔离与权限最小化仍是不可忽视的前提。

Google Cloud Run Jobs 是 Cloud Run 平台针对批处理场景推出的产品形态,与持续监听 HTTP 请求的 Cloud Run Service 不同,Jobs 专为"执行完即退出"的一次性任务设计,按实际 CPU/内存使用时间计费,非常适合定时运行的 Agent 任务。配合 Google Cloud Scheduler(基于 Cron 表达式的托管定时服务),开发者无需维护任何常驻服务器,即可实现每日、每小时乃至更细粒度的任务调度。这种"事件触发 + 无服务器执行"的组合,是目前部署轻量级 Agent 最具成本效益的方式之一:Agent 平时完全不消耗资源,只在触发时短暂启动、完成任务、发送报告后销毁容器实例。

分享:

相关推荐