简介:本文详细介绍如何使用Electron Forge结合百度智能云千帆大模型API,快速开发跨平台的AI聊天应用,涵盖环境搭建、API调用、界面设计及性能优化等关键步骤。
在AI技术快速发展的背景下,开发者需要快速构建具备自然语言交互能力的桌面应用。Electron Forge作为基于Electron的现代化项目脚手架工具,能够快速生成跨平台(Windows/macOS/Linux)的应用框架;而百度智能云千帆大模型提供高性能的文本生成与理解能力,两者结合可高效实现AI聊天应用。
技术选型依据:
npx create-electron-forge my-ai-chat --template=typescript-webpackcd my-ai-chatnpm install
关键配置:
webpack.renderer.config.js中添加node-polyfill-webpack-plugin,解决Node.js API兼容性问题;package.json的scripts,添加开发环境热重载命令:
"scripts": {"start": "electron-forge start","dev": "cross-env NODE_ENV=development electron-forge start"}
通过npm安装官方SDK:
npm install @baidu-intelligent-cloud/qianfan-sdk
API密钥配置:
API_KEY和SECRET_KEY;.env文件:
QIANFAN_API_KEY=your_api_keyQIANFAN_SECRET_KEY=your_secret_key
dotenv加载环境变量:
import dotenv from 'dotenv';dotenv.config();
初始化客户端:
import { QianfanClient } from '@baidu-intelligent-cloud/qianfan-sdk';const client = new QianfanClient({apiKey: process.env.QIANFAN_API_KEY,secretKey: process.env.QIANFAN_SECRET_KEY});
发送聊天请求:
async function sendMessage(prompt: string): Promise<string> {try {const response = await client.textCompletion({model: 'ERNIE-Bot',messages: [{ role: 'user', content: prompt }],temperature: 0.7,maxTokens: 2048});return response.data.result;} catch (error) {console.error('API调用失败:', error);return '服务暂时不可用,请稍后重试';}}
使用React+CSS设计界面,关键组件如下:
// src/components/ChatWindow.tsximport React, { useState } from 'react';const ChatWindow = () => {const [messages, setMessages] = useState<Array<{role: 'user'|'ai', content: string}>>([]);const [input, setInput] = useState('');const handleSend = async () => {if (!input.trim()) return;// 添加用户消息setMessages(prev => [...prev, { role: 'user', content: input }]);const userInput = input;setInput('');// 调用API并添加AI回复const reply = await sendMessage(userInput);setMessages(prev => [...prev, { role: 'ai', content: reply }]);};return (<div className="chat-container"><div className="message-list">{messages.map((msg, index) => (<div key={index} className={`message ${msg.role}`}>{msg.content}</div>))}</div><div className="input-area"><inputvalue={input}onChange={(e) => setInput(e.target.value)}onKeyPress={(e) => e.key === 'Enter' && handleSend()}/><button onClick={handleSend}>发送</button></div></div>);};
Electron中主进程与渲染进程需通过ipcRenderer和ipcMain通信:
主进程(main.ts):
import { ipcMain } from 'electron';ipcMain.handle('send-ai-message', async (event, prompt: string) => {return await sendMessage(prompt);});
渲染进程调用:
// 使用预加载脚本暴露IPC方法declare global {interface Window {electronAPI: {sendMessage: (prompt: string) => Promise<string>;};}}// 在组件中调用const reply = await window.electronAPI.sendMessage(input);
stream: true)实现逐字显示:let partialResult = ‘’;
for await (const chunk of stream) {
partialResult += chunk.data.result;
// 实时更新UI
}
- **缓存策略**:对高频问题(如"你好")使用本地缓存:```typescriptconst cache = new Map<string, string>();async function getCachedResponse(prompt: string): Promise<string> {if (cache.has(prompt)) return cache.get(prompt)!;const response = await sendMessage(prompt);cache.set(prompt, response);return response;}
输入验证:过滤XSS攻击和敏感词:
function sanitizeInput(input: string): string {return input.replace(/<script[^>]*>.*?<\/script>/gi, '').replace(/[<>`"]/g, '');}
API密钥保护:
.env文件提交到版本控制(添加到.gitignore);secure-electron-template加固应用权限。修改forge.config.js:
module.exports = {packagerConfig: {icon: 'src/assets/icon',extraResources: ['.env'] // 打包时包含环境变量文件},makers: [{name: '@electron-forge/maker-squirrel',config: { name: 'ai_chat_app' }},{name: '@electron-forge/maker-dmg',config: { background: 'src/assets/dmg-background.png' }}]};
使用electron-updater:
import { autoUpdater } from 'electron-updater';autoUpdater.on('update-available', () => {autoUpdater.downloadUpdate();});autoUpdater.on('update-downloaded', () => {autoUpdater.quitAndInstall();});app.whenReady().then(() => {if (process.env.NODE_ENV === 'production') {autoUpdater.checkForUpdates();}});
开发者建议:
通过Electron Forge与百度千帆大模型的结合,开发者能够以极低的成本构建出媲美商业软件的AI应用,尤其适合初创团队快速验证产品市场。