一个基于 React + Vite + Tailwind 的多模态 AI 客户端,后端使用 Express + MySQL 持久化会话与消息。支持纯文本对话、图片分析、文件/文件夹批量分析,内置延迟/成本显示、提示词模板、对话导出下载、会话置顶与侧栏拖拽等体验优化。
- 🧠 多模态体验:文本聊天、图片分析、文件/文件夹分析三大界面;统一模型选择下拉。
- 📂 会话持久化与管理:创建/重命名/删除会话,置顶排序,侧栏宽度可拖拽;手动重命名不会被自动覆盖。
- ⚡ 消息增强:模型回复支持继续/重试/总结/翻译快捷按钮;Shift+Enter 换行,Enter 发送。
- 📝 提示词模板:常用与自定义模板支持保存、本地存储,快捷插入输入框。
- 📥 导出下载:一键将当前会话导出为 Markdown 文件(本地下载,而非剪贴板)。
- 🌐 状态可视化:数据库与网络健康、延迟显示;地区/IP/运营商信息卡片(可折叠)。
- 💰 成本与性能:显示模型响应耗时、Token 数量与估算成本。
src/App.tsx:应用入口、布局、会话侧栏与状态卡片。src/components/ChatInterface.tsx:聊天界面、模型选择、模板、导出与消息操作。src/components/VisionInterface.tsx:图片上传与分析界面。src/components/FileAnalyzer.tsx:文件/文件夹读取与批量分析界面。src/components/AboutModal.tsx:关于弹窗。src/services/apiService.ts:前端访问后端 API。src/services/geminiService.ts:调用 Gemini SDK(前端使用)。server/index.js:Express 后端,MySQL 连接、表初始化、API 路由。server/schema.sql:数据库参考结构(会话与消息表)。
npm install在项目根目录创建 .env(参考 .env.example):
API_KEY=你的_Gemini_API_Key
APP_PORT=3001
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=你的数据库用户
DB_PASSWORD=你的数据库密码
DB_NAME=gemini_nexus
前端使用 VITE_API_KEY 访问 Gemini;后端使用 API_KEY 供服务端调用(如需)。启动前确保 MySQL 运行,数据库已创建;表会由后端自动初始化。
开启两个终端:
# 终端 1:启动后端
npm run server # 默认 http://localhost:3001
# 终端 2:启动前端
npm run dev # 默认 http://localhost:5173npm run build # 生成生产包
npm run preview # 预览生产包- 模型选择:支持 Gemini 系列(如 2.0 Flash Lite、2.5 Flash/Pro、3 Pro Preview 等),下拉位于各界面右上角。
- 输入与发送:Enter 发送,Shift+Enter 换行;生成时禁用输入避免重复发送。
- 文件/文件夹分析:支持文本/代码类文件,读取后汇总并提交到 Gemini,结果在右侧滚动区展示。
- 图片分析:上传 JPG/PNG/WebP(<=5MB),可自定义提示词,报告区域可滚动。
- 会话导出:点击“导出对话”经确认后下载
.md文件,文件名包含会话 ID。 - 会话置顶与搜索:侧栏搜索过滤标题;星标置顶优先排序。
- 状态面板:可折叠,显示数据库与网络延迟、地区/IP/运营商信息。
GET /api/health:健康检查。GET /api/sessions、POST /api/sessions、PATCH /api/sessions/:id、DELETE /api/sessions/:idGET /api/sessions/:id/messagesPOST /api/messages:保存消息并更新会话时间。
- 无法连接数据库:检查
.env中 DB 配置与 MySQL 服务是否启动。 - API Key 报错:确认前端环境变量
VITE_API_KEY已设置且有效。 - 端口冲突:修改
.env中APP_PORT或前端代理端口,避免占用。
基于项目原有许可(如无特别说明,默认保留现状)。