应用开发- Ai Talk 应用开发流程记录文档
一、前言
Ai Talk 项目是根据个人使用习惯编写的一款款平台的 AI 大模型对话客户端应用。可利用该框架构建任何属于自己的跨平台客户端,因为本质上只是将 Web 应用封装成客户端。
二、程序介绍
2.1 简介
Ai Talk 是一款集合了多种大语言模型应用的开源桌面客户端,基于 Electron 构建。Electron 是一个由 GitHub 开发的开源框架,用于构建跨平台的桌面应用程序。它通过结合 Chromium 浏览器引擎和 Node.js 运行时环境,允许开发者使用 HTML、CSS 和 JavaScript 等前端技术开发桌面应用,同时支持调用底层系统功能(如文件系统、系统通知等)。当前支持以下大模型:OpenAI ChatGPT、Google Gemini、Quora Poe、月之暗面 Kimi、字节 豆包、阿里 通义千问、腾讯 元宝、百度 文心一言。
📑 Note: OpenAi ChatGPT、Google Gemini 、Quora Poe 需要设置网络代理才能正常访问(国外友人则无需代理)。
2.2 功能介绍
界面: 程序主要由两部分组成:左侧的侧边栏和右侧的显示区域。点击左侧的某个大模型,右侧将加载该大模型的官方页面,即可开始对话。
网络代理: 由于 OpenAI ChatGPT 、 Google Gemini 、Quora Poe 模型需要访问国外网站,因此在使用之前,需要在左侧侧边栏下方的 “网络设置” 中配置代理网络。目前只支持 HTTP 和 HTTPS 协议。配置步骤如下:
1 | 1)点击 “网络设置” ,在弹窗输入代理地址,如:本地开启了 7890 端口为代理网络端口,填入 http://127.0.0.1:7890 |
2.3 大模型使用规则
1 | | 模型名称 | 使用规则 | |
2.4 源码启动
- 安装 nodejs
1 | https://nodejs.org/zh-cn/download |
- 下载项目源码
1 | git clone https://github.com/Funsiooo/Ai-Talk.git |
- 安装 electron
1 | cd Ai-Talk |
- Ai Talk 目录下执行
1 | npm start |
2.5 打包
- 安装 node.js
1 | https://nodejs.org/zh-cn/download |
- 下载项目源码
1 | git clone https://github.com/Funsiooo/Ai-Talk.git |
- 安装 electron
1 | cd Ai-Talk |
- 安装 electron-forge/cli
1 | npm install --save-dev @electron-forge/cli -d --registry=https://registry.npmmirror.com |
- macos 安装 @electron-forge/maker-dmg
1 | npm install --save-dev -d @electron-forge/maker-dmg --registry=https://registry.npmmirror.com |
- Ai Talk 目录下执行,打包文件存放在 out 目录下(打包过程中若出现报错可忽略)
1 | npm run build |
📑 Note: 自行打包需要根据自身设备替换项目中的 package.json 文件, 目前提供 Mac Apple silicon、Windows 打包文件, 文件见 config 文件夹。
三、开发流程
3.1 Electron 安装
3.1.1 Node 安装
macOS 使用 brew 安装,win 直接官网下载安装即可
1 | brew install node |
3.1.2 初始化 Electron 项目
1)创建项目目录,使用 npm 初始化项目
1 | mkdir Ai_Talk |
2)项目中安装 Electron,可能会存在网络问题,建议 npm 设置国内源,有条件代理的直接全局代理
1 | 1)设置 npm 源 |
3)构建第一个程序
官方教程:https://www.electronjs.org/zh/docs/latest/tutorial/tutorial-first-app , 项目文件如下
1 | ├── index.html # 主页面 |
index.html
1 |
|
main.js
1 | const { app, BrowserWindow } = require('electron') |
package.json
1 | { |
启动程序
1 | npm run start |
3.2 本项目开发流程
3.2.1 项目文件树
1 | Ai-Talk/ # 项目根目录 |
3.2.2 程序核心流程
- main.js: 主进程入口,负责创建窗口、管理应用生命周期和处理系统交互。需要展示如何创建BrowserWindow实例,加载页面,以及处理IPC事件。
- Preload.js: 预加载脚本,作为主进程和渲染进程之间的桥梁,暴露有限的Node.js功能给渲染进程。需要说明contextBridge和ipcRenderer的使用。
- index.html: 主页面模板,渲染进程加载的HTML结构。需要包含对渲染脚本的引用,并展示如何调用预加载的API。
- Renderer.js: 渲染进程脚本,处理用户界面交互,通过预加载脚本与主进程通信。需要事件监听和更新UI的示例。
3.2.3 主要功能
官方Web服务集成
- 采用 Electron
WebView组件无缝加载官方网页,实现跨平台封装(无需重复开发 UI/交互逻辑)
对话分栏布局
- 左侧面板:对话大模型选择、代理设置等功能
- 右侧主界面:显示左侧选择的大模型官方页面,开启对话模式
网络代理模块
- Electron
session.setProxyAPI 实现代理设置功能
3.2.4 代码分析
main.js 分析
1 | const { app, BrowserWindow, ipcMain, dialog, nativeImage } = require('electron') |
引入模块
1 | const { app, BrowserWindow, ipcMain, dialog, nativeImage } = require('electron') |
| 模块名称 | 用途 | 典型场景示例 |
|---|---|---|
app |
管理应用生命周期(启动、退出) | app.whenReady().then(createWindow) |
BrowserWindow |
创建和控制浏览器窗口 | new BrowserWindow({ width: 800 }) |
ipcMain |
主进程的进程间通信模块(与渲染进程 ipcRenderer 交互) |
ipcMain.handle('event', callback) |
dialog |
显示系统对话框(文件选择、消息提示等) | dialog.showOpenDialog(options) |
nativeImage |
处理系统原生图片(如图标、截图) | nativeImage.createFromPath('img.png') |
path |
处理文件路径 | path.join(__dirname, 'src', 'file.js') |
定义窗口函数,该程序主要有三个窗口,主窗口、代理窗口、关于程序窗口
1 | let mainWindow; |
主窗口 let mainWindow
1 | /** |
代理端口 let proxyWindow;
1 | /** |
关于程序窗口 let versionWindow
1 | /** |
Index.html 分析
1 |
|
renderer.js 分析
1 | /*********************** 渲染进程主逻辑 (renderer.js) ***********************/ |
preload.js 分析
1 | /* |
3.2.5 自定义
若需要加入个人习惯的程序, 只需修改两部分代码即可
1)index.html 中的
2)renderer.js 中添加 index 的按钮元素以及需要加载的链接即可
例子:添加 deepseek 大模型
1)修改 index.html 添加 deepseek 按钮元素
2)renderer.js 中添加index.html 按钮元素,并指定跳转的 url
四、更新日志
2025.xx.19
功能相关
去掉隐藏边栏功能,新增独立打开窗口功能
1、新增可打开独立窗口,实现多个程序结果对比,可打开参考链接,无需像以往那样需要复制链接后到浏览器打开
2、新增几个大模型入口:xxx、xxx、xxx
主要代码修改如下:
1 | // 将 Electron 会话窗口独立到桌面 |
render.js
1 | // 实现将新窗口关闭后自动恢复到 Electron 中 v1.3 |
1 | const browserButton = document.getElementById('browser-btn'); |
1 | browserButton.addEventListener('click', function () { |
preload.js
1 | detachWebview: (url) => ipcRenderer.invoke('detach-webview', url), //打开浏览器 |

五、总结
本项目基于个人使用习惯驱动,Ai 时代,简单的重复性和文字性的工作不应该浪费我们的时间。










