Kirat - Multi Model AI Council

官方

一个AI只给你一条推理线。Kirat是一个Claude Desktop扩展和Claude Code插件,将ChatGPT和Gemini作为议事会加入:独立立场、保留异议的投票,以及每项发现由第二个模型家族检查的代码审查。自带API密钥。付费,一次性买断。

你可以用 Kirat Multi Model AI Council MCP 做什么?

  • 获取多模型对决策的投票 — 使用 kirat_vote 让委员会就业务或技术问题提供选项和背景,并给出意见。
  • 审查代码的安全性与正确性 — 在发布前使用 kirat_review 获取交叉验证的发现,包括严重性级别和建议修复方案。
  • 查看决策背后的异议与理由 — 获取每个模型的完整立场,包括少数派投票,并附有置信度分数和依据。

文档

01 — 回放

观看委员会如何工作。

Kirat 工具的真实录制,录制于 2026 年 10 月 13 日,使用你购买的那个版本。选择一个工具,观看委员会如何工作:独立立场、交叉核查、匿名排名以及异议。这是一次回放:你在这里点击的任何内容都不会调用模型,也不会有任何内容离开此页面。聊天内容仅为说明而写,只是复述录制的结果;Claude 发送给 Kirat 的内容以及返回的内容在“幕后”部分原样展示。

来自不同领域的五个问题。选择一个。

让 Kirat 对此投票:我独自经营一家小型 B2B SaaS。我应该增加免费套餐吗?

kirat_vote 询问了委员会

委员会已作出决定(多数 2:1):仅保留付费,不做任何改变。

我自己的投票是异议:“仅保留付费,将试用期延长至 30 天”。该异议及其理由会被记录在案,以便你自己权衡。

幕后

kirat_vote Claude 发送给 Kirat 的内容

问题: 我独自经营一家小型 B2B SaaS。我应该增加免费套餐吗?

录制于 2026-10-13 · KIRAT_VOTE · 投入程度:标准 · 1 轮

发送的上下文: 独立开发者。面向自由职业者的开票工具,每月 19 美元,14 天免费试用,5 个月后有 30 名付费客户。注册主要来自两篇在 Google 上排名靠前的博客文章。约 12% 的试用转化为付费。支持工作每周已占用约 5 小时。开发者有一份日常工作,每周约有 10 小时用于该产品。

选项: 增加免费套餐 · 仅保留付费,将试用期延长至 30 天 · 仅保留付费,不做任何改变

委员会的结果

gpt-5.6 置信度 88

仅保留付费,不做任何改变免费套餐可能会增加非付费用户和支持负担,而支持工作已经占用了每周可用 10 小时中的一半。12% 的试用转化率相当不错,因此没有明确证据表明试用期长度是瓶颈。保持当前模式,把稀缺的时间用于减少支持需求和将获客渠道扩展到两篇博客文章之外。

gemini-3.6-flash 置信度 90

仅保留付费,不做任何改变每周只有 10 小时可用,支持工作已经占用了 50% 的产能。免费套餐会在没有任何控制的情况下推高非付费用户的支持量。12% 的试用转化率已经很强;瓶颈是流量,而不是定价模式。

claude(第三位投票者) 置信度 58

仅保留付费,将试用期延长至 30 天免费套餐主要会增加支持负担,而支持工作已经占用了可用时间的一半。开票是按月进行的,因此 14 天试用可能在自由职业者发出第二张发票并看到价值之前就结束了。30 天试用覆盖一个完整的计费周期,而不会增加永久免费用户。异议,已记录

决定 仅保留付费,不做任何改变 路径 多数 2:1 成本 $0.015

让 Kirat 对此投票:我们客户的在线商店需要重建。在 WooCommerce 上重建还是迁移到 Shopify?

kirat_vote 询问了委员会

委员会已作出决定(一致 3:0):迁移到 Shopify。

所有三个立场,包括我的,都指向同一方向。每个立场都附有理由。

幕后

kirat_vote Claude 发送给 Kirat 的内容

问题: 我们客户的在线商店需要重建。在 WooCommerce 上重建还是迁移到 Shopify?

录制于 2026-10-13 · KIRAT_VOTE · 投入程度:标准 · 1 轮

发送的上下文: 我们是一家小型数字代理机构。客户在德国、奥地利和瑞士销售约 1,800 件家具产品,有 3 名员工,没有内部开发者。当前商店是自托管的 WooCommerce 安装,已有 6 年,有 31 个插件,页面缓慢,过去一年发生两次安全事件。年收入约 120 万欧元。客户希望降低维护和减少紧急情况;他们使用本地 ERP,将产品数据导出为 CSV。重建预算:25,000 欧元。

选项: 在 WooCommerce 上重建 · 迁移到 Shopify

委员会的结果

gpt-5.6 置信度 89

迁移到 ShopifyShopify 更符合客户的主要目标:降低维护、减少安全紧急情况,并且不需要内部开发者。1,800 个产品的目录和基于 CSV 的 ERP 工作流是可控的,25,000 欧元的预算应能覆盖一次有纪律的迁移以及针对 DACH 地区的税务、支付和法律设置。权衡之处是经常性的应用/平台成本、后端灵活性较低,以及在承诺之前需要验证 ERP 导入工作流和任何家具特有的变体。重建 WooCommerce 可以保留灵活性,但会保留对托管、更新、插件兼容性和安全的责任——而这正是客户想要减少的运营负担。

gemini-3.6-flash 置信度 90

迁移到 Shopify在没有内部开发者、只有 3 名员工且有安全事件历史的情况下,Shopify 大幅降低了维护开销和安全风险。25,000 欧元的预算足以完成 Shopify 迁移,包括 CSV ERP 集成,而在 WooCommerce 上重建则会延续高维护成本和持续的紧急风险。

claude(第三位投票者) 置信度 72

迁移到 Shopify在没有内部开发者、31 个插件和两次安全事件的情况下,客户的真正问题是维护,而不是功能。Shopify 消除了托管、更新和大部分安全工作;从 ERP 导入 CSV 产品是标准做法。权衡之处是交易和应用费用以及灵活性较低,而在这种规模下,稳定性比灵活性更重要。

决定 迁移到 Shopify 路径 一致 3:0 成本 $0.015

让 Kirat 对此投票:一家本地面包店想要更多蛋糕预订。接下来的 3,000 欧元应该首先花在哪里?

kirat_vote 询问了委员会

委员会已作出决定(一致 3:0):一个正规的在线订购页面。

所有三个立场,包括我的,都指向同一方向。每个立场都附有理由。

幕后

kirat_vote Claude 发送给 Kirat 的内容

问题: 一家本地面包店想要更多蛋糕预订。接下来的 3,000 欧元应该首先花在哪里?

录制于 2026-10-13 · KIRAT_VOTE · 投入程度:标准 · 1 轮

发送的上下文: 位于一座 40,000 人的德国小镇的面包店,有 6 名员工。定制蛋糕和预订的利润率最高。目前,订单只能通过电话和电子邮件进来;网站只有营业时间和联系表单,没有可用于订购的内容。Google 商家资料有 120 条评论,4.7 星。到目前为止没有付费广告。预算:下一季度 3,000 欧元,店主时间很少。

选项: Google Ads · 一个正规的在线订购页面 · 两者平均分配

委员会的结果

gpt-5.6 置信度 94

一个正规的在线订购页面先解决瓶颈:目前,感兴趣的客户无法方便地或以结构化的方式预订。一个简单的、移动端友好的订购页面,包含蛋糕选择、取货日期、定制选项、价格或定金以及确认,可以利用面包店已经拥有的强大本地知名度,并减少电话和电子邮件工作。在没有可靠订购流程的情况下投放 Google Ads,会把付费流量送入薄弱的转化路径。在几周可衡量的订单之后,后续的广告预算可以更有针对性地使用。

gemini-3.6-flash 置信度 90

一个正规的在线订购页面没有数字化订购路径,广告只会通过电话和电子邮件产生更多耗时的手工工作,而店主几乎无法应付。此外,强大的 Google 资料(4.7 星)会通过真正的订购页面立即更好地转化它已经带来的自然流量,而这应该在任何资金投入广告之前完成。

claude(第三位投票者) 置信度 74

一个正规的在线订购页面只有当点击能够转化为订单时,广告才有回报。目前每个访客都必须打电话或发电子邮件,因此付费流量会流失。一个包含产品选择、取货日期和预付款的订购页面可以转化 4.7 星资料已经带来的需求,并使后续广告可衡量。

决定 一个正规的在线订购页面 路径 一致 3:0 成本 $0.012

让 Kirat 对此投票:现在就我们的计费模块提取为单独的服务,还是先在单体中加固其边界?

kirat_vote 询问了委员会

委员会已作出决定(一致 3:0):先在单体中加固边界。

所有三个立场,包括我的,都指向同一方向。每个立场都附有理由。

幕后

kirat_vote Claude 发送给 Kirat 的内容

问题: 现在就我们的计费模块提取为单独的服务,还是先在单体中加固其边界?

录制于 2026-10-13 · KIRAT_VOTE · 投入程度:标准 · 1 轮

发送的上下文: 8 名工程师的团队。一个 TypeScript 单体,约 60,000 行,一个 Postgres 数据库,每天部署多次。计费模块每周都在变化,并导致了最近 8 次生产事故中的 5 次,主要是通过其他模块直接读写计费表。团队中没有人有生产环境分布式系统的经验。领导层希望在两个季度内减少事故。

选项: 现在将计费提取为服务 · 先在单体中加固边界

委员会的结果

gpt-5.6 置信度 94

先在单体中加固边界事故主要是由不受控的数据库访问引起的,而不是缺乏网络边界。在单体内部强制计费所有权:移除直接表访问,暴露一个狭窄的内部 API,添加数据库权限或模式级控制,并添加契约和集成测试。这可以在两个季度的窗口内快速针对故障模式。现在提取会给一个没有分布式系统经验的团队增加部署、可观测性、重试、数据一致性和运营复杂性。一旦访问路径和数据所有权明确,提取会变得更安全,并且如果独立扩展或部署仍然有价值,可以重新考虑。

gemini-3.6-flash 置信度 90

先在单体中加固边界停机的主要原因是其他模块直接访问数据库中的计费表。加固模块边界可以在现有单体中直接解决这个问题。由于 8 人团队没有分布式系统经验,现在提取模块会带来新的风险,并危及在两个季度内减少事故的目标。

claude(第三位投票者) 置信度 76

先在单体中加固边界事故来自其他模块直接接触计费表。服务拆分也会强制实现该边界,但它会为一个没有相关经验的团队增加网络故障、分布式事务和新的运维工作。在单体内部强制模块 API 和表所有权可以更快地解决根本原因,并为以后保留提取选项。

决定 先在单体中加固边界 路径 一致 3:0 成本 $0.014

让 Kirat 对此投票:在我们的系统综述中,单次 LLM 筛选能否取代第二位人工筛选者?

kirat_vote 询问了委员会

委员会已作出决定(一致 3:0):将 LLM 作为额外的筛选者;由人类解决冲突。

所有三个立场,包括我的,都指向同一方向。每个立场都附有理由。

幕后

kirat_vote Claude 发送给 Kirat 的内容

问题: 在我们的系统综述中,单次 LLM 筛选能否取代第二位人工筛选者?

录制于 2026-10-13 · KIRAT_VOTE · 投入程度:标准 · 1 轮

发送的上下文: 为一项计划发表的健康服务研究系统综述,对约 3,000 条记录进行标题和摘要筛选。当前方案:两名独立的人工筛选者,冲突通过讨论解决。员工时间紧张。该综述遵循 PRISMA,期刊审稿人会询问筛选是如何进行的。遗漏一项相关研究(错误排除)比纳入一项不相关的研究更糟。 选项: 是,替换第二名人工筛选员 · 将 LLM 用作额外筛选员;由人工解决冲突 · 否,保留两名人工筛选员且不使用 LLM

委员会的结果

gpt-5.6 置信度 94

将 LLM 用作额外筛选员;由人工解决冲突。当错误排除是主要风险时,单次 LLM 筛选不应取代独立的人工筛选:其表现可能因主题、提示词和模型版本而异,且错误可能是系统性的。可用它来对记录排序或标记分歧,但必须由人工解决冲突并确认排除项。为满足 PRISMA 报告和可复现性要求,需记录模型、版本、提示词、验证样本和决策流程。

gemini-3.6-flash 置信度 88

将 LLM 用作额外筛选员;由人工解决冲突。混合方法可大幅减少 3,000 条标题和摘要的人工工作量,同时保持 PRISMA 和同行评审所要求的方法学严谨性。由于必须避免错误排除,由人工解决每一处不一致(或采用高灵敏度的提示策略)可确保不丢失相关研究。

claude(第三位投票者) 置信度 70

将 LLM 用作额外筛选员;由人工解决冲突。错误排除是代价高昂的错误,而 LLM 在筛选上的召回率因主题和提示词而异。替换第二名人工筛选员会移除捕捉这些错误的检查,且难以向期刊审稿人辩护。将 LLM 作为第三名筛选员加入并由人工解决冲突,可使方案站得住脚,同时仍能标记出可能的遗漏。

决定 将 LLM 用作额外筛选员;由人工解决冲突 路径 一致 3:0 成本 $0.019

记录于 2026 年 10 月 13 日,使用 kirat_vote,标准努力层级;每次会话耗时不到 20 秒,成本不到两美分。问题、选项和上下文均按发送时的原样显示,推理过程完整呈现。Gemini 用德语回答了四次,ChatGPT 回答了一次;这些回答在此已翻译。在免费层级的问题中,Claude 以 2:1 落败,其反对意见保留在记录中。置信度数值是各模型自己的自我报告。

来自不同领域的五段代码摘录,每段均按原样发送。ChatGPT 和 Gemini 并行审查,Claude 补充两条自己的发现,每条发现都由另一模型家族核查。只有经确认的发现才计入。请选择一项。

在我们发布之前,让 Kirat 审查我们的 Stripe 支付 webhook 的安全性和正确性。

kirat_review 向委员会提问

Kirat 发现了 14 个已确认问题(4 个严重、4 个高、6 个中)。每条发现都由另一模型家族交叉核查。

