我如何在不支付一分钱 API 费用的情况下并行运行 6 个 LLM(Electron + DOM 注入)

发布: (2026年4月30日 GMT+8 20:28)
3 分钟阅读
原文: Dev.to

Source: Dev.to

引言

说实话:现在仅凭单个 LLM 来解决复杂问题基本上就是一次掷硬币。我对日常工作流感到极度疲惫:

  1. 向 ChatGPT 提问 → 得到自信的答案。
  2. 把同样的问题粘贴到 Claude 进行事实核查 → 得到相矛盾的答案。
  3. 再让 Perplexity 来平衡。

我成了手动的 API 路由器,这让人筋疲力尽。

我想要一个 “同行评审” 系统,让 AI 之间相互校对,但出现了两个巨大的障碍:

  • 成本 – 通过官方 API(GPT‑4o、Claude 3.5、DeepSeek 等)对每个查询运行 6 模型交叉验证循环,费用会迅速飙升。
  • 延迟(瀑布效应) – 顺序串联这些调用意味着要等上几分钟才能得到答案。

于是我构建了 AI Council —— 一个本地桌面应用,完全绕过 API,利用它们的免费网页 UI 并行运行六个 AI。

架构:Electron 与 6 个 BrowserView

整个“API”其实就是 DOM 注入:解析 HTML,定位文本框,模拟键盘输入,并点击 Send 按钮。

绕过瀑布效应:Fan‑Out / Fan‑In

初稿生成

你提出一个问题。主 AI(例如 ChatGPT)生成第一稿。

Fan‑Out(并行评审)

应用将该稿件同时广播给另外五个 AI 面板,在所有六个 BrowserView 上同步点击 Submit 按钮。

Fan‑In(汇总)

应用监控所有窗口的 DOM。当它们全部停止生成内容后,提取文本,汇总反馈,并将结果送回主 AI。

最终输出

主 AI 根据同行评审的意见重写答案。

整个编排本质上就是一个巨大的 Promise.allSettled

// Conceptual Fan‑out logic
async function runParallelReview(draft) {
  const reviewers = [
    claudeView,
    geminiView,
    deepseekView,
    grokView,
    perplexityView
  ];

  // Fire them all at once
  const reviewPromises = reviewers.map(view =>
    injectPromptAndWaitForCompletion(view, `Review this draft: ${draft}`)
  );

  // Wait for all models to finish physically typing
  const reviews = await Promise.allSettled(reviewPromises);

  return compileReviews(reviews);
}

真正的头疼事:管理 Web UI 状态

当没有干净的 API 响应时,如何判断 AI 是否“完成”输入?解决方案是监听 DOM 变动,检测输入指示器何时消失。

结果

如果你对 DOM 注入脚本或 Electron 多视图架构感兴趣,整个项目都是开源的。

前往仓库查看 → https://github.com/MinkyuTheBuilder/ai-council

欢迎 Fork、加星,或提交 issue 反馈 DOM 抓取逻辑。

0 浏览
Back to Blog

相关文章

阅读更多 »

模型越智能,节省越多。

神话:更智能的模型会让插件变得多余。自从 WOZCODE 推出以来,许多 Claude Code 高级用户低声说插件的优势将会消失。