📍 无忆研习社 › 开源解码 › 从一行命令到一套企业级 Agent 流水线:手把手拆解 google/agents-cli,把 AI 编程助手"喂"成 Google Cloud 工程师

从一行命令到一套企业级 Agent 流水线:手把手拆解 google/agents-cli,把 AI 编程助手"喂"成 Google Cloud 工程师

摘要:agents-cli 不是新的AI编程助手,而是给Gemini CLI、Claude Code等助手“喂”的7个工程化技能包——它把Google Cloud上构建、评估、部署Agent的全套隐性知识打包成Skill文件,让编程助手从“刚入职的实习生”秒变“资深工程师”,一条自然语言指令完成从demo到生产的全流程,省一半以上的token费和几天的啃文档时间。
字号 100%
行距 2.05
当前可见 60% 的内容
本文由 莫潇羽@无忆研习社(www.wuyi.wiki) 撰写,转载请注明出处。

快速摘要

这篇文章用一句话能讲完的核心结论是:agents-cli 不是又一个新的 AI 编程助手,而是一组"给编程助手喂的工程化知识包" —— 它把 Google Cloud 上构建、评估、部署 Agent 的全套套路打包成 7 个 Skill,塞进 Gemini CLI / Claude Code / Codex / Cursor / Antigravity 等任意一个编程助手的"记忆"里,让原本需要工程师啃几十页文档才能完成的"从 demo 到生产"的链路,缩成一句自然语言指令。

它解决的真问题是:Agent 圈"模型越来越聪明,工程化却越来越碎片化"。开发者和编程助手都在反复消耗 token 去推断 ADK 的 API、评估集格式、Cloud Run 的发布参数、Cloud Trace 的接线姿势。agents-cli 把这些隐性知识显性化成 SKILL.md,让编程助手按部就班地走流程,而不是凭直觉瞎猜。

这篇文章会把它拆透:从 agents-cli 与 Google ADK 的关系、7 个 Skill 各管哪段、uvx google-agents-cli setup 一行命令背后到底发生了什么,到本地 Playground 调试、评估流水线、上 Cloud Run / Agent Runtime / GKE 三种部署路径、Cloud Trace + BigQuery 的可观测性,再到 Gemini Enterprise 注册、Human Mode 兜底,最后是我自己跑下来的一些感受和坑。 想看完整拆解,往下翻。


一、为什么大多数 Agent demo 永远飞不出实验室

1.1 demo 容易,落地难,这事其实有点"反直觉"

过去两年,我自己折腾过的 Agent demo,少说也有十几个:天气问答、文档问答、客服路由、报销审核、PR 自动 review。每一个在本地都能跑得有模有样,演示视频也能剪得很好看。

但等真要把它放到一个对外的环境里,让别人随便提问、让别人调用接口,问题就开始一个接一个冒出来:

  • 模型偶尔抽风返回 JSON 格式不对,后端炸了。
  • 同样一个问题,今天答得很好,明天答得跟换了个人似的,没法解释。
  • 加了第二个工具,整个工具调用链断了,定位半天也不知道为什么。
  • 想配置一个监控仪表盘看看每天调用了多少次、平均延迟多少、哪些工具出错,发现根本没有现成的"接线图"。

这一系列问题的根源都是同一个:Agent 从原型走到生产,中间隔的不是模型能力,而是工程化基础设施。

模型这一两年进步飞快,可周边的脚手架、评估、部署、可观测性,每家厂商都自己造一套轮子,几乎每两周就有新工具冒出来。开发者光是"决定该用哪一套"就要耗掉小半天,更别提把它们串成一条稳定的流水线。

1.2 工具链碎片化把人逼疯

我之前给团队写过一份"上线 Agent 需要打通的 12 件事"的 checklist,大概长这样:

环节

涉及的常见工具 / 服务

项目脚手架

自写模板 / cookiecutter

Agent 框架

ADK / LangGraph / CrewAI

模型接入

Gemini / GPT / Claude / 本地模型

工具调用规范

OpenAPI / MCP / 自定义协议

评估方法

单元测试 / Evalset / LLM-as-Judge

本地调试

命令行 / Web UI

容器化

Dockerfile / buildpack

持续集成

GitHub Actions / Cloud Build

基础设施

Terraform / Pulumi

运行时

Agent Engine / Cloud Run / GKE / Kubernetes

可观测性

Cloud Trace / OpenTelemetry / 日志 / BigQuery

上架分发

企业目录 / API Gateway / 内部消息工具

每一格背后都对应一份官方文档,少则几千字,多则几万字。让一个工程师把这条路从头啃到尾,平均怎么也得一两周。

更要命的是,这一两周的"啃文档时间"其实并没有为业务增加任何价值 —— 它只是在补齐"上线的最低门槛"。

1.3 编程助手陷入"上下文饥渴"

