最近看到一个不错的开源项目------赛博报社(Cyber Press)。它巧妙地绕开了API调用成本,直接让浏览器里已有的AI大模型"坐在一起"开会协作,解决问题的思路和技术用法很聪明,所以分享一下他的实现方式。
一、项目简介:AI协同创作的革命性思路
赛博报社 是一个基于Chrome扩展(Manifest V3)的多模型AI协同写作平台。它最吸引人的口号是:"完全免费!无需任何API Key!"
核心思路
项目没有采用传统的调用官方API的方式,而是另辟蹊径:
-
直接连接你浏览器中已经登录的ChatGPT、Claude、豆包、通义千问或DeepSeek等网页版。
-
将它们组织成一个虚拟的"AI编辑部",协调它们完成从选题到成稿的全流程。
-
所有数据在你的浏览器本地处理,隐私和安全得到充分保障。
解决的问题
-
成本问题:彻底免除API调用费用。
-
模型单一:综合多个模型的优势,避免单一模型的局限或偏见。
-
流程繁琐:将"构思-撰写-评审-润色"的完整流程自动化。
二、核心功能:四轮竞技,产出精品
项目设计了一个精妙的四轮流水线,模拟了真实的编辑审稿流程:
| 轮次 | 名称 | 工作内容 | 产出目标 |
|---|---|---|---|
| 第一轮 | 起草 (Drafting) | 所有AI根据同一主题,并行撰写初稿。 | 获得多个角度的初稿。 |
| 第二轮 | 评审 (Critique) | AI之间互换稿件,进行交叉评审、提出尖锐意见。 | 生成针对性的修改建议。 |
| 第三轮 | 润色 (Refinement) | 各AI根据收到的评审意见,修改并优化自己的稿件。 | 得到质量显著提升的修订稿。 |
| 第四轮 | 投票 (Voting) | 所有AI阅读最终成稿,投票选出最佳文章。 | 民主决议出最终的"冠军稿件"。 |
最终,冠军稿件会被标注🏆奖杯标识,并支持全屏查看,仪式感十足。
三、多平台适配器:策略模式实现
2.1 适配器基类设计
// 平台适配器抽象基类
abstract class BasePlatform {
abstract getName(): string;
abstract extractResponse(): Promise<string>;
abstract sendMessage(message: string): Promise<void>;
// 公共等待方法
protected async waitForElement(selector: string, timeout = 10000) {
return new Promise<Element>((resolve, reject) => {
const start = Date.now();
const timer = setInterval(() => {
const el = document.querySelector(selector);
if (el) {
clearInterval(timer);
resolve(el);
} else if (Date.now() - start > timeout) {
clearInterval(timer);
reject(new Error(`元素未找到: ${selector}`));
}
}, 200);
});
}
}
2.2 具体平台实现(以豆包为例)
class DoubaoPlatform extends BasePlatform {
private readonly SELECTORS = {
INPUT: 'textarea[placeholder*="输入"]',
RESPONSE: '.message-content',
SEND_BUTTON: 'button:has(svg[data-icon="send"])'
};
getName() { return '豆包'; }
async sendMessage(message: string) {
// 获取输入框并填充内容
const input = await this.waitForElement(
this.SELECTORS.INPUT
) as HTMLTextAreaElement;
// 模拟用户输入
input.value = message;
input.dispatchEvent(new Event('input', { bubbles: true }));
// 点击发送按钮
const button = await this.waitForElement(
this.SELECTORS.SEND_BUTTON
) as HTMLButtonElement;
button.click();
}
}
三、防页面冻结机制
class AntiFreezeManager {
private intervalId?: number;
start() {
// 每25秒触发微活动
this.intervalId = window.setInterval(() => {
this.simulateMicroActivity();
}, 25000);
}
private simulateMicroActivity() {
// 方案1:轻微滚动(用户无感知)
if (document.body.scrollHeight > window.innerHeight) {
const current = window.pageYOffset;
window.scrollTo({ top: current + 1, behavior: 'auto' });
setTimeout(() => {
window.scrollTo({ top: current, behavior: 'auto' });
}, 50);
}
// 方案2:创建静音AudioContext保持活跃
this.keepAudioContextAlive();
}
private keepAudioContextAlive() {
const ctx = new (window.AudioContext || webkitAudioContext)();
const oscillator = ctx.createOscillator();
const gainNode = ctx.createGain();
gainNode.gain.value = 0; // 静音
oscillator.connect(gainNode);
gainNode.connect(ctx.destination);
oscillator.start();
}
}
四、技术挑战与解决方案总结
| 挑战 | 解决方案 | 技术亮点 |
|---|---|---|
| 多平台兼容性 | 适配器模式 + 智能DOM选择器 | 易于扩展新平台 |
| 页面冻结 | 微活动模拟 + AudioContext保持 | 完全后台运行 |
| 状态同步 | 长连接通信 + 状态管理 | 实时更新UI |
| 错误恢复 | 指数退避重试 + 页面恢复 | 高可靠性 |
五、创新价值
-
零成本集成:无需API密钥,直接利用Web版AI
-
民主协作机制:多模型交叉评审与投票
-
隐私安全:所有数据处理在本地完成
-
模块化设计:易于维护和扩展
结语
赛博报社项目展示了如何通过精巧的浏览器扩展技术,解决实际痛点。其技术方案对开发复杂浏览器扩展、实现页面自动化、构建可靠异步系统都有很高的参考价值。