2024 年底 GitHub 悄悄上线了 GitHub Models——给所有仓库提供免费的 LLM API(GPT-4o、Claude Sonnet、Llama 等),workflow 里只要加一行
permissions: models: read就能调用。本篇讲如何用这个能力零成本给 lhx-kit 仓库接入 3 条基础 AI 自动流:新 issue 自动打标签 + 评论
@ai-bot回答问题 + 打ai-summary标签做长讨论总结。📌 只想知道"怎么用"(命令 / 触发位置 / 排错)? 直接看 🎮 AI 命令使用手册 —— 那是用户视角的速查;本篇是实现视角的 YAML 深度讲解。 📌 想了解后续扩展的 5 条 workflow(双模型 PR review / autofix / code-fix / docs)? 见 🎯 AI 协作策略。
lhx-kit 现在一共有 9 条 AI workflow,本篇讲前 3 条基础的,其余 6 条详见对应篇目:
| # | Workflow | 触发 | 本篇覆盖 |
|---|---|---|---|
| 1 | ai-triage.yaml |
新 issue 打开 | ✅ 本篇 |
| 2 | ai-assistant.yaml |
@ai-bot <问题> |
✅ 本篇 |
| 3 | ai-summarize.yaml |
打 ai-summary label |
✅ 本篇 |
| 4 | ai-review-gpt.yaml |
PR 事件 | → ai-review-strategy |
| 5 | ai-review-llama.yaml |
PR 事件 | → ai-review-strategy |
| 6 | ai-review-deepseek.yaml |
PR 事件 | → ai-review-strategy |
| 7 | ai-autofix.yaml |
@bot-fix-lint (PR) |
→ ai-review-strategy |
| 8 | ai-code-fix.yaml |
@ai-bot fix <...> (issue) |
→ ai-review-strategy |
| 9 | ai-docs-assistant.yaml |
@ai-docs draft/polish ... |
→ ai-review-strategy |
所有 9 条都跑在 GitHub Models 上,公开仓库免费、零 API key。
| 方案 | 成本 | 需要 secret | 维护 | 适合谁 |
|---|---|---|---|---|
| GitHub Models(本篇) | 🟢 开源仓库免费无限,私有仓库每日配额 | 无 | 零 | 开源项目 / 个人仓库 |
| 自建 + OpenAI API | 🔴 按 token 付费 | OPENAI_API_KEY |
要管 key 轮换 | 预算充足的公司项目 |
| 自建 + Anthropic API | 🔴 按 token 付费 | ANTHROPIC_API_KEY |
要管 key 轮换 | 要 Claude 质量 |
| GitHub Copilot Coding Agent | 🔴 Pro+ / Enterprise 席位费 | 无 | 零 | 有 Copilot 预算的公司 |
lhx-kit 是开源项目,GitHub Models 是绝对首选。质量足够做 issue 分类、总结、技术问答这些轻量场景。
| Workflow | 触发条件 | 作用 |
|---|---|---|
ai-triage.yaml |
新 issue 打开 | 自动分类 + 打标签 + 欢迎评论(带语言检测) |
ai-assistant.yaml |
评论里 @ai-bot ... |
上下文感知问答,读 README + issue + 最近 5 条评论 |
ai-summarize.yaml |
打 ai-summary 标签 |
长讨论串 TL;DR 总结,自动替换旧的总结评论 |
在贴具体代码前,先讲 4 个必须做对才能长期稳定运行的点:
permissions: models: read 是专属权限这是 GitHub 2024 年新增的 token scope,不开它就调不了。和 contents、issues 这些老权限并列写:
漏写会直接 403。
actions/ai-inference@v1这个 action 封装了对 /inference/v1/chat/completions 的调用,支持的模型:
推荐策略:triage 用 mini,assistant 用 mini(回答技术问题足够),summarize 用 mini。本项目统一全部 mini 够了。
AI 发的评论自己看到了可能又触发一轮 AI。必须在触发条件里过滤:
两层保险:一层看 user type,一层看评论里是否有 AI 签名 marker。
每条 AI 生成的评论必须在末尾附一句:
原因:
ai-triage.yaml —— 新 issue 自动分类让模型输出 JSON 是关键——不然 workflow 没法用自然语言响应做 github-script 调用:
然后在 github-script 里兜底清理:
JSON.parse 失败时用 core.warning 记录,不抛异常阻断——AI 偶尔会输出畸形 JSON,哑一次比把 workflow 打红好。
中文 issue 自动中文回复,完全不用你自己做语言检测。
ai-assistant.yaml —— 评论 @ai-bot 触发问答AI 回答质量 = Prompt 里喂了多少相关信息。本 workflow 拼 4 层上下文:
用 sparse-checkout 只拉 README(秒级完成),不用 full clone:
理由:
ai-summarize.yaml —— 长讨论串 TL;DR第二次再打标签时,应该替换旧总结而不是堆一堆。用 HTML 注释作为 marker:
发完总结立刻把 ai-summary 标签摘掉:
好处:
| 仓库类型 | 限制 |
|---|---|
| 公开仓库 | 无官方硬限,实际很宽 |
| 私有仓库 | 每个 model 按天 / 按分钟有限制,普通项目够用 |
| 企业私有仓库 | 需要 enterprise 级 GitHub Copilot 订阅才开 |
查看当前 rate limit:/settings/actions/general 底部有显示。
一个潜在风险:恶意用户在 issue 里疯狂 @ai-bot 消耗配额。本方案已包含 3 道防线:
如果进一步想做"只有仓库贡献者才能 @ai-bot":
author_association 是 GitHub 原生字段,值为 OWNER/MEMBER/COLLABORATOR/CONTRIBUTOR/FIRST_TIME_CONTRIBUTOR/NONE。按需放宽。
3 个 AI workflow 会大量 read/write 仓库 labels。workflow 本身不需要 label 预先存在(GitHub API 对不存在的 label 会自动创建),但提前建好有两个好处:
lhx-kit 目前用以下 3 类 22 个 label(比默认多 13 个):
| 类别 | Labels | 颜色 | 用途 |
|---|---|---|---|
| GitHub 默认(9 个) | bug / documentation / duplicate / enhancement / good first issue / help wanted / invalid / question / wontfix | 默认 | 新建仓库自带 |
| AI 相关(3 个) | ai-summary |
紫 #8957e5 |
打上触发 summarize workflow |
ai-triaged |
紫 #5319e7 |
ai-triage 运行完会盖这个章 | |
needs-reproduction |
黄 #fbca04 |
body 太短时 ai-triage 自动打 | |
| 包 scope(8 个) | cli config offline renderer runtime skills tsconfig vite-plugin |
浅蓝 #c5def5 |
issue 影响到的具体包,ai-triage 按 scope 自动打 |
| 其他 scope(2 个) | docs |
深蓝 #1d76db |
apps/docs 文档站 |
engineering |
绿 #0e8a16 |
CI / release / tooling |
gh CLI 一次性批量创建📖 完整的 gh 使用手册(登录、workflow 运维、PR/issue/release/secret 管理等)见 🔧 GitHub CLI 实战手册。下面只放建 label 所需的最小片段。
前置:gh auth login -h github.com 已登录过一次,且 token 仍有效(gh auth status 看一眼)。
在仓库根目录批量建 label:
--force 的作用:label 已存在则 PATCH 颜色/描述,不存在则创建——幂等,可反复跑。
&& 串联:任何一个失败会中断后续命令。用 for 循环或分号 ;。gh label create 可能被截断。分段跑每次 8~10 条稳。gh 不带 --repo 时靠 git remote get-url origin 反推仓库。📖 关于
gh auth login的完整交互问答(HTTPS vs SSH 的选择、8 位 device code 流程、网络抖动时的EOF报错如何判断真实登录状态)——见 🔧 GitHub CLI 实战手册 §场景 1。
| 阶段 | 方案 | 能力 |
|---|---|---|
| 本篇(已完成) | GitHub Models + 3 个轻量 workflow | 分类 / 问答 / 总结 |
| 下一步(已完成 ✅) | 多模型 PR review + AI 改代码(见"AI 协作策略") | 双 AI 评审 + 确定性 autofix + 受控 AI 修复 + AI 文档助手 |
| 进阶 | 接入 anthropics/claude-code-action | 升级某条 workflow 用 Claude 3.5 Sonnet(需 API key,$5-10/月) |
| 企业版 | 开 Copilot Enterprise + Coding Agent | 真正的 AI 工程师,@Copilot 派任务 |
每一阶能力强度翻倍,但复杂度和风险面也扩大。升级路线请仔细读 AI 协作策略 里的"安全门"和"prompt 陷阱"两节再落地。
| 问题 | 解法 |
|---|---|
| workflow 触发了但没反应 | 检查 permissions: models: read 有没写;去 Actions 页面看具体 step 日志 |
| 403 Forbidden on AI inference | models: read 权限没开,或仓库在组织里且组织禁用了 Models |
| AI 回复是英文但 issue 是中文 | system prompt 里加 "Reply in the SAME language as the input"(本模板已加) |
回复里包含乱码 \n\n |
检查 max-tokens 是否被截断;prompt 结尾加 "Keep under N words" |
| issue 打开没触发 workflow | issues 事件默认不会在仓库 fork 后从 fork 触发 master,只在主仓发 issue 才触发 |
| AI 评论自己又被 triage 识别成 issue | 加了 github.event.issue.user.login != 'github-actions[bot]' 过滤 |
actions/ai-inference