近一年我们这种重度依赖 AI 编程助手的人,应该都体会到一个现象:让编程助手干工程化的事情,token 烧得特别快。

为什么?因为编程助手并不天然知道你公司在用 GKE 还是 Cloud Run,也不知道你这个 Agent 的评估集应该长什么样,更不知道你上一次部署用的是哪条命令。它每次都要重新读文档、重新猜参数、重新试错。

我自己有一次让 Claude Code 帮我把一个本地跑得好好的 Agent 部署到 Cloud Run,它先去搜了 Dockerfile 的写法,又翻 Cloud Run 的 CLI,再去推断要不要加 IAM 权限,最后还得我手动告诉它 ADK 应该用哪个端口。一通操作下来,token 翻了好几倍,最后还是我自己开着官方文档对着改才搞定。

这种"上下文饥渴"是工程化场景下 AI 编程助手最大的瓶颈。模型再聪明,没看过你这个生态的隐性约定,也只能瞎蒙。

1.4 这才是 agents-cli 真正想解决的问题

知道了上面这些痛点,再回头看 google/agents-cli 这个项目,它的定位一下子就清晰了:

  • 它不打算再造一个 Agent 框架(这事 ADK 已经在做)。
  • 它也不打算再造一个新的编程助手(Gemini CLI、Claude Code 已经够多了)。
  • 它干的是中间那一层:把"在 Google Cloud 上做 Agent 的所有隐性工程化知识"打包成可被编程助手识别的 Skill 文件,让你的编程助手一上手就具备工程化经验,不用再现场推断。

用一句莫潇羽@无忆研习社愿意反复念叨的话来说:agents-cli 让 AI 编程助手不再当"刚入职的实习生",而是当一个"在 Google Cloud 上做了几年 Agent 的资深工程师"。

1.5 顺便说一下"AI 编程助手 + 工具厂商"这种新模式

这件事还可以从更大的视角去看。

过去厂商发布一个新工具,标准动作是写文档、出 SDK、做 codelab。开发者怎么用是开发者的事。

但今天主流开发者群体已经有相当一部分在重度依赖 Gemini CLI、Claude Code、Codex 这种 AI 编程助手了。文档写得再好,也未必能被这些助手"看懂"和"用对"。

所以现在出现了一种新模式:厂商不只是给人写文档,还得给 AI 编程助手写 Skill。Skill 这种声明式、紧凑、面向 LLM 的知识包,正在成为厂商发布工具的"第二种交付物"。

agents-cli 就是这种新模式的一个非常典型的样本:与其等社区慢慢摸索"怎么在 Google Cloud 上做 Agent",不如把这套知识自己整理成 Skill,主动喂给所有支持 Skill 标准的编程助手。

这种思路其实非常聪明 —— 它绕开了"做一个新编程助手然后和 Cursor / Claude Code 正面竞争"的红海,转而做"让所有编程助手都变好"的事,朋友变多,敌人变少。


二、agents-cli 究竟是个什么东西

2.1 一句话定位:给编程助手用的工程化技能包 + 独立 CLI

很多人第一眼看到 agents-cli 的名字,下意识会把它当成"又一个 Gemini CLI / Claude Code 的竞争品"。

这是个误会。

agents-cli 自己的定位文档里说得非常直白:它不是编程助手,而是给编程助手用的工具。你的 Gemini CLI 还是那个 Gemini CLI,你的 Claude Code 还是那个 Claude Code,但它们在装上 agents-cli 之后,会突然多出一套"Google Cloud Agent 工程师"的本职技能。

agents-cli 同时具备两层身份:

  • 对编程助手而言,它是一组 Skill 文件。装上之后,编程助手"知道了"该怎么搭脚手架、怎么写评估集、怎么发布到 Agent Runtime。
  • 对人而言,它本身就是一个独立的命令行工具。你也可以完全抛开编程助手,自己在终端里手敲 agents-cli create my-agent、agents-cli deploy,照样能跑通整条流水线。

这种"双形态"的设计很贴心:它把"让 AI 干活"和"自己干活"的两种路径放在同一个工具下,不强迫你选边。

2.2 agents-cli 与 Google ADK 的关系,一张图讲明白

要真正读懂 agents-cli,绕不开的另一个名字是 Google ADK(Agent Development Kit)。

ADK 是 Google 开源的一个 Agent 框架,目前支持 Python、Java、Go、TypeScript 四种语言。它解决的是"Agent 本身怎么写"的问题:怎么定义工具、怎么组合多 Agent、怎么管理上下文、怎么做工具确认(HITL)。

而 agents-cli 解决的是"围绕 ADK Agent 的一切工程化动作":怎么生成项目、怎么写评估、怎么部署、怎么观察、怎么注册。

下面这张图,是我自己拿出来给团队同事讲清楚两者边界用的:

