从六个浏览器标签到一个多模型工作台
一个很常见的场景:你想问一个稍微有点分量的问题——一段代码为什么慢、一篇论文靠不靠谱、一个产品决策该往哪走——于是打开 ChatGPT、Gemini、Kimi、Qwen、DeepSeek、豆包,把同一个问题复制粘贴六遍,等它们各自答完,再在六个窗口之间来回切,对比谁说得对、谁在胡说、谁给的例子能直接用。
这件事我干了几个月。最后决定写个东西终结它。
这就是 CrossChat。
它干什么
CrossChat 是一个桌面应用,把上面那几个(以及更多)大模型的网页塞进同一个窗口里。三件事:
- 画布:多个模型并排铺开,你聚焦其中一个,其余的留在余光里。左右箭头或滑动切换焦点,不用再开六个浏览器标签来回切。每个模型都还是它自己网页原本的样子,登录态、历史、插件都在。
- 广播:底下输入框写一次问题,一键发给所有正在用的模型。点完发送,你能看着六个页面同时开始打字——有人秒回,有人转圈,有人答到一半自己改主意。这种同时性,是开六个标签页给不了的。
- PK:答完后点一下,选一个裁判模型(或用 API),让它给所有答案打分、排名、给出胜负理由,结果卡片按冠军在前展示。裁判会先判断这是代码题、事实题、还是写作题,再用对应标准打分——代码看正确性和边界,事实看证据和幻觉,写作看是否切题。
仅此而已。它不替你决定哪个答案最好,只是把”开六个标签页复制六遍”压成一两次点击,再帮你把对比这件事结构化。
为什么是桌面应用
我没把它做成网页服务,也没做成 SaaS。原因很朴素:这些大模型的网页本身就需要登录态,把它嵌进一个本地窗口里,登录态、Cookie、历史都还是你自己的,CrossChat 不经手任何对话内容,也不存数据。PK 的结果关掉就没了。
它不是一个平台,不是一个评测网站,就是一个跑在你自己电脑上的工具。
真正难的部分
听起来简单,做起来全是坑。
坑不在”把网页嵌进来”,而在”让网页听话”。CrossChat 要替你往输入框里填问题、点发送、抓回答、切侧边栏——这些都是和第三方网页的 DOM 打交道。而每个大模型的网页底层都不一样。
输入框有的是普通文本框、有的是可编辑区域;有的用了 React,你模拟的输入事件它当没看见,非得走系统级键盘事件才会响应。侧边栏按钮在 A 模型上能正常开合,同一个动作在 B 模型上却打开了上传历史。
最让我长记性的一次:我想修一个模型的侧边栏切换,顺手用了一条”看起来差不多”的通用选择器,想着能省一段分支代码。结果在另一个模型上,这条规则没点到侧边栏,反而点到了”新建对话”——页面当场跳走了。
更隐蔽的是,有几家模型长得几乎一样(都是国产、布局类似),行为却相反:A 模型的侧边栏点一下”开”是真的开,B 模型同一个位置点”开”其实是关。我连续修好一家、弄坏另一家好几次,才承认”长得像”不等于”行为像”。
从那以后我给自己定了一条死规矩:没有 DOM 证据,不写选择器。改任何一家页面的交互前,先抓真实 DOM 结构,看清楚标签、属性、坐标、可见性,再动手。每家模型的逻辑单独隔离,谁也不连累谁。
这条规矩不是洁癖,是疤。
还有一件事我最终没做:自动判断”模型答完了没”。第三方网页的加载状态千奇百怪,误判比不判更烦人——你正想看答案,它啪地帮你开了 PK。所以第一版手动来,你觉得答完了就点。
现在到哪了
版本 0.1.0。手动 PK——由你决定什么时候答完了、可以开判了。已接入 ChatGPT、Gemini、Kimi、Qwen、Grok、DeepSeek、豆包、Kiro 等。
后面想做的:自动检测回答完成、PK 历史记录、更多模型。但都不急,先把现在的体验打磨稳。
写在最后
CrossChat 不打算取代任何一个模型,也不想做评测平台。它就是一个个人工具,解决一个我自己的、每天都会遇到的小烦心事:把同一个问题问六遍,然后人肉对比。
如果你也天天在六个标签页之间切,可以试试。
从六个浏览器标签到一个多模型工作台