手把手带你基于 Electron 开发一个简单的 AI 对话聊天应用

以下内容假设您已具备基本的 JavaScript 知识。


1. 准备环境

安装 Node.js 和 npm

确保已安装 Node.js 和 npm,下载地址:Node.js 官网

安装 Electron

运行以下命令全局安装 Electron:

npm install -g electron

2. 创建项目并初始化

创建项目文件夹

mkdir ai-chat-app
cd ai-chat-app

初始化 package.json

npm init -y

3. 安装依赖

安装必要的依赖:

  • Electron:用于构建桌面应用。
  • Axios:发送 HTTP 请求与 AI 接口通信。
  • dotenv:管理环境变量。

运行以下命令:

npm install electron axios dotenv

4. 配置项目结构

创建以下目录和文件结构:

ai-chat-app/
├── main.js        // Electron 主进程入口文件
├── preload.js     // 预加载脚本
├── renderer/      // 渲染进程
│   ├── index.html
│   ├── style.css
│   └── index.js
├── .env           // 环境变量文件
└── package.json

5. 编写代码

配置 .env

将你的 AI 服务密钥(例如 OpenAI)写入 .env

OPENAI_API_KEY=your_openai_api_key

编写 main.js

负责启动 Electron 主窗口:

const { app, BrowserWindow } = require('electron');
const path = require('path');

let mainWindow;

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
        },
    });

    mainWindow.loadFile('./renderer/index.html');
});

编写 preload.js

允许渲染进程与主进程通信:

const { contextBridge } = require('electron');

contextBridge.exposeInMainWorld('api', {
    fetchAIResponse: async (prompt) => {
        const response = await fetch('http://localhost:3000/api/chat', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ prompt }),
        });
        return response.json();
    },
});

编写 renderer/index.html

简单的用户界面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>AI Chat App</title>
</head>
<body>
    <div id="app">
        <textarea id="input" placeholder="Ask something..."></textarea>
        <button id="send">Send</button>
        <div id="output"></div>
    </div>
    <script src="index.js"></script>
</body>
</html>

编写 renderer/style.css

简单的样式:

body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100vh;
    background-color: #f0f0f0;
}

#app {
    width: 80%;
    max-width: 600px;
}

textarea {
    width: 100%;
    height: 100px;
    margin-bottom: 10px;
    padding: 10px;
    font-size: 16px;
}

button {
    padding: 10px 20px;
    font-size: 16px;
    cursor: pointer;
}

#output {
    margin-top: 20px;
    background: #fff;
    padding: 10px;
    border-radius: 5px;
}

编写 renderer/index.js

处理用户输入和显示响应:

const input = document.getElementById('input');
const sendButton = document.getElementById('send');
const output = document.getElementById('output');

sendButton.addEventListener('click', async () => {
    const prompt = input.value;
    if (!prompt) return;

    const response = await window.api.fetchAIResponse(prompt);
    output.innerText = response.answer || 'No response.';
});

6. 运行项目

添加启动脚本

修改 package.json

"scripts": {
    "start": "electron ."
}

启动应用

运行以下命令:

npm start

7. 部署 AI 接口(选用 OpenAI)

示例:设置一个简单的 Node.js 服务器来代理 OpenAI API

安装依赖:

npm install express body-parser openai

创建 server.js

require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const { Configuration, OpenAIApi } = require('openai');

const app = express();
app.use(bodyParser.json());

const openai = new OpenAIApi(
    new Configuration({ apiKey: process.env.OPENAI_API_KEY })
);

app.post('/api/chat', async (req, res) => {
    const { prompt } = req.body;

    try {
        const completion = await openai.createCompletion({
            model: 'text-davinci-003',
            prompt,
            max_tokens: 100,
        });

        res.json({ answer: completion.data.choices[0].text.trim() });
    } catch (error) {
        res.status(500).send('Error fetching response.');
    }
});

app.listen(3000, () => console.log('Server running on port 3000.'));

启动服务器:

node server.js

这样,你就完成了一个简单的 AI 对话聊天应用!如需进一步优化,请考虑以下方向:

  • UI 美化:使用更高级的 CSS 或集成框架如 Bootstrap。
  • 功能扩展:添加聊天记录、用户登录等功能。
  • 打包应用:使用 electron-packagerelectron-builder 将项目打包为可执行文件。

需要更深入的指导,随时提问!

#前端开发 分享于 2025-01-07
【 内容由 AI 共享,不代表本站观点,请谨慎参考 】