flowchart LR
    A[你的业务想法<br/>例:报销审核 Agent] --> B[ADK<br/>负责: Agent 本体<br/>工具/多智能体/上下文]
    B --> C[agents-cli<br/>负责: 工程化外壳<br/>脚手架/评估/部署/观测/发布]
    C --> D[Google Cloud<br/>Agent Runtime / Cloud Run / GKE]
    C -.skills.-> E[编程助手<br/>Gemini CLI / Claude Code / Codex / Cursor]
    E -. 用自然语言驱动 .-> C

一句话总结:ADK 写 Agent 本体,agents-cli 把 ADK Agent 推上生产。两者既独立又互补。

2.3 它在整个 Google Cloud Agent 体系里的位置

把视角再拉高一层,整个 Google Cloud 的 Agent 生态大致是这样的层次:

  • 底层模型层:Gemini 系列模型,可以走 AI Studio Key(本地开发)也可以走 Vertex AI(生产)。
  • Agent 框架层:ADK,定义 Agent 怎么写。
  • 工程化外壳层:agents-cli,负责脚手架、评估、部署、观测、发布。
  • 运行时层:Vertex AI Agent Engine(也叫 Agent Runtime)、Cloud Run、GKE 三选一。
  • 企业能力层:Gemini Enterprise Agent Platform,提供企业级的目录、IAM、合规、计费、可观测性。

agents-cli 处在这条链路的"工程化外壳"位置,向上承接业务想法,向下衔接运行时和企业能力。

我自己理解这套体系的一个关键转折点是:Google 没有把 agents-cli 做成"一个新框架",而是做成"一个把现有所有东西串起来的胶水层"。这其实是个挺克制、挺工程化的选择。

2.4 跟其他相似工具的对比

很多朋友会问我:agents-cli 跟我现在用的 LangChain CLI、Vertex AI Agent Starter Pack、AWS Bedrock AgentCore 比,到底差在哪?

我把目前能看到的几个常被拿来对比的工具放在一张表里:

工具

出身

跟编程助手集成

主推运行时

Skill 标准

google/agents-cli

Google Cloud

原生支持 Skill

Agent Engine / Cloud Run / GKE

原生支持

Agent Starter Pack

Vertex AI

不直接集成

Agent Engine

不支持

LangChain CLI

LangChain

命令行优先

不强绑

不支持

AWS Bedrock AgentCore

AWS

命令行优先

Bedrock Runtime

不支持

最关键的差异点其实只有一条:agents-cli 是目前少数几个把"Skill 标准"作为一等公民设计进来的工具。这一点决定了它在 AI 编程助手时代的位置 —— 不只是"给人用",更是"给 AI 用"。

至于"Agent Starter Pack"和 agents-cli 的关系,简单理解就是:Agent Starter Pack 是更早一代的模板集,专注脚手架;agents-cli 是它的"进化版",把脚手架、评估、部署、可观测性、企业发布全打通成一条流水线,而且原生面向编程助手。

2.5 它适合什么人、不适合什么人

为了避免你看完一头扎进去发现不合适,先把适配人群说清楚:

适合:

  • 用 ADK 做 Agent 的人,几乎没有理由不用。
  • 用 Gemini CLI / Claude Code / Codex 等编程助手做日常开发的人。
  • 想做面向企业内部用户的 Agent,并要用 Google Cloud 跑生产的人。
  • 重视工程化、希望评估 / 部署 / 观测都标准化的人。

不太适合:

  • 不打算碰 Google Cloud 的人 —— 大部分高级特性会用不上。
  • 已经深度绑定 LangGraph / CrewAI / AutoGen 生态的人 —— 短期没有直接收益。
  • 只想做"一锤子买卖"的 demo,根本不打算上生产的人 —— agents-cli 在这种场景下是杀鸡用牛刀。

三、Skill 机制:把工程化知识装进编程助手的脑子

3.1 什么是 Agent Skill?为什么这玩意是关键

要理解 agents-cli 的核心创新,得先理解 Agent Skill 这个东西。

Skill 这个标准最早是 Anthropic 提出来的开放格式,本质就是一个文件夹,里面放一份 SKILL.md(写清楚这个技能干什么、在什么情况下触发、要遵守什么规则),可能还有一些辅助脚本和示例。它的妙处在于:

  • 任何符合 Skill 标准的工具都能识别它,不绑死任何一家厂商。
  • 它是声明式的,不是代码,所以可以塞进任意 LLM 的上下文里被读取。
  • 它的触发是基于语义匹配的,编程助手会根据用户当前的任务自动找到合适的 Skill 来"启用"。

目前 Gemini CLI、Claude Code、Codex、Cursor、Antigravity,包括 GitHub Copilot 都支持 Skill 这套机制。这就是为什么 agents-cli 能做到"一份 Skill,到处通用"。

