第 3 课

推到 GitHub 跑起来:认证、费用上限、日志与换引擎

用 COPILOT_GITHUB_TOKEN 或各家 API Key 配置引擎认证,用 max-ai-credits、max-turns、skip-if-match 控制费用,推送后用 gh aw run --dry-run 校验、gh aw run 触发、gh aw status 看状态,用 logs、audit、forecast 查耗时与 AIC 花费,最后用 -e

图文25 分钟

课程目录第 3 / 3 课

学习位置仅保存在当前浏览器,有效期 180 天。

01 / 图文教材

图文教材

本课对照的官方页面:Quickstart、Authentication、AI Engines、Cost Management、CLI Commands。第 2 步和第 3 步中的 --dry-run、status 在 Linux(gh-aw v1.0.1)上实测;真正运行、日志和费用需要登录 GitHub 并配置 AI 账号,这部分按官方文档整理,课内单独注明。

前两课的工作流都只在本机编译。这一课把它们推到 GitHub:先配置 AI 引擎的认证,再加上费用上限和跳过条件,然后手动触发一次,最后学会看日志、算花费、换引擎。

第 1 步:配置 AI 引擎认证

默认引擎是 GitHub Copilot。官方给了两种认证方式,二选一:

  • 组织开通了 Copilot 集中计费:在工作流的 permissions 里加 copilot-requests: write,运行时直接用 Actions 自带的令牌调用模型,不用另存密钥。第 1 课编译时那条 info 提示说的就是这个。
  • 个人账号:在 GitHub 创建一个 fine-grained Personal Access Token,在 Account permissions 里把 Copilot Requests 设为 Read,然后把它存成仓库 secret。
gh secret set COPILOT_GITHUB_TOKEN < /path/to/token.txt

用其他引擎时,换成对应的 secret 名:

引擎engine: 取值仓库 secret
GitHub Copilotcopilot(默认)COPILOT_GITHUB_TOKEN
Claude CodeclaudeANTHROPIC_API_KEY
OpenAI CodexcodexOPENAI_API_KEY 或 CODEX_API_KEY
Google GeminigeminiGEMINI_API_KEY

官方说明:claude login 得到的订阅令牌(CLAUDE_CODE_OAUTH_TOKEN)不支持,必须用 API Key 或 Anthropic 的 Workload Identity Federation。

不确定缺了哪些 secret,可以运行 gh aw secrets bootstrap,它会分析仓库里的工作流,再交互式地引导你逐个设置。

第 2 步:加上费用上限与跳过条件

gh-aw 用 AI Credits(AIC)统计推理费用,1 AIC = 0.01 美元,按模型的公开单价估算。官方默认的护栏是:单次运行 1000 AIC、每个工作流每 24 小时 5000 AIC,代理步骤 20 分钟超时。示例工作流用不了这么多,可以收紧一些。

周报工作流:上一期周报还开着就跳过,单次最多 100 AIC。在 weekly-summary.md 的 frontmatter 里改成:

on:
  schedule: weekly on monday
  workflow_dispatch:
  skip-if-match: 'is:issue is:open in:title "[周报]"'
timeout-minutes: 10
max-ai-credits: 100

分诊工作流:最多 15 轮对话,单次最多 200 AIC:

timeout-minutes: 10
max-turns: 15
max-ai-credits: 200

(上面只列出要改的字段,permissions、safe-outputs 保持不变。)

  • skip-if-match 在低成本的 pre_activation 作业里跑一次 GitHub 搜索,有匹配就跳过,代理根本不会启动,也就不产生 AI 费用。它搜索的是整个仓库,所以适合周报这种「看仓库状态」的条件,不适合用来判断「当前这个 Issue」。
  • max-ai-credits 是单次运行的硬上限,快到上限时会先发出警告。max-turns 限制模型来回的轮数,防止死循环。

编译两个工作流,确认上限写进了 lock 文件:

gh aw compile
grep -o 'GH_AW_MAX_AI_CREDITS: "[0-9]*"' \
  .github/workflows/*.lock.yml | sort | uniq -c

对照结果:

✓ Compiled 2 workflows: 2 succeeded, 0 warnings
  2 .github/workflows/issue-triage.lock.yml:GH_AW_MAX_AI_CREDITS: "200"
  2 .github/workflows/weekly-summary.lock.yml:GH_AW_MAX_AI_CREDITS: "100"

第 3 步:推送并手动触发一次

提交后推到 GitHub。官方再次强调:.md 和 .lock.yml 要一起提交。

git add .github
git commit -m "Add cost limits to agentic workflows"
git push -u origin main

gh aw run 只能触发带 workflow_dispatch 的工作流,所以先跑周报。加 --dry-run 只做校验、不真正触发:

gh aw run weekly-summary --dry-run

对照结果:

i Running 1 workflow(s)...
✓ Validation passed for workflow: weekly-summary.lock.yml
  (dry run - not executed)
✓ Successfully triggered 1 workflow(s)

(第二行原文是一整行,这里为排版折行。)注意:最后一行虽然写着 triggered,但前面已经说明是 dry run,并没有真正执行。去掉 --dry-run 才会真正触发:

gh aw run weekly-summary
gh aw status

gh aw status 列出仓库里所有 agentic workflow 的引擎、是否已编译、启用状态和最近一次运行。下面是在未登录、未推送的本机上的实测,所以 state 是 Unknown;推送并运行后,这里会显示 run id 和结果:

│workflow      │engine │compiled│state  │remaining│run id│status│
├──────────────┼───────┼────────┼───────┼─────────┼──────┼──────┤
│issue-triage  │copilot│Yes     │Unknown│N/A      │0     │-     │
│weekly-summary│copilot│Yes     │Unknown│N/A      │0     │-     │

(表格最右还有一列 conclusion,这里为排版省略。)

官方文档描述(未实测):一次运行一般要 2~3 分钟,可以在仓库的 Actions 页面看进度,也可以用 gh run watch 实时跟踪。成功后,Issues 页会出现一个标题以 [周报] 开头的新 Issue。分诊工作流不需要手动触发,新开一个 Issue 就会自动运行。

第 4 步:看日志、查费用、预测预算

以下命令都需要登录并已有运行记录,按官方 CLI 文档整理:

gh aw logs
gh aw logs weekly-summary
gh aw audit <run-id>
gh aw forecast --period week
  • gh aw logs 下载最近的运行记录和产物,输出一张总览表,包含耗时、token 用量和 AIC 等列。加上工作流名只看这一个。
  • gh aw audit <run-id> 深入分析一次运行:token、工具调用、网络访问和推理花费都在里面。传两个 run id 还能对比差异。
  • gh aw forecast 根据历史运行估算下周或下个月的 AIC 用量,GA 版起已不再是实验功能,并把威胁检测的花费也算了进去。

想用脚本汇总,可以导出 JSON。下面是官方文档里的示例,按工作流汇总近 30 天的 AIC:

gh aw logs --start-date -30d --json | \
  jq '[.runs[]] | group_by(.workflow_name) |
  map({workflow: .[0].workflow_name, runs: length,
       total_aic: (map(.aic // 0) | add)})'

官方提醒:AIC 是按 models.dev 价格目录尽量估算的,可能和服务商的实际账单不完全一致,最终以服务商后台为准。除了推理费用,每次运行还会消耗 GitHub Actions 分钟数。

第 5 步:换引擎,或一键装官方示例

换引擎只要在 frontmatter 里加一行,比如 engine: claude。想先看看效果、不改文件,可以在编译时临时覆盖:

gh aw compile issue-triage -e claude
head -2 .github/workflows/issue-triage.lock.yml \
  | grep -o '"secrets":\[[^]]*\]'

对照结果(折行显示):

"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN",
"GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS",
"GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"]

lock 文件里多了 ANTHROPIC_API_KEY,说明运行时会去读这个 secret。试完记得不带 -e 重新编译一次,恢复成 Copilot。

如果不想从零写,可以直接装官方示例仓库 githubnext/agentics 里的工作流。官方 Quickstart 用的是「每日仓库状态报告」:

gh aw add-wizard githubnext/agentics/repo-status

这是一个交互式向导,会依次检查仓库权限、让你选 AI 引擎、引导配置认证、把 .md 和 .lock.yml 直接推送或以 PR 方式加进仓库,最后可以选择立即运行一次。上一课的分诊工作流也有官方完整版,可以用 gh aw add-wizard githubnext/agentics/issue-triage 安装。

小结

  • 认证:Copilot 用 COPILOT_GITHUB_TOKEN 或组织的 copilot-requests,其他引擎用各自的 API Key secret。
  • 成本:用 max-ai-credits、max-turns 设上限,用 skip-if-match 让代理在不必要时根本不启动。
  • 运行:gh aw run 手动触发,gh aw status 看状态;gh aw logs、audit、forecast 看花费和趋势。
  • 换引擎改 engine: 一行,官方示例用 gh aw add-wizard 一条命令安装。