① 桌面客户端(推荐)
个人日常用、审别人的改动都用这个。装好之后,令牌一写、仓库里跑一条命令就能用。
模型费用: 第一次执行 qgc review 时,如果还没配置你自己的大模型,会提醒一次。不配置则审查和自动修复使用服务端模型,并产生费用。建议执行 qgc config set llm-key --stdin 、qgc config set llm-model <模型名> ,费用记在你的账号上。
先说清楚:审查合并请求不需要 Docker,也不需要 Podman。 模型审查和内置检查(例如密钥扫描)都不碰容器;只有"配置里写了要跑的命令"这一项需要执行环境(本机容器或远程执行机)。
1
装客户端
macOS / Linux(会装到 ~/.local/bin ):
复制 curl -fsSL https://www.miaomusic.cn/quality-gate/test/install.sh | sh
Windows(命令提示符或 PowerShell 都贴这一条,会装到 %LOCALAPPDATA%\qgc\qgc.exe 。irm 只在 PowerShell 里有效,贴进命令提示符会报「不是内部或外部命令」):
复制 powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://www.miaomusic.cn/quality-gate/test/install.ps1 | iex"
装完它会顺手做四件事:自动配好本环境服务端地址、检查有没有容器运行时、检查常用语言运行时、告诉你还差什么(缺的不用现在装)。
2
写入访问令牌
服务端地址安装器已经配好了,这一步只写令牌。令牌在试用申请页的「我的申请」里,提交申请后就会出现。
复制 printf %s "$TOKEN" | qgc config set token --stdin
qgc config list
令牌不能 直接写在命令后面 —— 会进命令行历史和进程列表,程序会拒绝。只有地址要改时才手动执行 qgc config set server <地址> 。
3
在仓库里生成配置文件
不用找任何人要配置,客户端自己生成,还会自动识别技术栈(Go / Node / Python / Java)。
已有配置时它会拒绝覆盖(怕冲掉你调好的策略),确实要重来加 --force 。生成后打开看两处:components (代码分区)和 checks (要跑的命令)。
4
装一个只读的代码托管平台令牌
qgc review --pr 要读合并请求的内容,这一步不做会直接报错。
网页上:设置 → 开发者设置 → 个人访问令牌 → 生成新令牌;权限只勾读取:合并请求 、内容 (私有仓库再加 元数据 )。
复制 read -rs QG_GITHUB
printf %s "$QG_GITHUB" | qgc config set github-token --stdin
第一行会等你在光标处粘贴令牌再回车;粘贴时屏幕不显示任何字符是正常的 ,不是卡住。只跑本地改动审查的话不需要它。
5
审一个合并请求(到这里就能审 —— 不需要 Docker)
复制 qgc review --pr https://github.com/owner/repo/pull/123
最短就是这一行。 两个常见参数各自的作用和什么时候才需要带:
参数 作用 什么时候必须带
--repo . 指定本地仓库目录。默认值就是当前目录 ,已在仓库根目录时多余;用来在本地算改动、读配置、采集事实(代码本身不上传) 只有在别处运行、仓库不在当前目录时,例如 --repo ~/code/项目
--approve-upload 跳过"要上传什么数据"的确认 只在脚本 / CI 这类没有终端 的场景必须带,否则报错退出;终端里直接跑不用带,它会先列出要传的数据等你确认
想带上改动说明加 --plan plan.md --docs REF=PATH ;目标分支上还没有配置、想用本地这份就加 --adopt-config 。
这一步不要求你装 Docker 或 Podman。 模型审查和内置检查(例如密钥扫描)都不碰容器,直接就会跑并给出结论。
唯一要注意:如果配置里写了带命令的检查 (例如 unit: go test ./... )并且标了 required: true ,而本机又没有执行环境,那一项会记成「未执行」,并因为它必填而被判定为阻断 。想先只看 AI 审查意见,二选一:把命令类检查临时改成 required: false (推荐),或者做下面的第 6 步。
6
(可选)只有想"跑命令的检查"时才需要:准备执行环境
想让配置里那些 command: 检查(构建 / 单测 / 代码规范)真的跑出结果,才需要这一步。只想看 AI 审查意见的话跳过它 ,按第 5 步的说明处理即可。
本机容器(推荐先试) :装好 Docker 或 Podman 就行,不用额外配置。
远程执行机 :管理员发你三件套时这样配 ——
复制 qgc config set remote-runner-url <公司内网Runner地址>
printf %s "$RUNNER_TOKEN" | qgc config set remote-runner-token --stdin
printf %s "$SIGNING_KEY" | qgc config set remote-runner-signing-key --stdin
7
把修复补丁推成分支(可选)
发现问题后它会尝试自己修:由模型生成补丁(生成补丁不需要容器 )→ 在隔离环境重跑检查 → 复验(复验需要执行环境 )。默认结果是一个补丁文件 ,不会动你的分支;没有执行环境时补丁照样会给你,只是复验跑不了。
复制 qgc push --repo . --scan-id <扫描ID>
前提:本机对这个仓库有推送权限;生成补丁不需要执行环境,但要推成分支必须先通过复验 (重跑检查,所以需要隔离执行环境);目标分支不受保护也不是从 fork 提的。
想让它自动往现有合并请求追加一个提交 ,在配置文件里加:
复制 repair:
delivery:
default_mode: pr-update
allowed_modes: [suggestion, artifact, pr-update]
pr_update:
enabled: true
这一章的常见问题
现象 原因 怎么办
提示缺 server / token 没配好 qgc config list 检查;地址通常已自动配好,缺的是令牌
报 channel 不被接受 装成了另一个环境的客户端 用本环境链接重装,再 qgc config set server <本环境地址>
说本机没有密钥保险箱 系统不带钥匙串 改用环境变量 QGC_TOKEN 每次传入
报需要平台令牌 第 5 步没做 先粘贴令牌回车,再写入配置
② 挂到代码托管平台(团队用)
有合并请求流程的团队用这个:装一次,全仓库的 PR 自动体检。
模型费用: 仓库 Secrets 里还没有你自己的模型密钥时,每次运行都会提醒。不配置则审查和自动修复使用共享额度,并产生费用。请配置 REVIEWER_FAST_API_KEY 与 REVIEWER_DEEP_API_KEY ,费用记在该密钥所属的账号上。配好后不再提醒。
1
拿到流程文件
这个文件由官方提供,放进仓库的 .github/workflows/ 。别自己从零写 —— 里面有一堆安全细节(第三方组件要固定版本、权限最小化、外部 fork 的 PR 不给密钥),自己写容易漏。
2
把占位符换成真实值
模板里有几处 <pin-full-commit-sha> ,换成你要固定的版本号。
3
把模型密钥放进仓库保险箱
设置 → Secrets and variables → Actions → 新建仓库密钥,按模板里写的名字添加(区分大小写)。
4
提交一个 PR 看结果
合并请求会自动触发,结果出现在检查列表里,并产出报告产物。
你要操心的三件事: 外部 fork 来的 PR 不注入模型密钥(模板已处理);流程权限保持只读;要改配置单独提一个 PR (防止一次改动顺手把门禁放宽)。
③ 命令行(高级,先找管理员要东西)
只有你们自己搭流程、管理员明确说"用命令行"时才需要。程序和配置都由管理员发放。
模型费用: 第一次执行 qg run 时,如果运行环境里没有配置文件所引用的模型密钥,会提醒一次。不配置则审查和自动修复使用共享额度,并产生费用。请设置例如 REVIEWER_FAST_API_KEY ,费用记在该密钥所属的账号上。
1
放好配置文件,只改这两块
复制 components:
- name: backend
paths: ["**/*.go"]
type: go-service
checks:
unit:
command: "go test ./..."
components: [backend]
profiles: [LIGHT, NORMAL, FULL, DEEP]
required: true
别自己手写配置。必填字段比看起来多(模型至少要两个独立组,还要有模型提供计划生成角色),手写必踩校验报错。真要手写,profiles 一定不能漏。
2
生成改动文件并运行
复制 git diff main...HEAD > pr.diff
qg run --diff pr.diff --workdir .
3
看结果
复制 qg report --evidence quality-artifacts/<run-id> --format json
退出码:0 通过 1 阻断 2 需人工确认 3 配置错误
跑得起来,但报告说"证据不足"?补齐这三样
补什么 为什么 不补会怎样
容器运行时 只有"带命令的检查"要在隔离环境里跑(模型审查和内置检查不需要) 那些检查记成未执行;标了 required: true 的会按必需检查未通过阻断 ,没标必填的不影响结论
模型密钥(环境变量) 要有 AI 审查 没有 AI 那一段;标了必填会记"必需模型失败"
--repo + --base 规范要取自改动前的版本 规范读的是当前工作区,被判可疑并封顶
复制 qg run --config quality-config.yaml --diff pr.diff --workdir . \
--repo . --base main
模型密钥只写名字,真正的值放环境变量:api_key_env: REVIEWER_API_KEY 配 export REVIEWER_API_KEY=你的钥匙 。
常见问题排查
按现象查最快。
现象 原因 怎么办
提示缺 server / token 没配好 qgc config list 检查;地址通常已自动配好,缺的是令牌
报 channel 不被接受 装成了另一个环境的客户端 用本环境链接重装,再手动设一次地址
说本机没有密钥保险箱 系统不带钥匙串 改用环境变量 QGC_TOKEN 每次传入
改了运行环境镜像后验签失效 镜像签名固定,改了会清掉记录 重新验签或重装
退出码 3 + 缺少档位声明 检查项漏了 profiles 补上 profiles: [LIGHT, NORMAL, FULL, DEEP]
退出码 3 + 独立组为 0 模型只配了一个组 至少两个不同的独立组
提示"改动了门禁自己的文件" 你改了配置或检查脚本,这是保护机制 配置改动单独提一个 PR
检查没跑 本机没有可用容器 装容器运行时,或让管理员给远程执行机
密钥的安全规矩(三种用法都适用)
密钥不写进配置文件 ,配置里只写"去哪个环境变量取"
令牌不写在命令行参数里 ,用管道或环境变量
外部 fork 的合并请求不给模型密钥
只有带命令的检查在隔离环境里跑,你的私钥和模型密钥不会传给检查进程(模型审查不经容器)
令牌泄露立刻联系管理员重签