你可以把 Skill 理解成"给 AI 看的内部知识库 + 行为准则"。莫潇羽自己写技能的时候习惯把它类比成新员工入职手册 —— 不是教你怎么写代码,而是告诉你"在我们这家公司,遇到这种问题,标准做法是这样"。

3.1.1 Skill 文件长什么样

为了让你对 Skill 有个具体的感觉,下面是一个典型的 SKILL.md 文件的骨架:

---
name: google-agents-cli-deploy
description: 用于把 ADK Agent 部署到 Agent Runtime / Cloud Run / GKE
  的标准化部署 Skill。触发条件包括:"部署 Agent""上 Cloud Run"
  "发布到 Agent Engine"等明确的部署意图……
---

# Deploy Skill

## 一、流程概览
1. 检查项目结构是否符合发布要求
2. 选择部署目标并准备 IaC 配置
3. ……

## 二、Cloud Run 发布
[Cloud Run 特定的步骤、参数、IAM 权限说明]

## 三、Agent Runtime 发布
[Agent Runtime 特定的步骤]

## 四、常见错误与排查
……

可以看到 Skill 文件就是 Markdown,前面一段 YAML frontmatter 说明这个 Skill 的名字、触发条件,下面是结构化的指令。LLM 读到这个文件,就知道在什么场景下要按什么步骤来执行。

这种结构非常适合 LLM 消费 —— 它本身就是被设计来"被读"的,而不是"被执行"的代码。

3.2 七大 Skill 的具体职责,一个个拆给你看

agents-cli 装好之后会往编程助手里塞 7 个 Skill。这 7 个 Skill 不是花架子,每一个都对应 Agent 工程化中的一个真实痛点。我用一张表格先做个总览,然后再挨个聊:

Skill 名

一句话职责

解决的痛点

google-agents-cli-workflow

整套生命周期的"调度员"

AI 不知道下一步该做什么

google-agents-cli-scaffold

项目脚手架与升级

每次都要从头写目录结构

google-agents-cli-adk-code

ADK 的 API 速查

AI 总记错 ADK 的接口签名

google-agents-cli-eval

评估方法论与指标

评估集写得乱七八糟

google-agents-cli-deploy

三种部署目标的发布规范

各种部署目标参数记不住

google-agents-cli-publish

Gemini Enterprise 注册

部署完不知道怎么让别人用上

google-agents-cli-observability

Cloud Trace + 日志 + BigQuery

上了线没法看,没法分析

3.2.1 Workflow Skill:流水线的总指挥

它最关键的作用是"让 AI 学会按顺序做事"。在没有这个 Skill 的时候,你跟编程助手说"帮我做一个客服 Agent",它可能上来就给你写 1000 行 Python。

装上 Workflow Skill 之后,它会先停下来问你:你的目标是原型还是生产?要发布到哪个运行时?有没有特殊的安全约束?然后它会写一份 DESIGN_SPEC.md,把意图固化下来,再开始动手。

这一点对我个人来说是收益最大的,因为它把"设计先行"这件事变成了默认动作。

3.2.2 Scaffold Skill:脚手架专家

主要支持三种动作:create 创建新项目、enhance 给已有项目加上部署/CI-CD/RAG 能力、upgrade 升级到新版本。

值得一提的是,scaffold 提供了多种 Agent 模板,目前能看到的至少有 adk(基础 ADK Agent)、adk_a2a(多 Agent 协作)、agentic_rag(RAG 形态)。模板选对了,后续要改的东西就少一大半。

3.2.3 ADK Code Skill:Agent 写法字典

它是给编程助手准备的"ADK API 速查表",里面写明白了 Agent、Runner、Session、Memory、Tool 等核心抽象的用法、参数、回调时机、状态怎么传。

实测下来,装了这个 Skill 的编程助手在写 ADK 代码的时候,几乎不再会编造不存在的 API。这种"幻觉率"的下降在工程化场景下非常关键。

3.2.4 Eval Skill:质量守门员

Eval Skill 教编程助手写正确格式的评估集(evalset),讲清楚 LLM-as-Judge 该怎么打分、工具调用轨迹(tool trajectory)该怎么对比、常见失败原因怎么定位。

我自己以前写评估集,每次都要去翻 ADK 文档看 schema,现在直接让 AI 按 Skill 的规范写,省掉一大块脑力。

3.2.5 Deploy Skill:部署目标教练

它把三种部署目标的差异、要传的参数、要配置的 IAM 角色都讲得很清楚。这一段后面专门有一节细聊。

3.2.6 Publish Skill:上架到企业目录

负责把已部署的 Agent 注册到 Gemini Enterprise,让组织内的其他成员能在 https://gemini.google.com/ 这样的统一入口里发现你的 Agent。它支持 ADK 和 A2A 两种注册模式。

3.2.7 Observability Skill:线上诊断医生