从列表顶部的条目开始处理;每条都附有建议的修复方案。

幕后

kirat_review Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_REVIEW · 努力层级:标准 · 14 个已确认,0 个被拒绝 · $0.14

重点: 支付 webhook 的安全性和正确性

发送的代码:

// routes/webhooks.js — payment webhook of a solo invoicing SaaS (Node 20, Express 4, Stripe, pg)
const express = require('express');
const { db } = require('../db');
const router = express.Router();

router.post('/webhooks/stripe', express.json(), async (req, res) => {
  const event = req.body;

  if (event.type === 'invoice.paid') {
    const invoice = event.data.object;
    const userId = invoice.metadata.userId;
    await db.query('UPDATE users SET plan = $1, paid_until = $2 WHERE id = $3',
      ['pro', new Date(invoice.period_end * 1000), userId]);
    await db.query('INSERT INTO payments (user_id, amount) VALUES ($1, $2)',
      [userId, invoice.amount_paid / 100]);
  }

  if (event.type === 'customer.subscription.deleted') {
    await db.query("UPDATE users SET plan = 'free' WHERE stripe_customer = '" + event.data.object.customer + "'");
  }

  res.sendStatus(200);
});

module.exports = router;

委员会的结果

  1. 严重 该 webhook 在处理请求体时未检查 Stripe 签名。因此任何外部调用者都可以发送伪造的 invoice.paid\ 或 customer.subscription.deleted\ 事件,并解锁或降级用户账户。JSON 解析器还会丢弃 Stripe 签名验证所需的未经修改的原始请求体。 修复: 为此路由使用 express.raw({ type: 'application/json' })\,并在任何处理之前调用 stripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\。确保此前没有全局 JSON 解析器已应用于此路由;以 400 拒绝无效签名。 第 6 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  2. 严重 缺少对 Stripe webhook 签名的验证。攻击者可以向此端点发送任意伪造的 webhook 事件,从而未经授权地将账户设为 Pro 或操纵数据库条目。 修复: 使用 stripe.webhooks.constructEvent() 配合 Stripe webhook 密钥来验证每个事件的真实性和完整性。 第 6 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  3. 严重 由于将用户输入(event.data.object.customer)直接拼接到 SQL 查询字符串中,存在 SQL 注入漏洞。 修复: 像前面的语句一样使用参数化查询:db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer])。 第 18 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  4. 严重 该 webhook 从不验证 Stripe 签名,而 express.json() 会丢弃验证所需的原始请求体。任何人都可以 POST 一个伪造的 invoice.paid 事件,免费将任意账户升级为 pro。 修复: 在此路由上使用 express.raw({ type: 'application/json' }),并用 stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret); 构建事件;失败时拒绝该请求。 第 6 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  5. 高 客户 ID 被直接插入 SQL 语句。诸如 ' OR 1=1 --\ 这样的值可以操纵 WHERE 子句并将所有用户设为免费计划;取决于数据库配置,还可能进行进一步的 SQL 注入。 修复: 完全参数化查询:UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\ 配合 \[event.data.object.customer\]\。此外,通过 Stripe 签名对事件进行身份验证。 第 19 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  6. 高 没有幂等性检查。Stripe 至少投递一次 webhook,并在超时或出错时重试。因此同一个 invoice.paid\ 事件可能多次创建相同的支付条目。 修复: 在支付记录中存储 Stripe 事件 ID 或发票 ID,用 UNIQUE 约束加以保护,并将事件处理与支付作为插入/更新插入原子地一起执行。对已处理的事件以 200 确认,而不重复业务操作。 第 14 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  7. 高 async\ 处理程序没有错误转发。Express 4 不会自动捕获异步路由处理程序中被拒绝的 promise。因此,数据库错误或不完整的 invoice.paid\ 对象会导致未处理的 promise 拒绝,并且在 Node 20 下可能终止进程,而不是以受控方式返回错误响应。 修复: 将处理程序包装在 try/catch\ 中,并将错误传递给 next(err)\,或使用异步包装器。在访问输入结构之前先验证它,并在临时处理错误时以受控方式返回 5xx 状态,以便 Stripe 重新投递。 第 6 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  8. 高 对 webhook 端点使用 express.json() 会预先将请求体解析为 JSON。然而,Stripe 的签名验证需要未经修改的原始请求体。 修复: 对于 Stripe webhook 路由处理程序,使用 express.raw({ type: 'application/json' }) 而不是 express.json()。 第 6 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  9. 中 用户更新和支付条目是两个独立提交的数据库操作。如果 INSERT 在成功的 UPDATE 之后失败,用户会获得 Pro 计划,即使不存在相应的支付记录。 修复: 在同一客户端的单个数据库事务中,将两个操作与幂等标记一起执行,并在任何错误时完全回滚。 第 12 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  10. 中 处理过程未考虑 Stripe 可能按创建顺序之外的方式投递事件。延迟的较旧 invoice.paid\ 可能重置 paid\_until\;延迟的 customer.subscription.deleted\ 可能将此后已重新激活的用户重新设为 free\。 修复: 使用稳定的 Stripe ID 核对当前订阅状态,例如从 Stripe 获取,并持久化状态转换或最后处理事件的时间戳。至少应只向前更新 paid\_until\,并且不要盲目地将删除事件应用于当前用户状态。 第 12 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  11. 中 amount\_paid / 100\ 未经检查就假定货币恰好有两位小数。例如对 JPY 而言这是错误的。此外,货币未与金额一起存储,因此支付记录中的金额没有明确的单位。 修复: 最好以最小货币单位原样存储金额,并同时存储 invoice.currency\。如果需要主要货币单位,则根据相应货币的指数进行转换。 第 15 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  12. 中 异步 Express 4 路由中缺少异常处理。在数据库错误或字段缺失时,这会导致未处理的 promise 拒绝,可能使应用程序崩溃。 修复: 添加 try-catch 块并将错误传递给 next(err),或使用 express-async-handler 之类的工具。 第 6 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  13. 中 未验证 invoice.metadata.userId 是否存在。如果 metadata 或 userId 字段缺失或未定义,SQL 查询会失败或对无效值进行操作。 修复: 在执行数据库查询之前,明确检查 invoice.metadata 和 invoice.metadata.userId 是否存在且有效。 第 10 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  14. 中 Stripe 会重试 webhook,并可能多次投递同一事件。每次投递都会插入另一条支付记录,因此收入报告会重复计算。 修复: 存储 event.id(或发票 id)并加上唯一约束,跳过已处理的事件。 第 14 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认

让 Kirat 审查这个 WooCommerce 导入插件的安全性和正确性。

kirat_review 向委员会提问

Kirat 发现了 21 个已确认问题(5 个严重、5 个高、10 个中、1 个低)。每条发现都由另一模型家族交叉核查。

从列表顶部的条目开始处理;每条都附有建议的修复方案。

幕后

kirat_review Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_REVIEW · 努力层级:标准 · 21 个已确认,0 个被拒绝 · $0.17

重点: WooCommerce 导入插件的安全性和正确性

发送的代码:

<?php
// erp-import.php — custom plugin: imports the ERP's CSV export into WooCommerce (WordPress 6, WooCommerce 9)
add_action('wp_ajax_erp_import', 'erp_import');
add_action('wp_ajax_nopriv_erp_import', 'erp_import');

function erp_import() {
    global $wpdb;
    $path = $_POST['file'];
    $rows = array_map('str_getcsv', file($path));

    foreach ($rows as $row) {
        [$sku, $name, $price, $stock] = $row;
        $id = $wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = '$sku'");
        if (!$id) continue;
        update_post_meta($id, '_price', $price);
        update_post_meta($id, '_regular_price', $price);
        update_post_meta($id, '_stock', $stock);
        wp_update_post(['ID' => $id, 'post_title' => $name]);
    }
    echo 'Imported ' . count($rows) . ' rows';
    wp_die();
}

委员会的结果

  1. 严重 该导入可通过 wp\_ajax\_nopriv\_erp\_import\ 公开访问;认证钩子也缺少能力检查和 nonce 检查。因此,匿名用户或 CSRF 攻击可以更改产品名称、价格和库存水平。 修复: 移除 nopriv\ 钩子,在任何处理之前检查合适的能力(例如 manage\_woocommerce\),并使用 check\_ajax\_referer()\ 保护请求。 第 3 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  2. 严重 钩子 wp_ajax_nopriv_erp_import 允许未认证的访客访问导入功能。 修复: 移除 nopriv 钩子,并使用 current_user_can('manage_options') 检查权限。 第 4 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  3. 严重 来自 $_POST['file'] 的文件路径未经检查就传递给 file(),这会导致路径遍历和任意文件读取(LFI)。 修复: 通过 $_FILES 处理文件上传,或严格根据允许的目录(例如 wp_upload_dir())验证输入路径。 第 7 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  4. 严重 存在 SQL 注入漏洞,因为 $sku 未经清理就直接插入 SQL 查询。 修复: 使用 $wpdb->prepare() 的预处理语句。 第 11 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  5. 严重 该导入注册为 wp_ajax_nopriv,并且没有能力检查,也没有 nonce。任何访客都可以触发它并覆盖价格、库存和产品名称。 修复: 移除 nopriv 钩子,检查 current_user_can('manage_woocommerce'),并在执行任何操作之前使用 check_ajax_referer() 验证 nonce。 第 4 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  6. 高 客户端提供的路径未经检查就传递给 file()\。这允许处理任何可读的本地文件,并且——取决于 allow\_url\_fopen\——还可以处理外部或内部 URL,从而导致不必要的文件访问和盲 SSRF。 修复: 不要接受自由选择的路径。仅使用服务器端已知的上传 ID,根据固定的导入目录检查规范路径,并仅允许常规的本地 CSV 文件。 第 8 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  7. 高 $sku\ 来自 CSV,并被直接插入 SQL。包含 SQL 元字符的 SKU 值可以操纵查询,并且除其他事项外,还可以选择任意文章 ID 作为更新目标。 修复: 使用 $wpdb-\>prepare()\ 对查询进行参数化,例如使用 meta\_value = %s\,或使用 WooCommerce 函数按 SKU 查找产品。 第 13 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  8. 高 file()\ 将整个输入加载到内存中,而 array\_map()\ 还会创建完整的解析数组。如果没有大小限制,大型或无休止的远程资源可能会耗尽内存、运行时间和 PHP 工作进程;公开可访问性使情况更糟。 修复: 限制文件大小和行数,使用 fopen()\ 在本地打开文件,并通过 fgetcsv()\ 以流式方式处理记录。此外,使用速率限制或受控的后台任务。 第 9 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  9. 高 缺少 CSRF 保护(nonce 验证)。 修复: 在函数开头调用 check_ajax_referer()。 第 6 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  10. 高 文件路径直接来自请求并传递给 file()。攻击者可以读取 Web 服务器可读取的任何文件,或者在 allow_url_fopen 开启时读取远程 URL。 修复: 通过 wp_handle_upload() 接受上传的文件,或仅从一个固定的导入目录读取;绝不要从请求中获取路径。 第 8 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  11. 中 假设每一行都恰好有四个可用列。空行或损坏的行会产生缺失值,从而产生警告,并可能无意中将名称、价格或库存设置为空值。 修复: 在解构之前,检查列数和必需字段,跳过空行,并以清晰的错误消息拒绝有问题的记录。 第 12 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  12. 中 file()\ 和 str\_getcsv()\ 的组合会分别解析每个物理行。因此,包含嵌入换行符的有效 CSV 字段会被拆分为多个有问题的记录。 修复: 使用 fgetcsv()\ 将 CSV 作为流读取;此函数可以跨记录边界正确处理多行、正确引用的字段。 第 9 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  13. 中 价格和库存未经检查地存储为任意字符串。非数值、错误的小数格式或不允许的库存水平可能会损坏产品数据并导致计算不一致。 修复: 在写入之前验证价格和库存,并使用 WooCommerce 辅助函数(例如 wc\_format\_decimal()\ 和 wc\_stock\_amount()\)对其进行规范化;拒绝无效或从业务角度不允许的值。 第 15 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  14. 中 WooCommerce 数据直接作为文章元数据更改。因此,相关状态(例如 \_stock\_status\)、产品查找表以及可能的缓存无法可靠地与新的价格和库存水平同步。 修复: 通过 wc\_get\_product()\ 加载产品,使用 CRUD 方法(例如 set\_regular\_price()\、set\_price()\ 和 set\_stock\_quantity()\),根据业务规则设置库存状态或 manage\_stock\,然后调用 save()\。 第 15 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  15. 中 SKU 查找会考虑所有文章元数据,既不检查文章类型,也不检查找到的 ID 是否实际上是 WooCommerce 产品或变体。对于重复或不相关的 \_sku\ 元数据,还会更新非确定性的匹配项。 修复: 使用 wc\_get\_product\_id\_by\_sku()\,然后使用 wc\_get\_product()\ 和预期的产品类型验证结果;将重复的 SKU 视为导入错误。 第 13 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  16. 中 update\_post\_meta()\ 和 wp\_update\_post()\ 的返回值被忽略。导入可能部分失败或中止,但仍将读取的总行数报告为成功导入。 修复: 记录每个产品的成功和失败,使用 wp\_update\_post(..., true)\,仅统计实际更新的记录,并返回结构化的错误响应。为大型导入提供可恢复的后台任务。 第 15 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  17. 中 对于每一行 CSV,至少会同步执行一次查找查询和多次单独的写入操作。因此,大型导入会导致大量数据库往返,可能遇到请求超时,并留下仅部分更新的目录。 修复: 将导入作为后台进程以有限批次运行,集中解析 SKU,并存储进度和恢复状态。 第 11 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  18. 中 file() 一次性将整个文件读入内存,这会导致大型 CSV 文件出现内存耗尽错误。 修复: 通过 fopen() 和 fgetcsv() 逐行流式读取文件。 第 8 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  19. 中 数组解构假设每一行至少包含 4 个元素;否则会出现 PHP 警告或未初始化索引错误。 修复: 在解包之前,使用 count($row) 检查是否存在足够的列。 第 10 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  20. 中 数据库查询和文章更新在循环中逐个执行(N+1 问题),这会显著降低执行速度。 修复: 将导入拆分为批次,并捆绑查询/更新。 第 11 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  21. 低 file()\ 的错误未被检查。对于缺失、不可读或不支持的路径,file()\ 会返回 false\,于是 array\_map()\ 在当前 PHP 版本下可能抛出 TypeError\。 修复: 显式检查打开和读取,不要将 PHP 警告用作控制流,并在出错时返回适当的 HTTP 或 wp\_send\_json\_error()\ 响应。 第 9 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认

