从 GitHub PR 与 Control Center 对话
本指南介绍如何在不离开 GitHub 的情况下使用 Control Center:在 PR 页面上请求一次 AI 审查,在评论中向机器人提问,并在它的审查线程中把对话继续下去。
这个机器人就是你服务器自己的 GitHub App——也就是 已经负责让成员登录并运行后台工作的那一个。无需注册任何新东西,也无需任何东西可从 互联网访问:服务器通过轮询发现 GitHub 上说了什么,因此位于 NAT 之后的笔记本电脑 与公网部署的表现完全一致。
前提条件
标题为“前提条件”的部分- 服务器已注册并安装其 GitHub App,并具备 Pull requests: read and write(用于评论、线程和表情回应)与 Issues: read (用于评论搜索)权限。这两项都已经在该指南的权限列表中
- 仓库已关联到 Control Center 中的一个工作区
- 不需要 webhook URL,不需要隧道,不需要回调——网络侧没有任何要配置的东西
找到机器人的名称
标题为“找到机器人的名称”的部分机器人的登录名是 <appslug>[bot],其中 appslug 是你注册该应用时给它起的
名称。
- 前往 设置 → 服务器 → 单点登录,向下滚动到 提供商应用 卡片
- 展开 GitHub 区块并点击 测试
- 填充完成后复制 机器人登录名。如果它仍显示空白提示,那么登录名始终是
<appslug>[bot]——输入它,或者使用短名@appslug
GitHub 的 @ 自动补全不提供应用账户,所以登录名必须手动输入——这也是设置卡片
让它一键即可复制的原因。[bot] 后缀是可选的:@myapp 和 @myapp[bot] 都能
呼叫到机器人。
从 GitHub 请求审查
标题为“从 GitHub 请求审查”的部分有两种方式,二者都会启动与 询问 AI 按钮相同的那条预置 pr_review 流水线:
- 给 PR 加上
ai-review标签。这是 GitHub 最接近把机器人指派为审查者的做法 ——应用账户无法占据原生的「已请求的审查者」位置。没有评论可供回应,因此 GitHub 上不会发布任何内容;审查直接在 Control Center 中启动 - 在 PR 对话中评论
@myapp review(或者只写@myapp)。机器人会以 👀 回应,然后在审查启动后回复(或告知已有一个正在运行)
审查者在 PR 的审查空间中工作;按照使用 AI 审查 中的说明查看并发布发现项。发布回 GitHub 始终是你在 Control Center 中做出的 决定——从 GitHub 启动审查本身不会向 GitHub 发布任何内容。
标签在每个 PR 上只触发一次:添加它就是发起请求,移除后再添加也不会重新触发。 要再次运行审查——比如说在一次 push 之后——请 @提及机器人。
在 PR 对话中评论:
@myapp why does the flaky test in runner_test.dart fail on CI but not locally?发生的事情依次如下:
- 机器人会以 👀 回应,让你知道评论已被看到
- 问题会以你的名义发布到该 PR 的审查空间中——归属方式与你直接在 Control Center 中输入完全一致
- 智能体在空间中作答,答案会作为一条 @提及你的评论发布回 PR
在没有审查的 PR 上提问会唤醒工作区的 CEO 智能体;一旦审查运行过,就由最后发言的 那个智能体作答,因此追问会落到掌握上下文的那一个那里。
在审查线程中追问
标题为“在审查线程中追问”的部分在机器人参与的某条行内审查线程中回复——无论是它留下的 diff 评论,还是它在该 线程中发布的回答。无需 @提及;线程本身就是寻址方式:
> @myapp the retry loop looks O(n²) to me
what would the complexity be with the bounded queue instead?多轮对话同理:每次回复都是同一对话中的又一个问题,并以该审查空间为上下文,答案 仍会回到该线程中。
在 PR 对话时间线上追问属于一条新的顶层评论,因此仍然需要 @提及。
机器人会与谁对话
标题为“机器人会与谁对话”的部分一条 GitHub 评论到来时,除了登录名之外几乎没有携带别的信息,因此机器人在采取 任何行动之前会先解析作者:
- 你的 GitHub 账户必须已关联到你在 Control Center 中的身份——在 设置 → 工作区 → 个人资料与身份 → 代码托管 中 用 GitHub 登录,或粘贴一个令牌
- 你必须是在关联该仓库的工作区中拥有写入角色的成员(
member、admin或owner)
其他人都会收到一条礼貌的回复,说明缺少什么——未知登录名(未关联,或已关联但不是
此处的成员)与只读角色就是这两种情况——而且他们的话绝不会进入工作区。
ai-review 标签不按这种方式设限:它没有作者,因此会在已经关联该仓库的工作区中
启动审查。
预期表现
标题为“预期表现”的部分| 事项 | 行为 |
|---|---|
| 确认回应 | 约一分钟内在评论上出现 👀——即扫描间隔。ai-review 标签没有评论可供回应 |
| 回答 | 以机器人(即该 App)的身份发布,落在此前提问所在的线程中 |
| 空间内的归属 | 问题算在你名下;智能体代表你运行,并遵循该空间的自主程度设置 |
| 审查 | 发现项落在审查空间中;发布到 GitHub 需要手动进行 |
大约一分钟的延迟,是换取完全无需入站网络访问的代价。扫描本身没有什么紧急之处, 服务器离线期间也不会丢失任何内容——停机期间到达的评论会在下一轮扫描中被补上。
故障排查
标题为“故障排查”的部分@提及机器人的评论没有任何反应。
- 该 App 是否已安装在拥有该仓库的账户上,仓库是否已关联到某个工作区? 未关联的仓库会在记录任何内容之前被跳过,所以之后再关联它,内容仍然会送达
- 你的 GitHub 账户是否已关联,你是否是拥有写入角色的成员?查看该 PR 上机器人的 拒绝回复——它会说明是哪一种情况
- 仍然没有任何反应?当出错时,服务器日志会指明是哪一轮扫描和哪个 PR;请查找
pr_conversation:(轮询器)和github_pr_conversation:(桥接器)
标签没有启动审查。
它在每个 PR 上只触发一次。如果审查已经运行过,或者标签是在服务器首次看到该 PR
之前就加上的(第一轮扫描会静默记录积压项,而不是一次性全部触发),请改为
@提及机器人——除非已有审查正在进行,否则 @myapp review 总会启动一次。
机器人的回答始终没有出现在 GitHub 上。
回答本身绝不会丢失——它就在 Control Center 中该 PR 的审查空间里。发布失败 (GitHub 故障、权限变更)会被记录,并且不会重试该回复;如果确实重要,就在 线程中再问一次。
相关指南
标题为“相关指南”的部分- 创建 GitHub App:机器人由此注册而来
- 使用 AI 审查:如何查看由 @提及启动的审查 所产生的发现项
- 设置 GitHub 集成:关联你自己的 GitHub 账户,机器人正是凭它来解析你的
- 使用空间:这一切最终落入的房间