这块讲清楚怎么开 Cloud Trace、怎么把请求响应日志落到 BigQuery 做 Agent Analytics,以及怎么接 AgentOps、Phoenix、MLflow 这类第三方观测工具。

3.2.8 Skill 之间的协作姿势

七个 Skill 不是各自孤立的,它们之间其实有一条清晰的"接力顺序"。你可以把它想象成一条工厂流水线:

flowchart LR
    A[Workflow Skill<br/>调度员] --> B[Scaffold Skill<br/>搭骨架]
    B --> C[ADK Code Skill<br/>填业务逻辑]
    C --> D[Eval Skill<br/>质量把关]
    D --> E[Deploy Skill<br/>上云]
    E --> F[Observability Skill<br/>线上看护]
    E --> G[Publish Skill<br/>上架目录]

Workflow Skill 永远是整条流水线的总指挥,编程助手会优先激活它,然后由它决定下一步该叫哪个 Skill 出场。这种"中心调度 + 专项执行"的设计,让整个流程既有条理,又能在任意阶段被打断、被回退。

这里有一个细节很有意思:Workflow Skill 不只是按顺序串,它还会处理回退场景。比如评估没过、部署失败、发布卡住,它都能识别异常并把编程助手引导到正确的恢复路径上。这一点在我自己用下来的体验里特别明显 —— 你不需要担心"AI 一条路走到黑",它会停下来反问、会主动重试、会主动汇报。

3.3 Skill 机制为什么能省一大笔 token 费

这一点是我自己跑了几轮真实任务后才意识到的。

没有 Skill 的时候,编程助手干一件工程化的事,token 消耗大体是这样的:

[搜索 ADK 官方文档] + [试错若干轮] + [反复确认参数] + [最终生成代码]

每一次"搜索"和"试错"都是高 token 操作。

装上 Skill 之后,路径变成:

[读对应 Skill 文件] + [按规范直接生成代码]

Skill 文件本身不大(几 KB 到几十 KB),但它把"应该怎么做"直接告诉了模型,省掉了大量的搜索、推断、试错环节。

按我之前一次粗略的对比,跑同样一个"部署 Agent 到 Cloud Run"的任务,带 Skill 比不带 Skill,token 消耗差了大概一半多。这个数字没有正式做过 benchmark,仅供你参考,但量级是真实存在的。


四、安装与初始化全流程,一步一图带你走完

4.1 环境前置准备

agents-cli 的环境要求其实不复杂,但有几个细节容易踩坑。这是莫潇羽@无忆研习社亲自走过一遍之后整理出来的清单:

  • Python 3.11 或更新版本。注意是 3.11 起步,3.10 不行。
  • uv:一个用 Rust 写的现代 Python 包管理器,比 pip 快很多。后面 uvx 这条命令就是 uv 提供的。
  • Node.js:装 Skill 的时候会用到,因为 Skill 的安装走的是 npx 的发行通道。
  • 平台支持:macOS、Linux、以及 Windows WSL 2。原生 Windows 暂时不行,Windows 用户务必先把 WSL 2 备好。
  • 可选项:要做云端部署的话,还需要 Google Cloud SDK 和 Terraform。本地开发阶段这俩可以先不装。

我个人习惯用一个干净的 Python 虚拟环境,避免污染全局:

# 准备一个干净的虚拟环境(可选但推荐)
python3 -m venv ~/.venvs/agents-cli
source ~/.venvs/agents-cli/bin/activate

4.2 一行命令搞定安装

agents-cli 最爽的地方就在这里 —— 整个安装链路只有一条命令需要你亲手敲,其他所有事都可以交给编程助手:

uvx google-agents-cli setup

这一条命令背后发生的事情其实不少:

flowchart TD
    A[uvx google-agents-cli setup] --> B[拉取 google-agents-cli 包]
    B --> C[安装 CLI 二进制]
    C --> D[检测本机已有的编程助手<br/>Gemini CLI / Claude Code / Codex / Cursor]
    D --> E[将 7 个 Skill 写入对应编程助手的 skill 目录]
    E --> F[(可选)启动身份验证流程]
    F --> G[安装完成,可以开始用了]

如果你只想先装 Skill,跳过身份验证,可以加 --skip-auth:

uvx google-agents-cli setup --skip-auth

或者如果你完全不想装 CLI,只想把 Skill 注入到编程助手里,也可以直接走 npx 通道:

npx skills add google/agents-cli

4.3 三种身份验证姿势

身份验证这事在不同场景下选不同方式:

姿势一:交互式浏览器登录。最适合首次配置时使用,会自动打开浏览器走 OAuth。

agents-cli login --interactive

姿势二:检查当前登录状态。怀疑没登好的时候用这个看一眼:

agents-cli login --status

姿势三:本地开发用 AI Studio 的 API Key。这是我个人在做原型阶段最推荐的方式 —— 你不需要任何 Google Cloud 项目,单靠一个 AI Studio Key 就能在本地把 Gemini + ADK 跑起来:

