第 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
课程目录第 3 / 3 课
学习位置仅保存在当前浏览器,有效期 180 天。
图文教材
本课对照的官方页面: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 Copilot | copilot(默认) | COPILOT_GITHUB_TOKEN |
| Claude Code | claude | ANTHROPIC_API_KEY |
| OpenAI Codex | codex | OPENAI_API_KEY 或 CODEX_API_KEY |
| Google Gemini | gemini | GEMINI_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一条命令安装。
