一款Vibe Coding搓出来的简易ai聊天窗口界面,基于 PySide6 和 OpenAI SDK 制作,支持多模态输入、代码高亮和对话历史管理。
- 优雅的深色/浅色主题设计
- 流畅的动画效果和圆角设计
- 响应式布局,支持窗口缩放
- 美观的渐变按钮和阴影效果
- 支持流式响应,实时显示AI回复
- 对话历史管理(创建、重命名、删除)
- 本地保存对话记录,支持会话恢复
- 智能对话标题生成
- 文本输入:支持 Markdown 格式和代码块
- 图片上传:支持 PNG、JPG、JPEG、BMP、GIF、WebP 格式
- 文件上传:支持代码文件(.py、.js、.html、.css 等)和文本文件
- 多图支持:可同时上传多张图片并预览
- 智能代码块检测和语法高亮
- 代码复制功能,一键复制代码内容
- 行内代码和 Markdown 格式支持
- 支持任何兼容 OpenAI API 格式的接口
- 可配置 Base URL 和模型名称
- 多模态模型自动检测
- 连接超时和错误处理机制
- Python 3.9 或更高版本
- 兼容 OpenAI API 的 API Key(如 DeepSeek、GPT 等)
- 克隆仓库
git clone https://github.com/TerryTian-tech/ai-chat-gui.git
cd ai-chat-gui- 安装依赖
pip install openai pyside6 mistune pygments- 运行程序
python AIChat.py首次运行需要在设置中配置 API 信息:
- 点击左侧面板的 "⚙️ API 设置" 按钮
- 填写以下信息:
- API Key: 你的 API 密钥
- Base URL: API 接口地址(如:
https://api.deepseek.com/v1) - 模型: 模型名称(如:
deepseek-chat) - 多模态支持: 如果你的模型支持图片输入,请勾选此选项
- DeepSeek API
- OpenAI API
- 其他任何兼容 OpenAI API 格式的服务
- 新建对话:点击左侧面板的 "➕ 新建对话" 按钮
- 发送消息:
- 在底部输入框输入文本
- 按
Enter发送,Shift+Enter换行
- 上传文件:
- 点击输入框旁的 "📎" 按钮
- 支持多选图片和文本文件
- 图片会自动显示预览
- 切换对话:点击左侧列表中的对话项
- 重命名对话:右键点击对话 → "重命名"
- 删除对话:右键点击对话 → "删除"
- 清除历史:点击左下角的 "🗑️ 清除所有历史"
- 代码块:使用三个反引号包裹代码(支持语言标识)
- 行内代码:使用单个反引号包裹
code - 复制代码:点击代码块右上角的 "📋 复制" 按钮
- 上传图片:支持拖放或通过文件对话框选择
- 图片预览:上传的图片会在输入框上方显示缩略图
- 移除图片:点击图片缩略图上的 "✕" 按钮
- 多图输入:可同时上传最多 10 张图片
ai-chat-gui/
├── AIChat.py # 主程序文件
├── README.md # 项目说明文档
├── requirements.txt # 依赖包列表
└── ~/.aichat/ # 用户数据目录(自动创建)
└── conversations.json # 对话历史文件
- UI 框架: PySide6 (Qt for Python)
- API 客户端: OpenAI Python SDK
- 数据存储: JSON 格式本地存储
- 异步处理: QThread 实现后台 API 调用
- 流式响应: 使用 OpenAI 的流式 API,实时更新回复内容
- 代码高亮: 解析代码块,自定义 CodeBlockWidget 渲染
- 多模态处理: Base64 编码图片,根据模型支持自动调整消息格式
- 防抖优化: 使用 QTimer 实现高度调整防抖,提升性能
- 错误处理: 完善的异常捕获和用户友好提示
- 控件复用减少内存占用
- 延迟保存避免频繁 I/O 操作
- 防抖机制防止界面卡顿
- 连接池管理避免资源泄漏
A: 检查 Python 版本和依赖安装
A:
- 检查 API Key 和 Base URL 是否正确
- 确认网络连接正常
- 查看模型名称是否正确
A:
- 确认模型是否支持多模态
- 检查图片格式和大小
- 在设置中勾选 "此模型支持图片输入"
本项目采用 MIT 协议开源。详见 LICENSE 文件。