export GEMINI_API_KEY="你的-AI-Studio-Key"

需要注意一点:这种方式只够本地开发用,一旦你要部署到 Cloud Run / Agent Runtime / GKE,就必须切换到完整的 Google Cloud 身份验证。

4.4 验证 Skill 是否成功注入

最后一步,验证 Skill 是不是真的进去了。不同编程助手的验证方式不一样:

  • 在 Gemini CLI 里,输入 /skills 看是否能列出 google-agents-cli-workflow 等等。
  • 在 Claude Code 里,调出 skill 面板查看。
  • 在 Codex / Cursor / Antigravity 里,去对应的 settings 或者命令调色板里搜 skill。

只要能看到 7 个 google-agents-cli-* 开头的 Skill,就说明万事俱备,可以让编程助手开始为你打工了。

4.5 给整个团队铺开 agents-cli 的几点建议

如果你是负责给团队推 agents-cli 的人,下面几条经验来自莫潇羽自己在团队里推这套工具的真实做法:

  • 先在一个小项目试跑两周。让一两个核心同事先用一段时间,验证流程是否顺,再向团队铺开。
  • 把"如何运行 agents-cli"写进新人入职文档。这个动作很小,但能让团队所有人统一起步。
  • 把生成的脚手架代码做一次内部 review。看看它符不符合贵司的命名规范、代码风格、安全合规要求,有需要可以二次定制。
  • 把基础设施的 Terraform 配置进 Git。不要把 infra single-project 当作"一次性命令",把它生成的 IaC 文件作为代码一起进仓库,方便日后审计与复用。
  • 关键发布走 Human Mode。前文反复强调过这一点:让 AI 编程助手干 80% 的活,最后 20% 的关键发布,自己手敲。

这一节看着不算"硬核技术",但实际上是 agents-cli 在团队里能不能真正跑起来的决定性环节。工程化工具的价值,永远是"用起来"才能体现。


五、本地开发:从零搭出第一个 Agent

5.1 创建项目骨架:让编程助手开口干活

这一步开始就可以"动嘴"了。装好 Skill 之后,打开你喜欢的编程助手,给它这样一个自然语言指令:

用 agents-cli 给我搭一个能根据城市查天气、并把回答压缩成穴居人风格的短句的 Agent。先生成原型,不用部署。

你的编程助手会自动激活 workflow 和 scaffold 两个 Skill,然后做这些动作:

  • 反问你几个澄清问题:部署目标?安全约束?需不需要 RAG?
  • 写一份 DESIGN_SPEC.md,把目标固化下来。
  • 调用 agents-cli create caveman-agent --prototype --yes 生成项目脚手架。

当然你也可以不通过编程助手,直接自己敲:

agents-cli create caveman-agent --prototype --yes
cd caveman-agent

5.2 项目结构剖析

生成出来的项目大致长这样(具体结构会随版本演进,以你本机实际生成的为准):

caveman-agent/
├── DESIGN_SPEC.md          # 设计意图,前期讨论的固化
├── app/
│   ├── __init__.py
│   └── agent.py            # Agent 的核心代码
├── tests/
│   └── eval/
│       └── evalsets/
│           └── basic.evalset.json   # 默认的评估集
├── pyproject.toml          # 依赖与项目元数据
└── README.md

要记住一个核心文件 —— app/agent.py,这里定义了你的 Agent 本体。绝大多数业务逻辑后续都会写在这里。

新生成的项目里默认有个最小可跑的 Agent,能查天气、报时间。打开看一眼,你会看到类似下面这样的代码(这是 ADK 的典型写法):

from google.adk.agents.llm_agent import Agent
from google.genai import types

def get_weather(city: str) -> str:
    """查询某个城市的天气(这里是个 mock 工具)。"""
    return f"{city} 今天是个晴朗的好天气,气温适中。"

def get_current_time(city: str) -> dict:
    """返回某个城市的当前时间。"""
    return {"status": "success", "city": city, "time": "10:30 AM"}

root_agent = Agent(
    name="root_agent",
    model="gemini-flash-latest",
    instruction="你是一个能查询天气和时间的助手。",
    tools=[get_weather, get_current_time],
)

整套 ADK 的 Agent 定义就这么简洁:起个名、选个模型、写一句指令、挂上几个工具,搞定。

5.3 安装依赖与本地试跑

接下来安装依赖:

agents-cli install

这条命令背后其实就是 uv 在执行 pip install 那一套,把 ADK 以及你 Agent 用到的库都装好。

如果你只想做一次"冒烟测试",看 Agent 大致能不能跑通,用 agents-cli run 是最快的:

agents-cli run "上海今天天气怎么样?"

终端会直接打印出 Agent 的回答,连 Web 界面都不用开。