让 Kirat 审查面包店订购页面的订单和支付流程的安全性和正确性。

kirat_review 询问了委员会

Kirat 发现了 14 个已确认问题(4 个严重、4 个高、5 个中、1 个低)。每个发现都由另一个模型系列进行了交叉检查。

从列表顶部的问题开始;每个都附有建议的修复方案。

幕后

kirat_review Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_REVIEW · 投入:标准 · 14 个已确认,0 个已拒绝 · $0.11

重点: 订单和支付流程的安全性和正确性

发送的代码:

// routes/order.js — order endpoint of the bakery's ordering page (Node 20, Express 4, pg)
const express = require('express');
const { pool } = require('../db');
const { sendConfirmation } = require('../mail');
const router = express.Router();

router.post('/order', async (req, res) => {
  const { cakeId, pickupDate, name, email, price, note } = req.body;

  const cake = await pool.query(\`SELECT * FROM cakes WHERE id = ${cakeId}\`);
  if (!cake.rows.length) return res.status(404).send('Unknown cake');

  const order = await pool.query(
    'INSERT INTO orders (cake_id, pickup_date, name, email, amount, note) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id',
    [cakeId, pickupDate, name, email, price, note]
  );

  sendConfirmation(email, order.rows[0].id);
  res.redirect(\`/pay?order=${order.rows[0].id}&amount=${price}\`);
});

module.exports = router;

委员会的结果

  1. 严重 cakeId 被直接插值到 SQL 字符串中。攻击者可以注入 SQL 表达式或附加语句,从而读取或修改数据,或对数据库造成负载。 修复: 同样对此查询进行参数化,例如 SELECT... FROM cakes WHERE id = $1\ 配合 \[cakeId\]\,并额外检查 cakeId 是否为预期类型。 第 10 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  2. 严重 由于 cakeId 在 SQL 查询中被直接进行模板字符串插值,存在 SQL 注入漏洞。 修复: 使用参数化 SQL 查询:pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId])。 第 9 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  3. 严重 存在客户端价格篡改风险。价格取自 req.body 并被直接存储和处理。 修复: 在服务端从数据库读取价格(cake.rows[0].price),不要信任客户端发送的值。 第 8 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  4. 严重 来自请求体的 cakeId 被插值到 SQL 字符串中:SQL 注入。 修复: 使用参数化查询:SELECT * FROM cakes WHERE id = $1。 第 10 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  5. 高 被存储并传递给支付流程的金额完全来自 req.body.price\。客户可以为任意蛋糕输入被篡改的、负数或极小的金额。 修复: 仅在服务端根据所选蛋糕或不可变的价格版本确定价格。在支付服务商处使用该金额创建服务端支付会话,并在支付确认时再次在服务端验证预期金额。 第 16 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  6. 高 在任何成功支付被验证之前,订单就被创建并发送了确认。因此,被中止或故意未支付的交易会显示为已确认订单,并且可以被随意生成。 修复: 初始创建订单时使用诸如 pending\_payment\ 的状态。只有在收到经过身份验证、幂等处理的支付服务商通知后,才切换为 paid\,然后再发送确认或触发生产或预留。 第 19 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  7. 高 异步 Express 4 路由中缺少错误处理。数据库或运行时错误会导致未处理的 Promise 拒绝。 修复: 使用 try/catch 块并通过 next(err) 转发错误,或使用 express-async-errors 之类的包。 第 8 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  8. 高 金额取自客户端(请求体中的价格),因此客户可以自行设定价格。 修复: 在服务端从 cakes 行读取价格,并忽略任何客户端值。 第 15 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  9. 中 该异步处理程序没有错误转发。Express 4 不会自动处理 async\ 处理程序中被拒绝的 Promise;因此数据库或同步邮件错误可能导致请求得不到响应以及未处理的拒绝。 修复: 将处理程序包裹在 try/catch\ 中,并将错误传递给 next(err)\,或使用成熟的异步包装器。此外,配置集中式错误处理。 第 7 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  10. 中 sendConfirmation\ 的结果既未被 await,也未以其他方式处理错误。Promise 拒绝可能保持未处理;同时,即使邮件发送可能已失败,客户端仍会收到成功响应。 修复: 在确认支付后,通过带重试的持久化发件箱或作业队列执行发送。至少应 await 该 Promise,并以受控方式记录或处理错误。 第 19 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  11. 中 没有幂等性保护。浏览器重试、双击或网络重试都会各自创建新订单,并可能产生多次确认或支付尝试。 修复: 接受幂等键或结账会话 ID,用唯一约束加以保护,并在重试时返回已存在的订单。 第 13 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  12. 中 pickupDate、name、email、price 和 note 未经业务或语法验证即被处理。这意味着,例如过去或无效的取货日期、缺失的客户数据和不合适的字段值都可能被存储;数据库错误也只会延迟且以不受控的方式出现。 修复: 使用包含类型、必填字段、长度限制和规范化格式的请求模式。根据时区、提前期和允许的营业时间或容量规则检查取货日期;不要接受价格作为客户端输入。 第 8 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  13. 中 对 sendConfirmation 的异步调用既未被 await,也未被捕获错误。 修复: 在 sendConfirmation 前加上 await,并在发送邮件时处理可能的错误。 第 17 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  14. 低 对 email、pickupDate、name 和 note 等字段的输入验证不完整。 修复: 在处理请求数据之前实施模式验证(例如使用 Zod 或 express-validator)。 第 8 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认

让 Kirat 检查此计费函数的正确性和数据完整性。

kirat_review 向委员会提问

Kirat 发现了 16 个已确认问题(1 个严重、11 个高、3 个中、1 个低)。每个发现都由另一模型系列进行了交叉核对。

从列表顶部的问题开始处理;每个问题都附有建议的修复方案。

幕后

kirat_review Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_REVIEW · 投入:标准 · 16 个已确认,0 个被拒绝 · $0.14

重点: 计费函数的正确性和数据完整性

发送的代码:

// billing/applyCredit.ts — billing module in the monolith (TypeScript, node-postgres)
import { pool } from '../db';

export async function applyCredit(customerId: string, invoiceId: string, creditCents: number) {
  const inv = await pool.query('SELECT total_cents, status FROM invoices WHERE id = $1', [invoiceId]);
  const balance = await pool.query('SELECT credit_cents FROM customers WHERE id = $1', [customerId]);

  const available = balance.rows[0].credit_cents;
  if (creditCents > available) throw new Error('Not enough credit');

  const newTotal = inv.rows[0].total_cents - creditCents;
  await pool.query('UPDATE invoices SET total_cents = $1 WHERE id = $2', [newTotal, invoiceId]);
  await pool.query('UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2', [creditCents, customerId]);

  if (newTotal <= 0) {
    await pool.query("UPDATE invoices SET status = 'paid' WHERE id = $1", [invoiceId]);
  }
  return newTotal * 1.19 / 100;
}

委员会的结果

  1. 严重 缺少数据库事务和行锁。在并行请求下,可能出现竞态条件(例如信用额度被重复扣减)以及发生错误时更新不完整。 修复: 使用连接池中的客户端,配合 BEGIN/COMMIT,并使用 SELECT FOR UPDATE 以原子方式锁定和更新行。 第 5 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  2. 高 三个相关更新未在数据库事务中执行。如果扣减客户信用额度或状态变更失败,发票可能已经被减少,而信用额度并未被正确扣减,或状态并未被设置。 修复: 从连接池获取专用客户端,在 BEGIN 和 COMMIT 之间执行所有检查和更新;任何错误时使用 ROLLBACK。 第 11 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  3. 高 发票先被读取,随后被一个绝对计算值覆盖。两个并行调用可能读取相同的起始值,然后互相覆盖;两次信用额度扣减仍然都会发生,而发票中只有一笔信用额度完全可见。 修复: 在同一事务内使用 SELECT... FOR UPDATE 锁定受影响的发票,或通过 UPDATE... SET total_cents = total_cents - $1 在适当条件下原子地更改金额。 第 4 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  4. 高 检查客户信用额度和扣减信用额度不是原子操作。并行调用可能都看到相同的可用额度,然后将信用额度降至零以下。 修复: 以事务方式锁定客户记录,或使用条件 UPDATE,例如 UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents,并要求恰好返回一行。 第 8 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  5. 高 未检查发票是否属于指定的客户。因此,客户的信用额度可能被应用到通过 invoiceId 标识的任意发票上。 修复: 通过所有权关系查询和更新发票与客户,例如使用 WHERE invoices.id = $1 AND invoices.customer_id = $2;如果没有匹配项则中止。 第 4 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  6. 高 要应用的信用额度未以未结发票金额为上限。如果 creditCents 大于 total_cents,则会存储负数发票金额,并消耗多余的客户信用额度。 修复: 仅允许不超过未结发票金额的数值,或将实际使用的金额确定为 min(creditCents, total_cents),并仅从客户信用额度中扣减该金额。 第 10 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  7. 高 负数、非整数或无法安全表示的值未被拒绝。特别是,负的 creditCents 值会增加发票金额,同时通过减去负值也会增加客户信用额度。 修复: 在任何数据库访问之前要求 Number.isSafeInteger(creditCents) && creditCents > 0;将货币金额一致地视为整数分值。 第 8 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  8. 高 读取到的发票状态被完全忽略。因此,信用额度也可能被应用到已支付、已取消或不再可修改的发票上;已支付的发票可能因此变为负数。 修复: 明确定义允许的起始状态,并在 UPDATE 条件中原子地检查它们,例如 AND status = 'open'。如果没有匹配项,则中止操作。 第 4 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  9. 高 在未事先检查的情况下访问 balance.rows[0] 和 inv.rows[0]。如果未找到客户或发票,应用程序会因未处理的 TypeError 而崩溃。 修复: 在访问之前检查 inv.rows.length 和 balance.rows.length,并抛出明确的错误消息。 第 8 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  10. 高 缺少对 creditCents 负值的验证。负值会绕过检查(creditCents > available),并导致错误的信用额度或发票调整。 修复: 确保 creditCents 是大于 0 的正整数。 第 9 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  11. 高 读取操作和三个更新在事务之外运行,且没有行锁。两个并发调用可能都通过信用额度检查并重复使用同一笔信用额度,而更新之间的崩溃会使发票和信用额度余额不一致。 修复: 在单个客户端上的一个事务中运行所有操作,使用 SELECT... FOR UPDATE 锁定行,并且仅在所有更新成功后提交。 第 5 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  12. 高 该函数从不检查发票是否属于该客户,或是否仍处于未结状态。一个客户的信用额度可能被应用到另一个客户的发票上,或应用到已支付的发票上。 修复: 使用 WHERE id = $1 AND customer_id = $2 AND status = 'open' 选择发票,如果没有返回行则失败。 第 11 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  13. 中 未检查发票和客户是否存在。对于未知 ID,访问 rows[0] 会导致运行时错误,而不是受控的业务错误;此外,在问题显现之前,两个查询都被不必要地执行了。 修复: 检查两个查询的 rowCount 或 rows.length,并抛出已定义的未找到错误;将检查集成到事务中,并在可能的情况下集成到关系查询中。 第 4 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  14. 中 返回值既不等于存储的分值,也不等于简单转换为主货币的值:它统一加上 19%,并使用浮点运算。因此,调用方可能收到一个在税费和舍入方面与实际存储的剩余发票余额不同的值。 修复: 原样返回以分为单位的剩余金额,或定义明确类型的返回值。如果出于业务原因需要计算税费,则从发票数据中获取税率和舍入规则,并使用整数或十进制运算进行计算。 第 17 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  15. 中 在财务计算中使用 IEEE 754 浮点运算(newTotal * 1.19 / 100)。这会导致精度和舍入错误。 修复: 使用整数(BigInt/Math.round)以分为单位一致地计算,或使用精确十进制运算库。 第 18 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  16. 低 为发票状态使用单独的 UPDATE 命令会导致不必要的数据库往返。 修复: 将 total_cents 和状态的更新合并为单个 UPDATE 查询。 第 12 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认

让 Kirat 检查我们系统综述的筛选分析脚本是否正确。

kirat_review 向委员会提问

Kirat 发现了 11 个已确认问题(6 个高、4 个中、1 个低)。每个发现都由另一个模型系列进行了交叉检查。

从列表顶部开始处理;每个都附有建议的修复方案。

幕后

kirat_review Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_REVIEW · 投入:标准 · 11 个已确认,0 个被拒绝 · $0.09

重点: 系统综述筛选分析的正确性

发送的代码:

# screening/agreement.py — compares two screeners' include/exclude decisions (Python 3.12, pandas)
import pandas as pd

a = pd.read_csv('screener_a.csv')   # columns: record_id, decision ('include'/'exclude')
b = pd.read_csv('screener_b.csv')

merged = a.merge(b, on='record_id', suffixes=('_a', '_b'))

agree = (merged.decision_a == merged.decision_b).mean()
p_inc_a = (merged.decision_a == 'include').mean()
p_inc_b = (merged.decision_b == 'include').mean()
expected = p_inc_a * p_inc_b + (1 - p_inc_a) * (1 - p_inc_b)
kappa = (agree - expected) / (1 - expected)

conflicts = merged[merged.decision_a != merged.decision_b]
excluded = merged[merged.decision_a == 'exclude']

print(f'Records screened: {len(a)}')
print(f"Cohen's kappa: {kappa:.2f}")
excluded.record_id.to_csv('excluded.csv', index=False)
conflicts.to_csv('conflicts.csv', index=False)

委员会的结果

  1. 高 默认的内连接会移除只出现在两个文件之一中的所有 record_id 值。因此,Kappa 和冲突仅针对交集计算,无法让缺失的筛选记录显现出来。同时,第 18 行的“Records screened”报告的是 a 的长度,而不是实际分析的记录交集。 修复: 使用带合并指示符的外连接,显式比较 ID 集合,并单独报告缺失的判定,或将其视为数据错误。对每个指标,输出实际使用的分母。 第 7 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  2. 高 未检查 record_id 的唯一性。重复的 ID 会在合并期间导致多对多笛卡尔积,并使个别研究被多次加权,从而扭曲一致性、患病率、kappa 和输出文件。 修复: 在合并之前,检查两个文件中的 record_id 是否非空且唯一,并在出现重复时中止。此外,使用 merge(..., validate='one_to_one')。 第 7 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  3. 高 未验证判定值。在计算纳入患病率时,缺失值、拼写错误、大小写或额外类别会被隐式当作“排除”处理,而观察一致性比较的是精确值。因此,该计算不再对应于二分类 Cohen's kappa,并可能产生相互矛盾的结果。 修复: 在分析前以受控方式规范化 decision,并确保每个值都恰好是 'include' 或 'exclude'。将缺失或未知值单独作为数据错误或不完整筛选处理。 第 9 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  4. 高 excluded 包含筛选者 A 排除的所有记录,包括筛选者 B 判定为“纳入”的冲突记录。因此,此类记录会同时写入 excluded.csv 和 conflicts.csv。如果 excluded.csv 旨在表示最终被排除的命中记录,则未解决的冲突可能会被错误地从综述中移除。 修复: 在没有已记录的优先级规则的情况下,仅选择匹配的排除项,即 (decision_a == 'exclude') & (decision_b == 'exclude')。在达成共识决定之前,将冲突仅保留在 conflicts.csv 中。 第 16 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  5. 高 对被排除研究的过滤不正确:'excluded' 仅考虑筛选者 A 的判定('merged.decision_a == "exclude"')。如果存在冲突(筛选者 A 排除,筛选者 B 纳入),该研究会被错误地计为已排除。 修复: 仅当两位筛选者都一致选择 'exclude' 时才导出排除项(例如 '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'),或等待冲突解决。 第 16 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  6. 高 excluded.csv 包含筛选者 A 排除的每一条记录,包括筛选者 B 将其纳入的冲突记录。这些记录在冲突讨论之前就被丢弃,而这正是方案必须避免的错误排除。 修复: 仅排除两位筛选者都排除的记录:merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')];先将每个冲突送去解决。 第 16 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  7. 中 如果两位筛选者仅使用同一类别,expected 等于 1,kappa 的分母等于 0。结果会变为 NaN,或产生除零警告;格式化输出“nan”并未说明 kappa 在数学上未定义。分析交集为空也会导致无意义的 NaN 指标。 修复: 在除法之前,检查是否存在任何成对的有效判定,以及 1 - expected 是否大于 0。在退化情况下,明确将 kappa 报告为“未定义”,并报告底层频率。 第 13 行 · 由 gpt-5.6 发现 · 由 gemini-3.6-flash 确认
  8. 中 如果期望机会值 'expected' 等于 1(例如两位筛选者对 100% 的记录都选择同一类别),Cohen's kappa 中可能发生除零。 修复: 在计算之前,捕获 '1 - expected == 0' 的情况,并在该情况下赋予一个已定义的值(例如 1.0 或 NaN)。 第 12 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  9. 中 默认内连接会静默丢弃记录。如果筛选者 A 和筛选者 B 评定了不同的 'record_id' 集合,已处理研究中的差异不会被报告。此外,控制台输出中的 'len(a)' 随后与真正匹配的研究数量不一致。 修复: 检查 'len(a) == len(b) == len(merged)' 是否成立,或执行外连接以显式显示未完整评定的记录。 第 7 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认
  10. 中 内连接会静默丢弃仅由一位筛选者判定的记录,而打印的计数使用 len(a)。未筛选的记录会同时从一致性结果和 PRISMA 数字中消失。 修复: 使用 how='outer'、indicator=True 进行合并,并在任何记录缺少任一筛选者的判定时失败或报告。 第 7 行 · 由 claude 发现 · 由 gpt-5.6、gemini-3.6-flash 确认
  11. 低 缺少输入清理以及对 'decision' 列中缺失值的处理。大小写、空白或 NaN 值会导致比较不正确。 修复: 在比较之前清理列值(例如使用 '.str.strip().str.lower()'),并确保数据类型安全。 第 9 行 · 由 gemini-3.6-flash 发现 · 由 gpt-5.6 确认

展示:每条已确认的发现及其修复,按成员所写;验证者的推理缩短为他们的结论。重复项未合并,因此当多个成员报告同一问题时,一个问题可能出现多次。代码、焦点和 Claude 自己的发现以英文发送;成员用德文写成的发现在此翻译。

来自不同领域的五份创意简报。ChatGPT 和 Gemini 分三条轨道工作,Claude 增加一个想法,两位成员对每个想法匿名评分(各 1–10 分,最高 20 分)。选一个。

我的两篇博客文章在 Google 上排名,但很少有读者开始试用。与 Kirat 一起头脑风暴想法。

kirat_brainstorm 询问了委员会

委员会提出了 14 个想法,并对每个想法匿名评分。前三名:

  1. 用三次真实发送取代 14 天倒计时(18/20 分)
  2. 在文章内完成任务(17/20 分)
  3. 将催款文章变成恢复控制台(17/20 分)

幕后

kirat_brainstorm Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_BRAINSTORM · 投入:标准 · 14 个想法 · 1 轮 · $0.11

主题: 为独立开发者提供想法,将两篇在 Google 上排名的博客文章的更多读者转化为面向自由职业者的开票工具的试用注册

发送的上下文: 面向自由职业者的开票工具,每月 19 美元,14 天免费试用,5 个月后有 30 位付费客户。注册主要来自两篇在 Google 上排名的博客文章(如何撰写自由职业发票;如何催收逾期付款)。约 12% 的试用会转化。开发者有一份日常工作,每周约有 10 小时用于产品。硬性要求:不做付费广告。硬性要求:每周最多 3 小时用于此事。

委员会的结果

  1. 1 用三次真实发送替代 14 天计时 gpt-5.6 · 打破规则 · 18/20 分(9 + 9) 测试一种在三次已发送发票或付款催收后结束、而非在 14 个日历日后结束的试用。这有意打破“限时试用是合适的”这一软假设:自由职业者未必会在任意两周窗口内开票,因此当前试用可能在产品证明其价值之前就到期。保持每月 19 美元方案不变,并按队列比较激活到付费的转化率。
  2. 2 在文章内完成任务 gpt-5.6 · 符合简报 · 17/20 分(9 + 8) 在“如何撰写自由职业发票”中嵌入一个微型发票生成器:读者输入客户、金额、到期日和付款条款,然后看到完成的预览。“发送或保存此发票”会创建一个已预填这些详细信息的试用,消除学习与行动之间的差距。以每周不超过三小时的切片构建,然后保持维护接近零。
  3. 3 将催收文章变成恢复控制台 gpt-5.6 · 邻近方案 · 17/20 分(9 + 8) 作为嵌入式发票生成器的一步替代方案,让读者输入逾期金额和到期日,生成带日期的三条消息催收序列。开始试用会保存债务人、安排消息,并打开第一份可发送的草稿。这保留了最强的模式——注册前提供有用输出——同时匹配第二篇文章的意图。
  4. 4 将转化时刻放到债务人的日历上 gpt-5.6 · 符合简报 · 16/20 分(7 + 9) 在逾期付款文章中提供生成的 .ics 文件,包含到期日提醒以及第 1、7、14 天的升级跟进。每个日历事件包含一个深度链接,打开相关催收工作流并预填日期,在痛点真实发生时把读者带回,而不是在他们仅仅研究时。它不需要收集电子邮件,且可无人值守运行。
  5. 5 为一个客户提供永久免费方案,而非试用期 gemini-3.6-flash · 打破规则 · 16/20 分(8 + 8) 这个想法打破了 14 天试用的软约束,取而代之的是恰好一个活跃客户的免费增值方案。自由职业者可以永久免费为第一个客户使用该产品,并在添加第二个客户时无缝升级到 19 美元统一费率。
  6. 6 按眼前问题引导读者 gpt-5.6 · 符合简报 · 14/20 分(8 + 6) 用三个内联选项替代通用试用横幅,例如“我需要我的第一张发票”“我反复开票”和“客户已经逾期”。每个选项打开匹配的引导状态,而不是同一个主页,文章章节 ID 可以预选合理默认值。衡量完成的试用激活,而不仅仅是 CTA 点击,并每周测试一条路径。
  7. 7 发布三个取证式发票改造案例 gpt-5.6 · 符合简报 · 14/20 分(8 + 6) 在获得许可的情况下,将三张匿名化客户发票转化为静态前后对比案例研究,准确展示改变了什么以及为什么。将每个改造案例插入排名文章中相关建议旁边,并附上一个 CTA,打开与可编辑试用模板相同的修正结构。来自小客户群的具体证据可能比宽泛的推荐更有说服力。
  8. 8 让读者在两篇文章之间携带进度 gpt-5.6 · 符合简报 · 14/20 分(7 + 7) 在浏览器本地存储读者选择的货币、发票阶段和到期日,然后在他们于两篇文章之间移动时使用该状态。创建过发票计划的人之后可以看到上下文提示,例如“你的发票现已逾期 3 天——打开准备好的跟进”,并预填试用引导。这创造了一个轻量的两篇文章旅程,无需账户或持续内容生产。
  9. 9 交互式提醒信配置器 gemini-3.6-flash · 符合简报 · 14/20 分(7 + 7) 在关于跟进逾期付款的文章中添加一个升级付款提醒信生成器。输入文本后,生成模板,并结合 CTA,在试用账户中为未来发票设置自动付款提醒。
  10. 10 无需预先注册的即时发送魔法链接 gemini-3.6-flash · 邻近方案 · 14/20 分(8 + 6) 内容内生成器的变体:读者直接在博客文章中输入发票详细信息,并点击“立即发送发票”。在后台,系统无缝创建试用账户并直接发送电子邮件;密码仅在之后设置。
  11. 11 直接在博客文章中的实时发票生成器 gemini-3.6-flash · 符合简报 · 13/20 分(6 + 7) 在关于撰写发票的文章中直接嵌入一个简单的交互式表单工具。读者输入发票详细信息,并可立即免费下载完成的 PDF。一个醒目的按钮提供一键数字发送发票,并在 14 天试用账户中跟踪付款状态。
  12. 12 一次性按使用付费提醒,而非月度订阅 gemini-3.6-flash · 打破规则 · 13/20 分(6 + 7) 这个想法打破了每月 19 美元纯 SaaS 订阅模式的软约束。对于 5 美元的一次性费用,逾期付款文章的读者可以发送一封法律上可靠的提醒信,包括跟踪链接;如果他们之后订阅,该费用将全额抵扣。
  13. 13 在工具中打开的模板 claude · 符合简报 · 11/20 分(6 + 5) 将文章中的发票模板作为工具中的即用型发票提供:一键打开预填的试用账户,而不是下载文件。
  14. 14 针对具体问题的退出意图与自动电子邮件序列 gemini-3.6-flash · 符合简报 · 8/20 分(4 + 4) 在逾期付款文章上实现退出意图弹窗,以电子邮件地址为交换,提供针对逾期付款客户的紧急电子邮件模板。随后一个自动三部分电子邮件序列被动解释自动化工作流如何减少逾期付款,并链接到试用账户。

与 Kirat 一起头脑风暴:我们如何将这次一次性商店重建转变为客户真正想要的护理计划?

kirat_brainstorm 询问了委员会

委员会提出了 15 个想法,并对每个想法进行了匿名评分。前三名:

  1. 预算突破:运营优先于发布光鲜(18/20 分)
  2. CSV 产品守门员(17/20 分)
  3. 可靠性红利(17/20 分)

幕后

kirat_brainstorm Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_BRAINSTORM · 投入:标准 · 15 个想法 · 1 轮 · $0.10

主题: 一家小型数字代理机构如何将一次性商店重建转变为客户真正想要的经常性护理服务合同的想法

发送的上下文: 4 人代理机构。客户在德国、奥地利和瑞士销售约 1,800 种家具产品,有 3 名员工且没有内部开发人员,年收入约 120 万欧元。旧的自托管 WooCommerce 商店有 31 个插件,去年发生两次安全事件;客户希望降低维护和减少紧急情况。本地 ERP 将产品数据导出为 CSV。重建预算:25,000 欧元。硬性要求:无锁定;客户必须能够随时带着所有数据和访问权限离开。硬性要求:代理机构不额外招聘。

委员会的结果

  1. 1 预算突破:上线前的运营成本说明 gpt-5.6 · 规则突破 · 18/20 分(9 + 9) 这个方案有意打破 25,000 欧元重建预算的软性约束:例如,报价为 22,000 欧元用于一次刻意精简的上线,另加 12,000 欧元用于有约束力的第一年运营。作为交换,初始项目中舍弃锦上添花的功能;转而资助导入加固、恢复演练、监控和每月改进。更高的总金额之所以划算,是因为客户不再是一次性购买一个看似完工、真实运营成本却要等到上线后才显现的商店;所有访问凭证、数据和工作成果始终可随时转移。
  2. 2 CSV 产品守门员 gpt-5.6 · 符合任务要求 · 17/20 分(9 + 8) 在每次 ERP 导入之前,自动化流水线会检查 CSV 中缺失的价格、重复项、无效变体、图片错误、DACH 税务逻辑和可疑的库存变动。月度服务费涵盖规则维护、导入监控以及面向三名员工的可理解错误报告。这将技术维护转化为直接的业务收益:更少错误产品、更少后续追问和更少被放弃的购买。
  3. 3 可靠性红利 gpt-5.6 · 符合任务要求 · 17/20 分(8 + 9) 客户支付适度的基础费用用于监控和维护;只有当约定的可靠性目标(如成功导入、经过测试的恢复和响应时间)达成时,才会产生额外的季度费用。由代理机构造成的可避免停机将产生服务抵扣,而不是可计费的紧急工时。该模式使经济激励与预防保持一致,并消除客户对代理机构从问题中获利的担忧。
  4. 4 可随时退出的照护章程 gpt-5.6 · 符合任务要求 · 16/20 分(9 + 7) 该服务费被刻意作为反锁定产品出售:监控、更新、备份、安全检查以及每月两项小改动,费用约为 1,200–1,500 欧元。所有账户归客户持有,代码和导入脚本存放在客户的代码库中;客户每月还会收到文档、数据导出和交接包,使其可随时取消。这样,客户支付的是可证明的可操作性,而不是依赖关系。
  5. 5 季节性发布列车 gpt-5.6 · 符合任务要求 · 16/20 分(8 + 8) 不再有随意的支持工单,而是每年四次可规划的电商发布,例如针对花园家具、夏末、黑色星期五周和圣诞节。每次发布的服务费中包含一个小型 UX 或商品陈列包、回归测试以及其间的技术维护。这为客户带来可见的持续发展,并使四人代理机构的工作量可打包管理。
  6. 6 季度逃生测试 gpt-5.6 · 符合任务要求 · 16/20 分(9 + 7) 每季度,代理机构提供产品、客户、订单和内容数据的完整导出,并在中立的测试环境中执行有记录的重新启动。客户支付的恰恰是定期得到证明的退出能力:访问列表、恢复日志和交接手册归客户所有。因此,硬性的无锁定标准从异议转变为该服务费不同寻常的卖点。
  7. 7 照护章程加增长交换 gpt-5.6 · 邻近方案 · 16/20 分(8 + 8) 作为可随时退出的照护章程的小幅变体,包含的变更工时不是预先固定,而是每月在运营、数据质量和转化改进之间调配;未使用的额度最多可结转一个季度。一个联合的 30 分钟董事会根据风险和收入机会决定如何使用它们。该服务费保持可随时退出,但感觉不像保险,而更像一个灵活的外部数字团队。
  8. 8 ERP 同步与目录安全服务费 gemini-3.6-flash · 符合任务要求 · 13/20 分(7 + 6) 代理机构接管本地 ERP CSV 与在线商店之间接口的持续监控和维护。错误的数据导入、缺失的家具变体或错误的价格会在上线前被自动捕获。这完全免除了客户三人团队的数据维护运营负担。
  9. 9 AI 驱动的产品数据丰富统一费率 gemini-3.6-flash · 邻近方案 · 13/20 分(6 + 7) ERP 接口方案的变体:代理机构不仅维护 CSV 导入,还使用 AI 脚本自动用结构化属性、SEO 文案和 DACH 特定交货时间说明来丰富原始数据。这为客户节省了手动维护工作,并在不增加代理机构人员的情况下提高了家具市场中的可见度。
  10. 10 基于 CI/CD 的视觉回归维护合同 gemini-3.6-flash · 符合任务要求 · 12/20 分(6 + 6) 代理机构不进行有风险的实时更新,而是建立一个暂存流水线,自动对每月插件更新进行视觉和功能检查。客户每月收到透明度报告,并获得安全漏洞的保证响应时间。这保证了绝对稳定性,不再出现以往的紧急情况。
  11. 11 季度转化与 UX 打磨 gemini-3.6-flash · 符合任务要求 · 11/20 分(6 + 5) 除基础维护外,服务费还包括用于优化结账功能和家具变体展示的固定工时配额。代理机构每月分析 DACH 地区的用户行为,并实施高回报的调整。这将服务费从纯粹的成本因素转变为收入驱动因素。
  12. 12 安全更新与即时回滚保证 gemini-3.6-flash · 邻近方案 · 11/20 分(5 + 6) CI/CD 维护合同的变体:服务费纯粹聚焦于保证零停机 SLA,并在发生事件时于 15 分钟内自动快照恢复。这直接回应了客户在两次安全事件后的担忧,且持续手动工作量极小。
  13. 13 收入分成增长包而非固定预算 gemini-3.6-flash · 规则突破 · 9/20 分(4 + 5) 打破 25,000 欧元刚性一次性重建预算的软性假设:重建成本降至 10,000 欧元,并搭配月度服务费以及额外收入的一小部分分成。这之所以划算,是因为客户降低了投资风险,而代理机构直接参与这个 120 万欧元商店的增长。
  14. 14 无头架构照护服务 gemini-3.6-flash · 规则突破 · 7/20 分(3 + 4) 打破经典单体架构(如标准 WooCommerce)的软性约束:前端与后端解耦,因此插件安全漏洞不再能直接攻击网站。这之所以划算,是因为紧急情况被从结构上消除,且得益于开源技术栈和完整的 Git 访问权限,客户始终可迁移。
  15. 15 每月一页照护报告 claude · 符合任务要求 · 6/20 分(4 + 2) 每月一页报告,包含正常运行时间、页面速度、已应用的更新和已预防的事件,让客户看到服务费支付了什么。

我们的新订购页面下个月上线。与 Kirat 一起头脑风暴,如何在不投放付费广告的情况下获得更多蛋糕预订。

kirat_brainstorm 向委员会提问

委员会提出了 15 个想法,并对每个想法进行了匿名评分。前三名:

  1. 年度生日自动驾驶(18/20 分)
  2. 真实的蛋糕时段而非泛泛的帖子(17/20 分)
  3. 蛋糕作为自己的广告媒介传播(16/20 分)

幕后

kirat_brainstorm Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_BRAINSTORM · 投入:标准 · 15 个想法 · 1 轮 · $0.09

主题: 为一家本地烘焙店通过其新的在线订购页面获得更多定制蛋糕预订的想法,不投放付费广告

发送的上下文: 位于德国一座 40,000 人小镇的烘焙店,有 6 名员工。定制蛋糕和预订的利润率最高。一个新的在线订购页面(蛋糕选择、取货日期、预付款)下个月上线;到目前为止,订单仅通过电话和电子邮件。Google 商家资料有 120 条评价,4.7 星。店主时间很少,因此想法必须每周最多用 2 小时运行。硬性要求:本季度不投放付费广告。硬性要求:不增加员工。

委员会的结果

  1. 1 年度生日自动提醒 gpt-5.6 · 符合要求 · 18/20 分(9 + 9) 在结账时,顾客可以自愿留下场合和月份,以便次年收到提醒。系统会在 21 天前自动发送一封邮件,引导至预填好的订单页面;这样每一笔订单都会催生未来的订单,无需持续获客,且同意流程清晰合规。
  2. 2 真实的蛋糕档期,而非泛泛的帖子 gpt-5.6 · 符合要求 · 17/20 分(9 + 8) 订单页面展示未来四周实际剩余的生产档期,例如“周六仍有 2 个定制蛋糕名额”。每周的 Google 商家帖子直接链接到该页面;更新页面和发帖合计最多耗时 20 分钟,无需打折即可营造可信的紧迫感。
  3. 3 让蛋糕本身成为广告媒介 gpt-5.6 · 符合要求 · 16/20 分(8 + 8) 每个取走的蛋糕都附上一张小卡片,写着“重新订购或定制这款蛋糕”,并附上对应款式的二维码。切蛋糕时卡片会显眼地展示出来,让在场的生日或婚礼宾客恰好发现下单途径;卡片套装只需制作一次,每周几乎不产生额外工作量。
  4. 4 上线时的一次性蛋糕咨询时段 gpt-5.6 · 打破规则 · 16/20 分(8 + 8) 上线后的第一个周六开设四小时的开放蛋糕咨询时段:宾客从样品卡中挑选口味和款式,然后通过摆放在面前的二维码自行下单。这有意打破了当周最多两小时工作量的软性约束;额外投入是值得的,因为真实订单、观察到的可用性问题、可复用的照片和客户问题会同时产生——无需额外员工或付费广告。
  5. 5 场合合作伙伴,而非网红 gpt-5.6 · 符合要求 · 15/20 分(8 + 7) 儿童游乐场、摄影师、花店、婚礼场地和会所各获得一个小型二维码立牌,指向为其场合预先配置好的蛋糕选择。作为回报,面包店会在本地推荐页面上列出这些合作伙伴;每月五次有针对性的联系就足够,佣金和付费曝光都得以免除。
  6. 6 办公室和俱乐部的蛋糕轮值 gpt-5.6 · 符合要求 · 15/20 分(8 + 7) 本地办公室、诊所和俱乐部获得一个页面,可以收集多个生日或周期性日期,并依次预付。季度轮值一旦建立,就能把单个场合转化为可规划的系列订单;外联可以限制为每周两家机构。
  7. 7 柜台平板上的混合式蛋糕咨询 gemini-3.6-flash · 打破规则 · 14/20 分(7 + 7) 有意打破“仅限线上下单”的软性约束,在周五提供 1 小时店内咨询,期间在平板上共同录入订单。这样做是值得的,因为犹豫不决的顾客和年长顾客会逐步被引导到新的线上系统。
  8. 8 让评价成为决策辅助 gpt-5.6 · 邻近方案 · 13/20 分(7 + 6) 作为对最强现有素材的小幅重组,从 120 条 Google 评价中挑选十二句有意义的句子,与匹配的蛋糕款式配对,每句都附上直接下单链接。这样 4.7 星评分不仅作为信任信号展示,还能帮助产品选择;一次性设置后,页面基本无需维护。
  9. 9 带店铺深链的样品蛋糕展示 gemini-3.6-flash · 邻近方案 · 13/20 分(6 + 7) 在销售厅设置一面实体照片墙,展示最漂亮的蛋糕,每张图片都附有特定二维码,打开后即在网店中预选好这款蛋糕。这是对创意 1 的变体:将店内展示与店铺中的直接深链关联起来。
  10. 10 Google 资料优化与自动化评价链接 gemini-3.6-flash · 符合要求 · 12/20 分(6 + 6) 在强大的 Google 资料(4.7 星)上补充官方“在线订购”按钮,并每周更新当前蛋糕的照片。取货时,顾客会收到一封包含评价和重新订购页面链接的模板邮件。每周耗时不到 30 分钟。
  11. 11 收据和面包袋上的二维码预告 gemini-3.6-flash · 符合要求 · 11/20 分(6 + 5) 在每张收据和包装上印上醒目的二维码,直接引导至在线蛋糕配置器(“在线规划你的庆典梦想蛋糕”)。这样无需在柜台增加额外工作,就能将日常到店顾客转化为数字化预订者。
  12. 12 与本地活动场地的 B2B 合作 gemini-3.6-flash · 符合要求 · 11/20 分(6 + 5) 在本地餐厅、活动谷仓和婚礼策划师处放置立牌和传单,附上网站的直接预订码。办庆典的顾客直接在线预订蛋糕,而场地则获得少量费用补贴或作为回报的推荐。
  13. 13 托儿所和学校生日日历 gemini-3.6-flash · 邻近方案 · 10/20 分(4 + 6) 通过与本地幼儿园合作,向家长委员会发放信息传单,其中包含儿童主题蛋糕的固定折扣码。这是对创意 3 的变体:不面向一般 B2B 合作伙伴,而是以自动化方式专门针对儿童生日这一高频场合。
  14. 14 每月一次的装饰蛋糕迷你工作坊 gemini-3.6-flash · 打破规则 · 10/20 分(4 + 6) 有意打破“每周最多 2 小时”的软性约束,因为每月举办一次 4 小时的工作坊。这样做是值得的,因为参与者会成为品牌大使,创作热情洋溢的社交媒体内容,并且必定会通过网店下后续订单。
  15. 15 每个蛋糕盒上的订购链接 claude · 符合要求 · 8/20 分(4 + 4) 在蛋糕盒和收据上印上订购页面的二维码,让每位已经购买过蛋糕的顾客都能为下一个生日重新订购,无需打电话。

Kirat 给 Claude 的备注: 最佳打破规则创意仅排在第 4 位:“上线时的一次性蛋糕咨询时段”——它有意打破了一项软性约束。在舍弃它之前,请先为其做一次最强论证。

与 Kirat 一起头脑风暴,如何在两个季度内减少计费事故,而不将计费从单体中拆分出去。

kirat_brainstorm 向委员会提问

委员会提出了 15 个创意,并对每个创意进行了匿名评分。前三名:

  1. 围绕计费表的数据库防火墙(17/20 分)
  2. 可执行的财务不变量(17/20 分)
  3. 将事故回放作为发布关卡(17/20 分)

幕后

kirat_brainstorm Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_BRAINSTORM · 投入:标准 · 15 个创意 · 1 轮 · $0.06

主题: 在两个季度内减少由计费模块引起的生产事故,而不将其拆分为独立服务的创意

发送的上下文: 8 名工程师的团队。一个 TypeScript 单体,约 60,000 行代码,一个 Postgres 数据库,每天部署多次。计费模块每周都在变更,并导致了最近 8 起生产事故中的 5 起,主要原因是其他模块直接读写计费表。团队中没有人有生产环境分布式系统的经验。领导层希望两个季度内减少事故。硬性要求:不重写计费模块。硬性要求:计费的特性开发每周继续进行。

委员会的结果

  1. 1 围绕计费表的数据库防火墙 gpt-5.6 · 符合任务要求 · 17/20 分(9 + 8) 为单体应用的计费与非计费代码路径创建独立的 Postgres 角色,然后撤销通用应用角色对计费表的直接写入权限。将所有变更操作都通过一小组经过审查的存储过程或事务函数来执行,并先添加临时审计日志,以发现并迁移调用方,同时不中断每周的功能交付。
  2. 2 可执行的财务不变量 gpt-5.6 · 符合任务要求 · 17/20 分(9 + 8) 将一小组不变量——例如已定稿发票不可变、账本分录平衡、扣费创建幂等、状态转换有效——在安全可行处编码为数据库约束,在不可行处编码为定时生产探针。在 CI 中对匿名化的生产形态测试数据运行同样的探针,把事故经验转化为永久性的预警机制,而不是大范围扩充测试。
  3. 3 以事故回放作为发布关卡 gpt-5.6 · 符合任务要求 · 17/20 分(9 + 8) 利用捕获的查询形态和脱敏数据行,将五次计费事故转化为确定性的回放场景,然后要求每一项计费变更都必须通过这些场景。围绕这些具体场景添加生成式测试,对重试、重复事件、事务顺序和部分失败进行排列组合,聚焦于故障邻近区域,而不是试图对单体应用做穷尽覆盖。
  4. 4 以影子模式逐步落实计费边界 gpt-5.6 · 邻近方案 · 16/20 分(9 + 7) 作为数据库防火墙的一种低风险变体,初期保留现有权限,但记录每一次触及计费表的查询及其所属模块、调用点和事务 ID。四周后,将意外写入变为 CI 失败,再逐个模块变为生产错误;这以分阶段落实替代了立即切换权限。
  5. 5 计费爆炸半径控制台 gpt-5.6 · 符合任务要求 · 16/20 分(9 + 7) 将高风险的计费行为——而非整个模块——置于服务端 kill switch 和按比例灰度发布之后,并配以针对发票、支付和对账异常的仪表盘。每项每周功能都附带一条经过测试的关闭路径,使响应人员能够禁用新行为,而无需回滚无关的单体部署或撤销数据库迁移。
  6. 6 Postgres schema 封装与行级安全 gemini-3.6-flash · 符合任务要求 · 15/20 分(7 + 8) 将计费表隔离到专用的 Postgres schema(billing.*)中,并撤销其他数据库角色对它们的直接写入和读取权限。其他角色只能通过已定义的 SQL 视图或存储接口访问这些表。这直接在数据库层面消除了事故的主要原因。
  7. 7 计费发布的契约测试与影子流水线 gemini-3.6-flash · 符合任务要求 · 15/20 分(8 + 7) 在 CI 流水线中为所有计费接口建立自动化的消费者驱动契约测试。此外,对关键计算的计费变更在生产中以影子模式运行,不产生副作用,并自动进行差异比对。
  8. 8 以第二个数据库作为安全工具 gpt-5.6 · 打破规则 · 14/20 分(7 + 7) 有意打破“单一 Postgres 数据库”这一软性假设,通过逻辑复制增加一个只读影子数据库,同时将计费保留在单体应用内,并保留主库作为唯一写入方。对两个数据库运行新的计费读取和对账检查,在对外暴露前比对结果,并将影子库用于取证查询,使事故诊断不会过载或意外改动生产数据。
  9. 9 严格的模块边界 lint 与公共 API 门面 gemini-3.6-flash · 符合任务要求 · 14/20 分(7 + 7) 通过 dependency-cruiser 引入架构 lint,在构建阶段禁止其他模块直接导入计费内部实现。通信只能通过单一的、类型安全的 BillingFacade 接口进行,从而立即阻止耦合的蔓延。
  10. 10 计费变更护照 gpt-5.6 · 符合任务要求 · 13/20 分(7 + 6) 要求每个与计费相关的拉取请求都附带一份机器校验的护照:受影响的表、不变量、迁移兼容性、回滚路径,以及一条证明部署后健康状态的生产查询。CODEOWNERS 门禁加上 15 分钟轮值的计费负责人审查,使流程足够轻量以支持每周变更,同时将审查重点集中在跨模块影响上。
  11. 11 为外部模块自动生成只读 Postgres 视图 gemini-3.6-flash · 邻近方案 · 13/20 分(7 + 6) schema 封装的一种变体:不进行成本高昂的 API 重构,而是为外部查询自动提供只读 Postgres 视图。外部模块只读取这些稳定的视图,而直接表访问通过数据库权限被阻止。
  12. 12 用于读模型的进程内异步事件总线 gemini-3.6-flash · 符合任务要求 · 12/20 分(4 + 8) 其他模块不再直接查询计费表,而是由计费模块在状态变化时发送内存事件。接收模块构建自己的本地投影。这在完全不引入分布式系统的前提下,将读取访问与计费表彻底解耦。
  13. 13 为计费封装进行为期两周的功能冻结 gemini-3.6-flash · 打破规则 · 11/20 分(5 + 6) 恰好两周内打破持续每周功能交付这一软性约束。整个团队集中精力分离数据库耦合。这一一次性投入为在剩余 5 个月内持续减少事故数量奠定基础。
  14. 14 每个模块一个数据库角色 claude · 符合任务要求 · 11/20 分(6 + 5) 为计费提供自己的 Postgres schema 和角色,并撤销其他模块对计费表的写入权限,使直接写入在到达生产之前就在预发布环境中失败。
  15. 15 将数据库物理拆分到第二个 Postgres 实例 gemini-3.6-flash · 打破规则 · 9/20 分(3 + 6) 打破单数据库架构这一软性约束,但保留单体代码。计费数据迁移到自己的数据库实例,这使跨库 SQL 连接在技术上不再可能。由于代码仍为单体,运维复杂度保持在最低水平。

Kirat 给 Claude 的说明: 最好的 rule_breaker 想法仅排在第 8 位:“以第二个数据库作为安全工具”——它有意打破了一条软性约束。在舍弃它之前,请先为它做一次最强论证。

与 Kirat 一起头脑风暴,我们如何在不削弱审查的前提下,缩短约 3,000 条记录的筛选时间。

kirat_brainstorm 向委员会提问

委员会提出了 14 个想法,并对每个想法进行了匿名评分。前三名:

  1. 双人排除门禁(18/20 分)
  2. 带边缘案例台账的校准冲刺(16/20 分)
  3. 快速二元控制台,而非微型数据提取(15/20 分)

幕后

kirat_brainstorm Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_BRAINSTORM · 投入:标准 · 14 个想法 · 1 轮 · $0.18

主题: 在不削弱系统综述严谨性的前提下,缩短约 3,000 条记录的标题与摘要筛选所需人工时间的想法

发送的上下文: 卫生服务研究领域的系统综述,计划发表。当前方案:两名独立人工筛选者,冲突通过讨论解决。人工时间紧张。期刊审稿人会询问筛选是如何进行的。漏掉一项相关研究(假排除)比纳入一项不相关研究更糟。硬性要求:方法必须能按 PRISMA 2020 报告。硬性要求:假排除率不得上升。

委员会的结果

  1. 1 双人排除门控 gpt-5.6 · 规则突破者 · 18/20 分(10 + 8) 让评审员 A 筛查每一条记录,但将 A 的纳入决定和不确定决定直接向前传递;评审员 B 仅独立评估 A 提出的排除项。只有当两位人类评审员独立排除同一条记录时才将其排除,并自动推进所有存在分歧的记录,从而消除大部分冲突讨论。这有意打破了当前协议中“两位人类必须评估每条记录”的软性假设;它值得采用,因为它节省了筛查时间,同时在结构上允许更多假纳入,但不会增加假排除,并且很容易在 PRISMA 选择过程部分中描述。
  2. 2 带边缘案例台账的校准冲刺 gpt-5.6 · 符合任务要求 · 16/20 分(9 + 7) 对分层的第一批记录进行独立双人筛查,解决冲突,并将反复出现的歧义转化为带有正例和反例的简短操作规则。在继续之前锁定规则;仅当资格标准未发生变化时才保留试点决定,否则重新筛查。这保留了双人独立筛查,同时减少了后续审议和冲突解决时间,并且校准过程可以在 PRISMA 下报告。
  3. 3 快速二元控制台,而非微型数据提取 gpt-5.6 · 符合任务要求 · 15/20 分(8 + 7) 为两位评审员提供一个盲法、键盘驱动的界面,仅限于纳入、排除或不确定,并始终显示完整的标题和摘要;将详细编码和排除原因推迟到全文审查阶段。PRISMA 2020 不要求在标题和摘要阶段提供记录级别的排除原因。决策过程保持不变,但可避免的阅读、点击和记录时间减少了。
  4. 4 仅纳入的机器释放阀 gpt-5.6 · 邻近方案 · 15/20 分(9 + 6) 作为双人排除门控的一步变异,将 A 提出的排除项通过一个经过验证的分类器处理,该分类器只能将记录释放为纳入,绝不能排除;评审员 B 独立筛查分类器未释放的所有记录。最终排除仍需要两位人类评审员的一致决定,因此机器错误可以增加全文审查,但不能造成假排除。在 PRISMA 下报告模型、版本、输入、阈值、验证及其严格的仅纳入角色。
  5. 5 非对称排除筛查 gemini-3.6-flash · 符合任务要求 · 15/20 分(7 + 8) 第一位评审员完整分类所有 3,000 条记录。第二位评审员仅检查第一位评审员排除的那些记录,以捕捉假阴性(纳入项直接接受)。这几乎将第二位评审员的工作量减半,将假排除的风险保持在极低水平,并满足所有 PRISMA 要求。
  6. 6 高产出层的绕过筛查 gpt-5.6 · 规则突破者 · 13/20 分(8 + 5) 预先声明高产出子集——例如来自高度特异性检索块的记录、已知合格研究的直接后代,或已纳入密切对齐综述的记录——并将它们全部直接发送到全文检索,无需标题和摘要决定。这有意打破了这些记录的软性双筛查员协议,但它不会增加假排除,因为子集中没有任何内容被排除;代价是额外的全文工作量。在 PRISMA 流程图和选择方法中明确报告绕过规则和结果计数。
  7. 7 通过主动学习的优先筛查 gemini-3.6-flash · 符合任务要求 · 13/20 分(5 + 8) 两位人类筛查员使用主动学习工具(如 ASReview),将相关的标题/摘要排序到顶部。一旦达到经过统计验证的停止标准(例如连续 500 条不相关命中),筛查即结束。该程序节省高达 70% 的时间,可以以符合 PRISMA 2020 的方式记录,并通过算法校准保持最低的假排除率。
  8. 8 筛查前的精确去重 gpt-5.6 · 符合任务要求 · 12/20 分(8 + 4) 仅移除通过 DOI、数据库登录号或精确规范化书目匹配证明完全相同的记录;保留元数据最丰富的副本,仅标记不确定的近似重复项。然后两位评审员独立筛查每条剩余的唯一记录,同时 PRISMA 报告筛查前移除的重复项。这减少了数量,而不会为排除唯一研究创造途径。
  9. 9 带 AI 安全网的人机级联 gemini-3.6-flash · 邻近方案 · 12/20 分(5 + 7) 非对称排除筛查的一种变异:一位人类筛查员单独处理所有记录,而一个调校为最大灵敏度的 AI 模型仅检查人类排除项。第二位人类仅在存在差异时进行检查。这在完整覆盖的情况下将人力需求减少 50% 以上。
  10. 10 全自动 AI 第二评审员 gemini-3.6-flash · 规则突破者 · 11/20 分(3 + 8) 打破了“必须由两位人类完成筛查”的软性约束。大型语言模型(LLM)承担独立第二评审员的角色,采用零假阴性提示。它值得采用,因为人类工作时间减半,且 LLM 已被证明在摘要筛查中能达到高召回率;PRISMA 2020 明确允许报告 AI 工具。
  11. 11 风险适应的单筛查与置信度分诊 gemini-3.6-flash · 规则突破者 · 11/20 分(5 + 6) 打破了整个数据集持续双筛查的软性约束。如果第一位评审员表示高度主观信心且存在明确的排除原因,则取消第二位评审员;只有不确定的案例进入双筛查。这节省高达 60% 的员工时间,同时由于资源集中在灰色区域,遗漏研究的风险仍然很低。
  12. 12 先进行校准轮 claude · 符合任务要求 · 11/20 分(6 + 5) 两位筛查员筛查相同的 100 条记录,讨论每个冲突并在主轮之前细化资格标准,从而减少后续冲突和重读。
  13. 13 带 AI 分诊的二元化快速筛查 gemini-3.6-flash · 邻近方案 · 10/20 分(4 + 6) 主动学习优先排序的变异:团队使用简化界面进行快速评级(仅点击“纳入/不确定”与“排除”)。AI 模型在后台评估不确定性,仅将边缘候选发送到深入双重检查。大幅减少每条摘要的认知负荷和阅读时间。
  14. 14 通过匹配算法的确定性预过滤 gemini-3.6-flash · 符合任务要求 · 6/20 分(3 + 3) 保守的检索过滤器和脚本提前筛选出明显不合适的命中(例如错误的研究设计或非人类人群)。两位筛查员仅通过代表性样本(例如 10%)检查这些自动排除项。这以符合 PRISMA 的方式减少了需要手动筛查的总量,且不损失灵敏度。

所有想法,完整并按排名顺序排列。Claude 自己的想法以匿名和平等条件参与。主题和上下文以英语发送;成员用德语写的想法在此翻译。

来自不同领域的五个标题和题目。每位成员写一个变体,Claude 的草稿参与其中,两位成员匿名评分所有三个。选择一个。

让 Kirat 为我的定价页面写标题变体。最多 8 个词,不用最高级。

kirat_create 向议会提问

获胜变体(17/20 分):“Get paid without Word—free for 14 days”

我自己的草稿排名第 2;成员们匿名评分了所有三个。

幕后

kirat_create Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_CREATE · 模式:变体 · 投入:标准 · $0.03

简报: 面向自由职业者的小型开票工具定价页面的标题(每月 19 美元,14 天免费试用)。受众:目前用 Word 或 Excel 写发票的自由职业者。目标:让试用感觉无风险且值得。格式:一个标题,用英语。

标准: 最多 8 个词 · 具体,不用最高级 · 提及节省时间或获得付款 · 不用感叹号

议会的结果

  1. 1 “Get paid without Word—free for 14 days” gpt-5.6 · 17/20 分(9 + 8) 直接面向 Word 用户,将获得付款放在核心位置,并使无风险试用具体化。
  2. 2 “Send invoices in minutes. Get paid on time.” claude · 17/20 分(8 + 9) 编排器自己的草稿。
  3. 3 “Replace Word and Excel. Get paid days faster.” gemini-3.6-flash · 14/20 分(7 + 7) 直接针对当前手动工作流提供了即时对比,将试用定位为对现金流的快速、无风险升级,而不使用通用炒作。

让 Kirat 为我们面向 WooCommerce 上家具店的落地页写标题变体。最多 10 个词,不用行话。

kirat_create 向议会提问

获胜变体(18/20 分):“Losing furniture buyers to a slow, frustrating WooCommerce store?”

我自己的草稿排名第 3;成员们匿名评分了所有三个。

幕后

kirat_create Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_CREATE · 模式:变体 · 投入:标准 · $0.02

简报: 一家小型数字代理公司落地页的标题,内容是关于为经营 WooCommerce 的家具零售商重建商店。受众:没有内部开发人员的中型家具店老板。目标:预约免费商店检查。格式:一个标题,德国市场但用英语写。

标准: 最多 10 个词 · 点出读者的痛点,而非代理公司 · 不用“headless”或“omnichannel”等行话 · 不用最高级

议会的结果

  1. 1 “Losing furniture buyers to a slow, frustrating WooCommerce store?” gemini-3.6-flash · 18/20 分(8 + 10) 直接针对店主的主要挫败感——因商店性能不佳而失去销售——而不使用技术行话或自夸的代理公司语言。
  2. 2 “Is your WooCommerce shop turning furniture buyers away?” gpt-5.6 · 17/20 分(9 + 8) 直接点出核心痛点,面向家具零售商而不使用行话。
  3. 3 “Fewer shop emergencies, more time for your furniture.” claude · 11/20 分(7 + 4) 编排器自己的草稿。

让 Kirat 为面包店的新蛋糕订购页面写标题变体。简短、本地化,不像连锁店。

kirat_create 向议会提问

获胜变体(19/20 分):“Your celebration cake, baked here for pickup.”

我自己的草稿排名第 3;成员们匿名评分了所有三个。

幕后

kirat_create Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_CREATE · 模式:变体 · 投入:标准 · $0.02

简报: 面包店新的定制蛋糕在线订购页面的标题。受众:迄今为止通过电话订购的本地顾客。目标:让在线订购感觉简单且个性化。格式:一个标题,德国市场但用英语写。

标准: 最多 8 个词 · 具体,不用最高级 · 提及自取或场合 · 听起来像本地面包店,而非连锁店

议会的结果

  1. 1 “Your celebration cake, baked here for pickup.” gpt-5.6 · 19/20 分(10 + 9) 温暖、具体且个性化:“baked here”感觉本地化,而“for pickup”让在线流程感觉简单直接。
  2. 2 “Order your custom birthday cake, pick up fresh.” gemini-3.6-flash · 16/20 分(8 + 8) 标题具体点出了场合以及自取,并通过新鲜度承诺传达了本地手工品质,而不使用冷漠的陈词滥调。
  3. 3 “Your cake, your date. Order in two minutes.” claude · 9/20 分(5 + 4) 编排器自己的草稿。

让 Kirat 为我的提案找一个标题,该提案主张先在单体中加固计费的边界。

kirat_create 向议会提问

我自己的草稿获胜(19/20 分):“Fix billing's boundaries first, split it later if needed”

幕后 kirat_create Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_CREATE · 模式:变体 · 投入:标准 · $0.02

任务简报: 一份内部工程提案的标题:在考虑拆分为独立服务之前,先加固单体应用中计费模块的边界。受众:8 名工程师和希望减少事故的管理层。目标:让提案被阅读并获批。格式:一个标题,英文。

标准: 最多 10 个词 · 陈述决策,而不只是主题 · 不用流行术语 · 非工程师也能理解

委员会的结果

  1. 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20 分(10 + 9) 编排器自己的草稿。
  2. 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20 分(9 + 7) 该标题陈述了将计费保留在单体应用中同时加固其边界的决策,并将这一选择与减少事故的共同目标联系起来。
  3. 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20 分(7 + 6) 该标题就方向做出了明确的决策,避免了对管理层而言不必要的术语(如“单体”),并直接回应了稳定性的共同目标。

让 Kirat 为我们关于将 LLM 作为额外筛选器的研究方法论文找一个标题。准确,不夸大。

kirat_create 询问了委员会

获胜的变体(18/20 分):"Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews"

我自己的草稿排在第 2 位;成员们对所有三个标题进行了匿名评分。

幕后

kirat_create Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_CREATE · 模式:变体 · 投入:标准 · $0.02

任务简报: 一篇方法论文的标题,内容是关于在卫生服务研究的系统综述中使用 LLM 作为额外筛选器。受众:研究人员和期刊审稿人。目标:准确且可引用,不夸大。格式:一个标题,可在冒号后加副标题,英文。

标准: 最多 20 个词 · 指明方法和场景 · 不做超出数据的声明 · 不用“revolutionize”之类的夸大词汇

委员会的结果

  1. 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20 分(9 + 9) 该标题指明了筛选方法、系统综述背景和卫生服务研究场景,且未暗示性能或收益。
  2. 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20 分(9 + 7) 编排器自己的草稿。
  3. 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20 分(7 + 8) 该标题精确地指明了应用领域和方法论,避免了触发词,并为科学出版场景选择了事实性、可引用的语气。

标题和题目按任务简报的要求,以英文原文呈现。Claude 条目中的推理是 Kirat 为其添加的标签。用德语撰写的推理在此已翻译。

来自不同领域的五个图像简报。OpenAI 和 Google 各生成一张图像,两位成员对两张图像进行匿名评分。选一个。

让 Kirat 为我的开票工具落地页创建一张主视觉图:一个安静的家庭办公桌面,没有可读的屏幕。

kirat_image 询问了委员会

评审团选中了 gpt-image-2 生成的图像(18/20 分)。两位成员对两张图像进行了匿名评分。

幕后

kirat_image Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_IMAGE · 模式:变体 · 横向 · ≈ $0.17

任务简报: 面向自由职业者的小型开票工具落地页的主视觉图:早晨整洁的家庭办公桌面,有一台笔记本电脑(屏幕背向或模糊,无可读界面)、一杯咖啡和一个纸质笔记本。自然日光,平静的纪实摄影风格,无文字,无标志,无人物面部。

标准: 感觉像真实的自由职业者工作空间,而非图库办公室照片 · 平静且不杂乱 · 为标题留出平静的空间 · 无文字、标志或可读屏幕

委员会的结果

Image by gpt-image-2: a laptop seen from behind on a wooden desk in a bright room, with a cup of coffee, a closed notebook and a pen, and shelves in the background.

1 gpt-image-2 · 18/20 分(9 + 9)

Image by gemini-3.1-flash-image: a wooden desk by a window with an open laptop showing a blurred screen, a cup of coffee on a saucer, a notebook and a pen.

2 gemini-3.1-flash-image · 13/20 分(6 + 7)

让 Kirat 为家具店创建一张产品照片:一张橡木餐桌配四把椅子,放在真实的客厅中。

kirat_image 询问了委员会

评审团选中了 gemini-3.1-flash-image 生成的图像(18/20 分)。两位成员对两张图像进行了匿名评分。

幕后

kirat_image Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_IMAGE · 模式:变体 · 横向 · ≈ $0.17

任务简报: 家具网店的产品照片:一张实心橡木餐桌配四把椅子,放在明亮、看起来真实的中欧风格客厅中。自然日光,编辑式室内风格,无文字,无标志,无人物。

标准: 桌子是明确的主体 · 逼真的木材纹理和颜色 · 看起来像真实的家,而非 3D 渲染 · 无文字或标志

委员会的结果

Image by gemini-3.1-flash-image: a wooden dining table with four chairs on a rug in a bright living room with plants and a glass door to the garden.

1 gemini-3.1-flash-image · 18/20 分(9 + 9)

Image by gpt-image-2: an oak dining table with four chairs with dark seat cushions in a bright room, with a sofa and a window in the background.

2 gpt-image-2 · 17/20 分(8 + 9)

让 Kirat 为蛋糕订购页面创建一张主视觉图:一个装在盒子里的生日蛋糕,准备取货。

kirat_image 询问了委员会

评审团选中了 gpt-image-2 生成的图像(17/20 分)。两位成员对两张图像进行了匿名评分。

幕后

kirat_image Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_IMAGE · 模式:变体 · 横向 · $0.17

任务简报: 一家小型本地烘焙店新的定制蛋糕在线订购页面的主视觉图:一个做好的生日蛋糕放在明亮、看起来真实的家庭烘焙店的木质柜台上,装在一个简单的纸板蛋糕盒里准备取货。自然日光,纪实摄影风格,无文字,无标志,无人物面部。

标准: 看起来像真实的本地烘焙店,而非连锁店或图库照片 · 蛋糕是明确的主体 · 为标题留出平静的空间 · 图像中无文字或标志

委员会的结果

Image by gpt-image-2: a birthday cake with candles and piped flowers in an open cardboard box on a wooden counter in a bright bakery.

1 gpt-image-2 · 17/20 分(8 + 9)

Image by gemini-3.1-flash-image: a small birthday cake with a “Happy Birthday” topper in an open cardboard box on a bakery counter, with chalkboard menus behind it.

2 gemini-3.1-flash-image · 7/20 分(4 + 3)

让 Kirat 为我们关于从单体应用中解耦计费的博客文章创建一张封面图。抽象且平静。

kirat_image 询问了委员会

评审团选中了 gpt-image-2 生成的图像(16/20 分)。两位成员对两张图像进行了匿名评分。

幕后

kirat_image Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_IMAGE · 模式:变体 · 横向 · ≈ $0.17

任务简报: 一篇关于从单体应用中解耦计费模块的内部工程博客文章的封面图:一幅抽象、平静的插图,一个边界清晰的方块与一个密集的互连方块群分开。扁平风格,柔和色彩,无文字,无标志。

标准: 清晰边界的概念一目了然 · 平静,不戏剧化 · 小尺寸下也适用 · 无文字或标志

委员会的结果

Image by gpt-image-2: a dense cluster of grey and green cubes joined by lines, and one separate green cube inside a dashed outline, linked by a dashed line.

1 gpt-image-2 · 16/20 分(9 + 7)

Image by gemini-3.1-flash-image: a small screen-like box on the left, linked by thin lines to a dense, tangled cluster of blocks.

2 gemini-3.1-flash-image · 10/20 分(6 + 4)

让 Kirat 为我关于 AI 辅助筛选的会议演讲创建一张封面图。严肃,不要机器人。

kirat_image 询问了委员会

评审团选中了 gpt-image-2 生成的图像(18/20 分)。两位成员对两张图像进行了匿名评分。

幕后

kirat_image Claude 发送给 Kirat 的内容

记录于 2026-10-13 · KIRAT_IMAGE · 模式:变体 · 横向 · ≈ $0.17

任务简报: 一场关于系统综述中 AI 辅助筛选的会议演讲的封面图:桌上一叠整齐的印刷研究摘要,部分被分拣到两个托盘里,柔和的日光,纪实摄影风格。无可读文字,无标志,无人物面部。

标准: 严肃且科学,不夸大 · 不要机器人或发光的大脑 · 分拣的概念可见 · 无可读文字或标志

委员会的结果

Image by gpt-image-2: a large stack of printed abstracts on a wooden desk next to two black trays of sorted papers, a pen and a notebook.

1 gpt-image-2 · 18/20 分(9 + 9)

Image by gemini-3.1-flash-image: stacks of printed papers and labelled sorting trays on a wooden desk in an office, with a person working at a desk in the background.

2 gemini-3.1-flash-image · 9/20 分(5 + 4)

AI 生成的图像,已缩小尺寸,除此之外未经编辑。标有 ≈ 的费用来自并行运行的多次运行:每次运行自身的图像成本加上评分调用的均摊份额。排名是预选结果,最终选择权在你手中。用德语撰写的评分在此已翻译。

02 — 问题

一个模型,一个盲点。

自我审查会自我美化

模型检查自己的工作时会觉得自己很有说服力。同一模型的第二轮检查并非独立检查。

更多轮次不是解决办法

Kirat 在代码中将辩论限制为两轮,而非在提示词中。模型无法靠言辞绕过限制。如果仍无多数意见,会明确告知你。

不同模型家族以不同方式失败

Kirat 将 Claude、ChatGPT 和 Gemini 放在同一个问题上,并向你展示分歧——包括谁持不同意见,以及为什么。

03 — 工作原理

问一次。得到三个立场和一次投票。

第 1 步

你在 Claude 中提问

像往常一样用平实的语言:Ask the Kirat council: Shopify or WooCommerce for my shop? Give your own position too. Claude 会为你调用 Kirat。

第 2 步

三个独立立场

ChatGPT 和 Gemini 各自作答,看不到对方的答案。Claude 作为第三位成员给出自己的立场。

第 3 步

一次投票,保留异议

如果三者中有两者一致,即为多数意见。你会看到每个立场及其理由,以及谁持不同意见。若无多数意见,Kirat 会明确说明,决定权在你手中。

Kirat 还会审查代码(每个发现都由另一个模型家族核查)、对想法进行排名、批评你的文案并比较图像。上面的回放展示了所有这些功能。

无需编程。你安装一个 Claude 扩展,并在 OpenAI 和 Google 各创建一个 API 密钥;安装步骤见下方详情。

九种工具和一次录制的示例调用 →

04 — 定价

一次购买,适用于 Claude Desktop 和 Claude Code。

无订阅,无席位,无需在我们这里注册账户。购买前请确认 Kirat 的运行环境:

Kirat 的运行环境

可用于

  • macOS 和 Windows 上的 Claude Desktop 聊天
  • 终端、VS Code 或 Claude Desktop 的 Code 标签页中的 Claude Code
  • Claude Code 云会话,需为每个云环境进行一次性设置 有限制:以网络密钥形式存储的密钥保持不可读(在 Team 和 Enterprise 计划中,管理员可能需要添加它们),环境变量中的密钥对使用该环境的所有人可读,每日预算按会话计算。

不可用于

  • 浏览器中的聊天(claude.ai)或 Claude 移动应用
  • 在云端运行的 Cowork 任务
  • 某些公司环境:使用 Windows 账户登录的代理(NTLM/Kerberos),以及将 Desktop 扩展限制为允许列表的组织 请先咨询你的 IT 团队。

完整的运行环境说明 · 所有云环境限制

Desktop 扩展 + Claude Code 插件

Kirat

$99

$99 首发价 — 前 50 名购买者

之后 $149。一次性购买。 一个 ZIP 下载包含两种格式。你还需要一个 OpenAI 和一个 Gemini API 密钥:你提出的问题会发送给两家提供商,它们按使用量向你收费。

  • 01Claude Desktop 扩展和 Claude Code 插件,一次下载
  • 02用于 Claude Code 云会话的设置脚本
  • 03全部九种工具:投票、代码审查、想法排名、文案批评、图像比较等
  • 04成本控制:每日预算(默认 $5),会阻止可能超出预算的调用。尽力而为,因此也请在提供商处设置限额
  • 05单人许可证,适用于你自己的设备和云环境
  • 06尽可能提供兼容性更新——免费,但不保证 在 Claude Desktop(macOS/Windows)和 Claude Code 中运行;Claude Code 云会话需一次性设置——不适用于浏览器或移动端聊天。运行位置 · 云端限制

蓝图

$49

仅含文档——用于借助编码智能体构建或改造你自己的议事会服务器。使用 Kirat 无需购买。

  • 01规范:工具的结结构化需求
  • 02架构决策,以及每项决策背后的理由
  • 03智能体可自行核对的验收清单
  • 04本站数字背后的基准数据

不含代码,不含可安装扩展。

一次性购买 · 通过 Lemon Squeezy(记录商户)付款,结账时处理增值税 · 退款:见条款

API 用量直接向 OpenAI 和 Google 付费,使用你自己的账户——在我们的测量中,每次议事会决策花费 $0.02–$0.15。

以下情况 Kirat 不适合你……

  • ——你只在浏览器或手机上把 Claude 当聊天工具用。Kirat 运行在 Claude Desktop(macOS/Windows)和 Claude Code 中,以及需一次性设置的 Claude Code 云会话中——不在那些聊天中运行。
  • ——你需要托管服务或任何形式的支持。
  • ——你不想在两家提供商处开设 API 账户并处理账单。
  • ——你每月只做少量决策,并且乐意在不同聊天中手动比较答案。
  • ——你想要一个听起来确定的答案。议事会的职责是向你展示分歧,而有时分歧本身就是答案。
  • ——你的数据不能发送给 OpenAI 或 Google。你提供给 Kirat 的一切都会发送给这两家,使用你的账户并受其条款约束。

05 — 问题

购买之前。

这和 llm-council 或 PAL MCP 有什么不同?

请先看看这两个。llm-council 是一个开源 Web 应用;其作者称它按设计不提供支持。PAL MCP 是一个免费的开源 MCP 服务器,通过终端安装;它支持许多提供商,并有自己的共识工具。请查看它们的当前状态。如果其中之一满足你的需求,就用它。

Kirat 的不同之处在于整体方案:它通过 Claude Desktop 自带的扩展对话框安装,密钥存放在操作系统的安全存储中,并带有每日上限的预算保护、两轮上限、领域决胜、后台工单、故障处理、345 项测试、英文结果字段和通俗语言使用方式。

完整回答 →

我需要是开发者吗?

不需要。如果你能安装 Claude 扩展并创建两个 API 密钥,你就能使用 Kirat。你用通俗语言向 Claude 提问——问 Kirat 议事会:Postgres 还是 SQLite?也给出你自己的立场。——然后 Claude 会调用这些工具。

我需要什么?

macOS 或 Windows 上的 Claude Desktop。它自带 Node,因此你无需安装其他东西。或者使用 Node.js 20 或更高版本的 Claude Code。对于 Claude Code 云会话,需对你的云环境进行一次性设置(见下文)。

外加一个 OpenAI API 密钥和一个 Google Gemini API 密钥,两者都需启用计费。Kirat 也可仅用一个密钥运行:此时议事会只有一个外部成员,每个结果都会指明缺失的密钥。

运行费用是多少,如何防止账单失控?

你直接向 OpenAI 和 Google 支付你所使用的费用。在我们的测量中,一次议事会决策花费 $0.02–$0.15,取决于努力层级和输入大小,耗时 8 秒到 3 分钟。图像生成每次调用约 $0.05–$0.20。

预算保护会在每次调用前预留最坏情况成本,并阻止可能超出你每日预算的调用——默认每个 UTC 日 $5,可调整。它是尽力而为的,因此也请在提供商处设置支出限额。kirat_status 显示预算和支出,且不产生费用。

完整回答 →

我的数据和密钥会去哪里?

**你的数据:**你提供给 Kirat 的一切(问题、上下文、代码、图像)都会直接发送给 OpenAI 和 Google,使用你的账户并受其条款约束——从你的计算机发出,或在 Claude Code 云会话中从你自己的云环境通过 Anthropic 为该环境提供的网络代理发出。没有 Kirat 服务器,没有与我们之间的账户,也没有遥测。我们永远看不到你的密钥或数据。

**你的密钥:**你在 Claude 自带的安装或设置对话框中输入它们。Claude Desktop 将它们存储在操作系统的安全存储中(macOS 钥匙串、Windows 凭据管理器)。Claude Code 将它们存储在 macOS 钥匙串中;在 Windows 和 Linux 上存储在 ~/.claude/.credentials.json 中,仅你的用户可读。我们建议使用单独的提供商项目并设置支出限额。

**在 Claude Code 云会话中:**Kirat 在你的云环境中运行。你在那里将密钥存储为网络机密:Anthropic 的代理会在请求发出时将它们添加到 Kirat 的请求中,因此会话中任何人都无法读取它们,甚至 Claude 也不能。在 Team 和 Enterprise 计划中,取决于你的角色,组织管理员可能需要添加它们。作为后备方案,密钥可以是该环境的环境变量,所有使用该环境的人都能读取。

**在你的计算机上:**Kirat 在你的主文件夹中保留一个文件夹 .kirat,其中包含每日成本计数器、成本日志、最近 20 个结果(它们包含你的问题和答案)、委托决策日志和生成的图像。你可以随时删除它。计算机上所有 Kirat 会话(Desktop 和 Code)共享它。

完整回答 →

Kirat 在 Claude Code 云会话中如何工作,有哪些限制?

云会话——Code 标签页云会话、Web 上或移动应用中的 Claude Code——在 Anthropic 服务器的云环境中运行。你计算机上的扩展无法访问它们。相反,你需要一次性设置云环境:

  • 将下载包中的代码块(cloud/setup-script.txt)粘贴到环境设置脚本的顶部;
  • 添加你的两个密钥——作为 api.openai.com 和 generativelanguage.googleapis.com 的网络机密(在 Team 和 Enterprise 计划中,管理员可能需要添加它们;下载包中的指南有详细信息);否则作为环境变量,最好命名为 KIRAT_OPENAI_API_KEY 和 KIRAT_GEMINI_API_KEY,它们不会与项目自身的 OPENAI_API_KEY 冲突(Kirat 也接受 OPENAI_API_KEY 和 GEMINI_API_KEY);
  • 网络访问:如果为 Full,则无需更改;否则将其设置为 Custom(在较新应用中为 Limited),使用包管理器默认列表,加上 Kirat 下载主机(如果密钥在环境变量中,还需加上 api.openai.com)。

该脚本会下载你确切版本的 Kirat,验证其 SHA-256 校验和并安装它。这是一次性设置,不是一键完成。我们在云容器中测试过。

**限制:**环境变量中的密钥可被所有使用该环境的人读取(网络机密则使其不可读)。每个云会话都从头开始,因此 Kirat 的每日预算按会话计算——请在 OpenAI 和 Google 设置支出限额;在云中它们才是你真正的上限。后台任务和最近结果会随会话结束而消失。环境的网络访问必须允许 Kirat 下载主机,如果你的密钥是环境变量,还需允许 api.openai.com(Gemini 已包含在默认列表中)。如果设置失败,会话仍会启动,只是没有 Kirat——并且失败状态可能会为新会话缓存,直到你编辑设置脚本(任何更改都会让新会话重新运行它)。

设置脚本中的下载地址是你购买内容的一部分,如同 ZIP 一样;请勿公开它。许可证涵盖你自己的云环境。与他人共享的云环境需要为每个人各持一份许可证。

完整回答 →

它使用哪些模型?如果提供商停用某个模型怎么办?

默认使用 OpenAI 的 gpt-5.6 和 Google 的 gemini-3.6-flash,Claude 作为第三位投票者。

模型名称和价格是设置项。如果提供商停用某个模型,你输入新名称及其两个价格。无需更新。

Claude Desktop 说该扩展未经验证 by Anthropic。这是问题吗?

该警告是预期内的。Claude Desktop 对从文件安装的扩展会显示它,而 Kirat 是从文件安装的——它未经过 Anthropic 验证或签名。

更新如何工作?

在 Claude Desktop 中,像第一次一样安装新的 .mcpb。你的密钥和设置会保留。

兼容性更新在可能时免费,但不作保证。较大的新版本可能单独出售。

我能获得支持吗?

不能。Kirat 不提供支持、安装帮助或咨询。付款和收据由 Lemon Squeezy 处理。如果 Kirat 在受支持的设置中无法运行,你会获得退款;见条款。

许可证允许什么?

一人,可在你自己的任意数量设备和自己的云环境中使用。与他人共享的云环境需要为每个人各持一份许可证。不得转售,不得再分发。Kirat 是专有软件,不是开源软件。

在你自己的工作中使用议事会产出的内容,包括商业工作,是可以的。完整条款见条款。

蓝图是做什么用的?我需要它吗?

使用 Kirat 不需要它。蓝图面向希望借助编码智能体构建或改造自己议事会服务器的人。

它仅含文档——不含代码,不含可安装扩展:规范(工具的结构化需求)、架构决策及每项决策背后的理由、智能体可自行核对的验收清单,以及本站数字背后的基准数据。没有捆绑价格。

06 — 详情

详情,供记录。

安装、Kirat 运行的所有位置及云端限制、九个工具,以及数字背后的证据。按需展开。

安装 Kirat 并连接你的 API 密钥

Kirat 不是你注册的服务。它在你的计算机上(或你自己的 Claude Code 云环境中)运行,在 Claude 内部,使用你自己的 API 密钥。没有 Kirat 服务器,也没有与我们之间的账户。你提供给 Kirat 的一切都会直接发送给 OpenAI 和 Google,使用你的账户——从你的计算机发出,或在 Claude Code 云会话中从你自己的云环境通过 Anthropic 为该环境提供的网络代理发出。我们永远看不到你的密钥或你的问题。

**刚购买 Kirat?**请遵循分步设置指南:先确定你使用哪种 Claude,然后只执行对应的步骤。

第 1 步 · 耗时的部分

两个 API 密钥

一个 OpenAI API 密钥和一个 Google Gemini API 密钥,两者都需启用计费。这里耗时的是提供商的注册和计费表单。使用单独的提供商项目并设置支出限额是个好主意。

最小权限(可选):在 OpenAI,受限密钥就足够了,将“List models”设为 Read,“Model capabilities”设为 Request,其余全部设为 None。来自 Google AI Studio 的 Gemini 密钥已限制为 Gemini API;将来自 Google Cloud 控制台的密钥限制为 Generative Language API。

已经有两个密钥?前往第 2 步。

第 2 步

安装

**Claude Desktop:**解压下载包。打开设置 → 扩展 → 高级设置 → 安装扩展……并选择 .mcpb 文件。在对话框中输入两个密钥。Desktop 自带 Node,因此无需安装其他东西。

**Claude Code:**解压下载包,将解压出的 kirat 文件夹移入你的主文件夹,使 ~/kirat/claude-code 存在。然后运行下面的命令。需要 Node.js 20 或更高版本。

**Claude Code 云会话:**对你的云环境进行一次性设置,有相关限制——见下文。

第 3 步

提问

检查安装:使用 Kirat 扩展并调用 kirat_status。它还会免费通过 OpenAI 和 Google 检查两个 API 密钥。

然后问一个真实问题:问 Kirat 议事会:Postgres 还是 SQLite?也给出你自己的立场。 或者从模板开始:在 Claude Desktop 中,从消息框的 + 按钮开始;在 Claude Code 中,使用插件 /kirat:decide、/kirat:review、/kirat:critique 或 /kirat:brainstorm。在 Claude Code 云会话中,它们被称为 /mcp__kirat__decide、/mcp__kirat__review、/mcp__kirat__critique 和 /mcp__kirat__brainstorm。

# in Claude Code, once ~/kirat/claude-code exists
/plugin marketplace add ~/kirat/claude-code
/plugin install kirat@kirat
# enter both keys when asked; to change them later:
/plugin configure kirat@kirat

Claude Desktop 会警告该扩展未经过 Anthropic 验证。对于从文件安装的每个扩展,该警告都是预期内的——请参阅常见问题。

它的运行方式、完整说明以及云端的限制 九个工具和一个已记录示例调用

你用自然语言提问。Claude 发起调用:

// a real call and a real answer — nothing staged
kirat_vote({
  question: "Cap the coupled effort default, or leave it at maximum?",
  options: ["cap at high", "decouple", "leave as is"],
  ownPosition: { position: "cap at high", reasoning: "…", confidence: 72 }
})
→ outcome:       "completed"
  decision:      "cap at high"
  decisionPath:  "unanimous"
  rounds:        1
  votes:         openai 94, gemini 92,
                 claude 72
  cost:          $0.021

其他结果:needs_human(无多数——由你决定)、domain_decision、limited、budget_exhausted。置信度数值是每个模型自己的自报值。

图 6.3 — 部件清单

Claude 调用的九个工具

7 个有 API 费用 · 2 个无

序号工具功能API 费用
01kirat_vote通过投票决策:每位成员表明立场,然后由三分之二多数、领域负责人或 needs_human 决定。API 费用
02kirat_review代码审查。每个发现都由另一模型家族验证。API 费用
03kirat_create点评你的草稿、让成员起草,或对简短变体进行排序。API 费用
04kirat_brainstorm在三条轨道上产生发散想法——符合简报、邻近、打破规则——并匿名排序。API 费用
05kirat_decide为可逆的工作选择进行委托决策,带否决权和每日限额。API 费用
06kirat_ask只询问一位成员。不经过委员会。API 费用
07kirat_image由两家提供商生成图像,并由匿名评审团评分。API 费用
08kirat_result获取后台任务和最近结果。无
09kirat_status预算、支出、可用成员、设置、免费密钥检查。无

“API 费用”是指该工具使用你自己的密钥调用 OpenAI 和 Google,你直接向这些提供商付费。上面的回放显示了每次运行的费用。Kirat 本身不按使用收费:你一次性购买。kirat_image 和图像输入适用于你计算机上的文件,因此它们最适合 Claude Code。

证据:已记录的决策、实测费用、有记录的失败