【挑战100个开源工具】AI 聚合工具:Tauri 2 + React + Ant Design 的桌面实践

AI 聚合工具:Tauri 2 + React + Ant Design 的桌面实践

项目背景与目标

日常工作中需要同时对比多个 AI 的回答,但频繁切换网页和复制粘贴非常低效。本项目的目标是:

  • 一键唤起:全局快捷键呼出置顶输入框。
  • 一键投递:输入一次,自动投递到多个 AI。
  • 统一管理:在设置中心集中管理工具与快捷键。
  • 原生体验:跨平台桌面应用,轻量、快速、易分发。

开源地址


技术栈

桌面端

  • Tauri 2:Rust 驱动的轻量桌面框架。
  • tauri-plugin-global-shortcut:全局快捷键注册。
  • 托盘(Tray Icon):常驻后台入口与右键菜单。
  • 多 Webview(单窗口多标签):同一窗口内加载多个 AI 页面。

前端

  • React + Vite:快速开发、热更新。
  • Ant Design:设置中心 UI 与表单。
  • CSS 变量 + 跟随系统暗黑:统一主题风格。

其他

  • 权限能力(capabilities):Tauri 2 的安全权限声明。

功能概览

  1. 快捷输入框(QuickPanel)
    • 全局快捷键 Alt+Q 呼出置顶输入框。
    • Enter 发送,Shift+Enter 换行。
    • Esc 随时关闭。
  2. 主窗口(设置中心 + AI 标签页)
    • 单窗口多标签页,按工具启用状态动态生成。
    • 工具配置:URL、选择器、发送方式、启用开关。
  3. 自动投递
    • 输入一次,自动注入到多个 AI 页面并发送。
  4. 托盘入口
    • 左键打开主窗口。
    • 右键菜单:设置中心 / 退出。
ScreenShot_2025-12-27_232222_794

交互流程

  1. 用户按下 Alt+Q。
  2. 快速输入框置顶出现并聚焦。
  3. 输入内容后按下 Enter。
  4. 主窗口打开并切换到第一个启用的 AI 标签页。
  5. 系统将文本自动填充并发送到所有启用的 AI。

简单流程图(文字版):

Alt+Q 唤起
    ↓
输入内容
    ↓ Enter
主窗口打开并切到第一个工具
    ↓
多 Webview 注入与发送

运行与开发

前置依赖

  • Node.js(建议 LTS)
  • Rust(含 Cargo)

启动开发

npm install
npm run tauri dev

打包

npm run tauri build

设置中心说明

1) 快捷键录制

点击输入框后直接按组合键,系统会自动填入格式(例如 Ctrl+Alt+Q),然后点“应用快捷键”立即生效。

2) AI 工具配置

  • 名称:工具显示名称
  • URL:工具入口地址
  • 启用:控制是否参与投递
  • 发送方式:
    • 回车发送(默认)
    • 按钮发送(需配置发送按钮选择器)
  • 输入选择器/发送选择器:
    • 可选项,未配置时使用通用策略
ScreenShot_2025-12-27_232914_433

注入与发送机制说明

项目在每个 AI 页签中通过注入脚本完成以下动作:

  1. 定位输入框(优先使用自定义选择器)。
  2. 点击并聚焦输入框(激活发送逻辑)。
  3. 写入内容并触发 input/change 事件。
  4. 根据发送方式触发:
    • 回车发送:模拟 Enter。
    • 按钮发送:点击发送按钮。

注入失败通常与以下原因有关:

  • 目标页面需要登录或有反自动化策略;
  • 页面结构变更导致选择器失效;
  • CSP 或脚本限制;
  • 特定站点(如 ChatGPT)更偏向点击按钮发送。
微信图片_2025-12-27_233833_671
ScreenShot_2025-12-27_235003_979
ScreenShot_2025-12-27_234040_709
ScreenShot_2025-12-27_234151_792

常见问题与注意事项

1) 注入失败或发送不成功

  • 先确认页面已登录并显示输入框。
  • 尝试设置更精准的 inputSelector / sendSelector。
  • 对 ChatGPT 建议使用 “按钮发送”:
    • 输入选择器:textarea#prompt-textarea
    • 发送选择器:button[data-testid='send-button']

2) Mac 构建报错(图标与透明)

  • 图标要求:icon.png 必须是 RGBA PNG。
  • 透明窗口:macOS 对透明窗口有私有 API 限制,当前实现会自动在 macOS 下关闭 transparent 以避免编译失败。

3) 快捷键冲突

如果快捷键注册失败,请换用更少冲突的组合,如 Ctrl+Alt+Q。

4) ESC 全局关闭

按 Esc 会关闭当前显示的主窗口或快速输入框,避免出现无法关闭的情况。


项目结构概览

src/
  main/         # 设置中心与主窗口 UI![ScreenShot_2025-12-27_232943_131](/wp-content/uploads/2025/12/ScreenShot_2025-12-27_232943_131-248x300.png){.alignnone}
  quick/        # 快速输入框 UI
  lib/          # 注入与窗口管理逻辑
src-tauri/
  src/main.rs   # Tauri 后端逻辑
  capabilities/ # 权限配置
ScreenShot_2025-12-27_232222_794

使用建议

  • 将常用 AI 工具加入列表,并配置最稳定的选择器。
  • 保留一个不常冲突的快捷键用于唤起。
  • 多标签对比回答时,优先关闭不常用的工具以提升性能。

后续可扩展方向

  • 不同工具的专属注入模板;
  • 多轮上下文缓存与自动拼接;
  • 输出结果汇总与对比视图;
  • 可视化编辑器与快捷键冲突检测。