5.4 Web Playground:调试体验的天花板

但如果要长时间调试,光看终端输出就太痛苦了。agents-cli 内置了一个本地 Web Playground,开起来就是 ADK 自带的开发调试界面:

agents-cli playground

跑起来之后,终端会打印出一个本地 URL(通常类似 http://localhost:8080,具体端口以你启动时输出的为准)。在浏览器里打开它,从左侧菜单里挑你的 Agent,就可以直接对话。

Playground 提供的几个特性在我自己用下来最实用的是:

  • 热重载:你改 app/agent.py 里的代码,保存后 Playground 自动重启,对话不丢。
  • 会话级追踪:每条对话都能展开看到 Agent 内部的工具调用、token 用量、模型响应。
  • 多 Agent 切换:一个项目里允许放好几个 Agent,菜单里直接切。

这套调试体验对新手非常友好。我有时候带新人上手 Agent,几乎第一节课就是让他们打开 Playground 自己改一改 instruction,看看输出怎么变。

5.5 给 Agent 加工具的常用姿势

ADK 里的工具就是普通的 Python 函数 —— 函数签名 + docstring 就是它"暴露给模型"的接口。所以加工具其实非常简单。

举个例子,给上面的 Agent 加一个"字数统计"工具:

def count_words(text: str) -> str:
    """统计输入文本的单词数量。

    Args:
        text: 需要统计的文本。

    Returns:
        一段描述字数的话。
    """
    word_count = len(text.split())
    return f"这段文本共有 {word_count} 个词。"

root_agent = Agent(
    name="root_agent",
    model="gemini-flash-latest",
    instruction="你是一个能查询天气、报时间、统计字数的助手。",
    tools=[get_weather, get_current_time, count_words],
)

注意两点:

  • docstring 极其重要。它是模型决定"什么时候调用这个工具、怎么传参"的唯一依据。docstring 写糊,模型就会乱用。
  • 工具应该是确定性的、幂等的。涉及外部 API 时建议加重试与超时,不然 Agent 会被卡死。

到这一步,你已经有了一个能在本地跑、能加工具、能调试的 Agent。下一步就是把它的"质量"用评估固化下来。

5.6 三种常见的 Agent 模板:别只盯着默认的那个

agents-cli scaffold create 支持几种不同形态的模板,挑对了能省你后续大半的改造工作:

  • adk:最朴素的单 Agent 模板,适合"输入一个问题、Agent 调几个工具、输出一段回答"这种线性流程。
  • adk_a2a:多 Agent 协作模板,内置 Agent-to-Agent 协议,适合需要把任务拆给不同专家 Agent 处理的场景,比如一个研究员 Agent 加一个写作 Agent 加一个审稿 Agent。
  • agentic_rag:内置 RAG(Retrieval-Augmented Generation)能力的模板,适合"基于私有知识库做问答"这种典型场景。

切换模板的姿势很简单:

# 创建一个 RAG 形态的 Agent
agents-cli create my-docs-agent --template agentic_rag --yes

# 创建一个多 Agent 协作项目
agents-cli create my-research-team --template adk_a2a --yes

模板的选择对后续开发体验影响巨大。莫潇羽给的建议是:如果一开始就知道自己要做 RAG,千万别在默认 adk 模板上自己手搓 RAG,直接用 agentic_rag 模板省时间。

5.7 给已有项目"加装"能力

agents-cli 还有一个我个人非常喜欢的设计:对存量项目的增强能力。

如果你之前已经用 ADK 自己手搓了一个 Agent,没用 agents-cli 的脚手架,是不是就用不上后续这些工程化能力了?

不是。agents-cli scaffold enhance 可以反向给现有项目"加装":

# 给已有项目加上 Cloud Run 部署能力
agents-cli scaffold enhance --deployment-target cloud_run

# 加 CI/CD
agents-cli scaffold enhance --cicd-runner github_actions

# 加 RAG 能力
agents-cli scaffold enhance --datastore my_doc_store

这种"渐进式增强"对存量代码非常友好,不需要推翻重来。


六、评估流水线:在上线之前先弄清楚 Agent 到底靠不靠谱

6.1 为什么 Agent 比传统服务更需要评估

传统 Web 服务的质量好坏,基本可以用单元测试和接口测试覆盖:输入 X,输出必须是 Y,错了就报错。

Agent 不一样。

Agent 的输出是自然语言,同一个输入下,每次输出都可能不一样;它的内部还会调用工具,工具调用的顺序、参数、次数本身也是一个评估维度。光靠"输出文本完全匹配"做断言,几乎不可能通过。

所以 Agent 的评估必须换思路:

  • 基于评估集(evalset):写一系列"输入 + 期望行为"的样例。
  • 基于轨迹比对(tool trajectory):Agent 是不是按预期顺序调用了正确的工具。
  • 基于 LLM 评判(LLM-as-Judge):用另一个大模型来打分,比如"这个回答是否准确""是否有礼貌""是否回答了问题"。

agents-cli 内置的 Eval Skill 就是把这套方法论封装进编程助手的脑子里。

6.2 评估集是什么样的

打开你新建项目里的 tests/eval/evalsets/basic.evalset.json,长这样:

{
  "eval_set_id": "basic_eval",
  "name": "基础评估集",
  "eval_cases": [
    {
      "eval_id": "greeting",
      "conversation": [
        {
          "user_content": {
            "parts": [{ "text": "你好,能做什么?" }]
          }
        }
      ],
      "expected_tool_use": [],
      "expected_intermediate_agent_responses": [],
      "final_response": "我可以帮你查询天气和时间。"
    }
  ]
}

一份 evalset 就是一系列 eval_case 的集合,每个 case 描述一个"用户输入 + 期望反应"。可以同时检验:

  • 最终输出是不是接近期望。
  • 中间是否调用了正确的工具。
  • 调用工具时传的参数是否正确。

写评估集这件事,原本是个又繁琐又容易出错的活,但有了 Eval Skill 之后,你直接跟编程助手说"给我加一组评估,覆盖天气查询和时间查询的常见场景",它就能按规范给你写。

6.3 跑评估:一行命令的事

跑评估也非常简单:

agents-cli eval run                 # 跑默认评估集
agents-cli eval run --evalset basic # 跑指定评估集
agents-cli eval run --all           # 把所有评估集都跑一遍

跑完会输出每个 case 的得分,以及整体的指标,比如响应是否符合预期、工具调用是否完整。

6.4 评估对比:迭代的核心利器

实际项目里最重要的一个评估场景,是对比两次迭代的差异。

举个例子:你刚把 instruction 改了一版,想知道改完之后是变好还是变坏?或者你换了一个新模型,想知道效果是否值得切?这时候就用:

# 先跑一次旧版评估,保存为 baseline
agents-cli eval run --output evals/run_v1.json

# 改完之后跑新版评估
agents-cli eval run --output evals/run_v2.json

# 比较两次结果
agents-cli eval compare evals/run_v1.json evals/run_v2.json

对比的输出会清楚地告诉你:哪些 case 通过率上升了、哪些下降了、平均工具调用次数有没有变化、整体得分是涨还是跌。

这一套"评估 + 对比"的工作流,让 Agent 的迭代变成了和传统服务一样可量化的事情。这也是莫潇羽@无忆研习社个人在 Agent 项目里非常坚持的一条工程纪律:没有评估就别改代码。

6.5 一些我个人的评估实操心得

  • evalset 不要追求大而全。先从 20–30 个高频 case 起步,覆盖核心路径,跑得快、改得勤比堆 1000 条更重要。
  • 失败 case 一定要单独留一组。比如"用户输入了奇怪字符""模型抽风产生幻觉",把它们做成 regression set。
  • LLM-as-Judge 要谨慎用在主观维度。客观维度(是否调用了某个工具、是否包含某个关键词)用代码断言更准。
  • 评估也要做版本管理。建议把 evalset 当成代码一起进 Git,别放在某个人的本地。

6.6 评估指标体系的几个层级

我自己在做 Agent 项目的时候,习惯把评估分成四个层级,从下往上一层比一层贵:

flowchart BT
    A[第 1 层 · 静态检查<br/>代码风格、依赖完整、Schema 校验] --> B[第 2 层 · 单元测试<br/>工具函数级别的对错]
  
🔒
该内容仅对更高等级社区用户开放
请谨慎解锁时效性强且发布日期较早的文章
单篇解锁后若未显示全文请刷新页面
您当前:游客 · 可见 60% 内容 · 升级至 注册用户 可见 70%
👀
游客
可见 60%
✓ 当前
注册用户
注册用户
可见 70%
社区精英
社区精英
可见 100%
社区守护
社区守护
可见 100%
仅解锁本文,永久有效。如需PDF珍藏版,请联系站长获取。 当前单篇价格 ¥9.9
✏️ 发表评论

请先登录后发表评论

前往登录
📊 站点统计
今日发布0 篇
文章总数1107 篇
昨日发布1 篇
本月发布31 篇
建站时间456 天
🔍 搜索
站长微语

联系站长

QQ:2805463528
AIGC 技术社区
致力于解码 AI前沿技术 与经验分享
纯粹的技术应用社区

💡 欢迎您的建议与反馈,让社区变得更好

快速通道
联系站长
站长QQ二维码
AI交流群
AI交流群
仍在路上

那些寒夜里追赶过的方向

那些冷眼下没放弃的理想

一篇一篇写到现在

仍在路上

"不羁放纵爱自由"

—— 致敬 Beyond
持续创作中 莫潇羽 · 无忆研习社
▲