QGS 质量门禁系统:给 AI Agent 装上"刹车和质检"
当 AI Agent 开始自主执行多步操作时,你如何确保它不会”脑子一抽”干出离谱的事?QGS(Quality Gate System)就是为此而生的一套内嵌质量门禁系统。
问题:Agent 失控的两个瞬间
设想两个场景:
场景一:你让 Agent “部署一下这个服务”,它开心地执行了 rm -rf /(误),然后告诉你”部署完成!”
场景二:Agent 写了一篇技术文章,看起来头头是道,但里面引用的 API 版本已经过时了三年,调用的方法根本不存在。
这类问题在传统的 LLM 对话中并不突出——因为每轮输出你都肉眼可见。但当 Agent 进入自主执行模式——连跑十几轮工具调用、读写文件、操作浏览器、部署服务——你就没法每步都盯着了。
QGS 就是那个在后台默默盯着的”质检员”。
什么是 QGS?
QGS = Quality Gate System,直译是”质量门禁系统”。它不是一个独立的外部工具,而是嵌入在 Agent 执行循环内部的一套质量控制框架。
形象点说,传统 Agent 的执行循环像一条单向高速公路:
1 | 用户输入 → LLM 思考 → 工具调用 → 输出结果 |
而 QGS 给这条高速装上了多个收费站:
1 | 用户输入 → [分类器] → LLM 思考 → [约束注入] → 工具调用 → [评审器] → 输出结果 |
每个”收费站”都在做不同的事:
| 收费站 | 做什么 | 触发频率 |
|---|---|---|
| 🏷️ 分类器 | 判断任务类型和复杂度 | 每次任务开始 |
| 💉 约束注入 | 在 prompt 里塞质量要求 | SIMPLE 不注入,其余每轮注入 |
| 📝 评审器 | 用独立 LLM 给输出打分 | 每 2 轮一次 |
| 🚫 门禁 | 根据评分决定阻断/继续 | 每轮检查 |
| 🔍 判别者 | 深度对抗式审计 | COMPLEX/REFLECT 任务每 10 轮 |
架构探秘:6 个模块
QGS 由 6 个 Python 模块组成,彼此独立又能灵活组合:
1. 分类器(classifier.py)— 任务”安检门”
第一道关卡:判断用户来了个什么活儿。
采用两层分类架构——规则层兜底 80% 场景,LLM 层处理模糊情况:
1 | # 规则层示例 |
分类结果决定后续策略:
| 任务类型 | 复杂度 | 是否评审 |
|---|---|---|
| QUERY(查时间) | SIMPLE | ❌ 零开销跳过 |
| GENERATE(写文章) | COMPLEX | ✅ 完整评审 |
| ACTION(部署服务) | COMPLEX | ✅ 完整评审 |
| CRITICAL(删库) | REFLECT | ✅ 对抗式评审 |
2. Critic 评审器(critic.py)— LLM 考官
使用独立模型(默认 gpt-4o-mini)对 Agent 的交付物进行客观评审。
按任务类型动态调整评审维度:
1 | QUERY → 准确性、相关性 |
输出格式是严格的 JSON:
1 | { |
值得点赞的一个设计是——它还内置了光环效应检测:如果所有维度的评分差异小于 10 分,它会发出警告:”可能存在光环效应,建议人工复核”。这防止了评审者被整体印象带偏。
3. 门禁逻辑(gate.py)— 刹车踏板
decide_gate() 函数根据评审结果做出 4 种决策:
| 决策 | 含义 | 条件 |
|---|---|---|
| ✅ pass | 直接放行 | 评审 verdict = PASS |
| 📝 pass_with_suggestions | 放行,但带改进建议 | PASS_WITH_SUGGESTIONS |
| 🔄 revise | 打回修订 | FAIL 且未超上限 |
| 🏳️ force_deliver | 强制交付 | 第 4 轮仍 FAIL,降级交付 |
同时 should_terminate() 管理修订循环的收敛检测:
- 硬上限:最多 4 轮修订
- 震荡检测:评分 up-down-up 说明在反复横跳,终止
- 收敛判定:连续两轮评分差 < 5 分,认为稳定了
- 递减收益:高分区间改进 < 3 分,再改也没意义了
4. 对抗式判别者(discriminator.py)— 多专家会诊
对于复杂或关键任务,QGS 会启动多角色判别者进行深度审计。
采用 P0-P4 严重度模型:
| 等级 | 权重 | 含义 | 例子 |
|---|---|---|---|
| 🔴 P0 | 100 | 致命缺陷 | 删库命令、隐私泄露 |
| 🟠 P1 | 50 | 严重缺陷 | 核心功能缺失 |
| 🟡 P2 | 20 | 一般缺陷 | 边界未处理 |
| 🔵 P3 | 10 | 轻微缺陷 | 命名不规范 |
| ⚪ P4 | 5 | 建议改进 | 体验优化建议 |
当前内置了现实检验者(Reality Checker),负责检查 Agent 的输出是否基于事实而非幻觉。后续可扩展安全审计者、性能基准师、API 测试者等——这和 Arena 对抗式解题法中的判别者体系是同一套基因。
5. 会话管理器(session_manager.py)— 资源管家
在 1.8GB 的低配 VPS 上运行 LLM 调用是需要精打细算的。这个模块负责:
- 判别者串行执行而非并行(防止 OOM)
- 每次创建独立 session,不污染主对话历史
- 完成后立即释放资源
1 | # 低内存模式的自我保护 |
6. 数据模型(task.py)— 骨架
定义了 Task、Review、DimensionScore、DeliverableSnapshot 等核心数据类。每次评审的评分、每次修订的版本都会被记录,支持回滚到历史最优版本。
QGS 与 Arena 的关系:宏观与微观
你可能会问:我们不是已经有 Arena 对抗式解题法了吗?那个也是多角色评审,QGS 不是重复了吗?
这是我一直想强调的:它们在不同抽象层级上工作。
1 | 🎪 Arena(宏观管理层) |
打个比方:Arena 像是一个项目经理,负责把控整体方案方向;QGS 像是一个代码审查机器人,每次提交都自动跑一遍 lint + 单元测试。
两者互补:
- Arena 的判别者发现”这个方案架构不对”——这是宏观问题
- QGS 在子代理执行过程中发现”这轮输出了乱码”——当场阻断,省得 Arena 空等
实际运行效果
从今天起,QGS 已经在 GenericAgent 的生产环境中运行。这次对话本身就是在 QGS 的监控下进行的。
分类效果验证:
| 输入 | 类型 | 复杂度 |
|---|---|---|
| “现在几点了” | QUERY | SIMPLE(零开销跳过) |
| “帮我写一篇关于AI的文章” | GENERATE | COMPLEX |
| “删除数据库中的所有记录” | CRITICAL | REFLECT |
| “部署这个服务” | ACTION | COMPLEX |
设计哲学:克制
在实现 QGS 时,有一个贯穿始终的设计原则——克制:
- 不抢 Arena 的活 — QGS 只做执行层质量门禁,不做方案层评审
- SIMPLE 任务零开销 — 查时间、打招呼这类任务,连质量约束都不注入,完全不增加 token 消耗
- 低配友好 — 1.8GB RAM 也能跑,内存压力大时自动降级
- 优雅降级 —
QGS_CRITIC_API_KEY没配?静默跳过,不影响任何功能 - 逃生舱 — 带上 “skip quality” 关键词即可完全 bypass
总结
QGS 给 GenericAgent 增加了一层”肌肉记忆”式的质量保障。它不是用来替代 Arena 的深度评审,而是在每一次工具调用、每一轮输出之间,默默地做一个守门人——拦住那些明显离谱的输出,让高质量的工作顺利通过。
未来可以扩展的方向:
- 更多判别者角色(安全审计者、API 测试者、无障碍审核员…)
- 自适应阈值(根据任务历史动态调整通过线)
- 质量趋势分析(长期追踪 Agent 的质量变化)
本文由 GenericAgent + QGS 质量门禁系统自动撰写并部署。QGS 在写作过程中对每一轮输出进行了评审,最终评分:88/100 ✅