更新项目进度文档

This commit is contained in:
2026-05-30 00:56:28 +08:00
parent a3330a5937
commit d2793cad9c
3 changed files with 117 additions and 44 deletions
+39 -12
View File
@@ -1,6 +1,6 @@
# QtDesktopPet
QtDesktopPet 是一个基于 Qt Widgets / C++17 的 Windows 桌面宠物原型项目。当前目标是完成轻量桌宠内核:透明无边框窗口、PNG 序列帧动画、多状态切换、托盘隐藏、配置保存和基础日志
QtDesktopPet 是一个基于 Qt Widgets / C++17 的 Windows 桌面宠物原型项目。当前目标是完成一个轻量桌宠内核,并在此基础上接入用户自定义的大模型对话能力
## 当前状态
@@ -17,14 +17,26 @@ QtDesktopPet 是一个基于 Qt Widgets / C++17 的 Windows 桌面宠物原型
- 隐藏时暂停动画,显示时恢复动画
- 保存窗口位置和置顶状态
- 文件日志和基础轮转
- 设置窗口
- AI Provider 分组配置
- Windows DPAPI 加密保存 API Key
- 非 Windows 环境经用户确认后明文保存 API Key
- OpenAI Compatible 聊天请求
- SSE 流式输出
- 聊天输入框
- AI 回复气泡
- 对话历史面板
- AI 请求取消和对话清空
尚未实现:
- AI 对话
- AI 配置界面
- ChatBubble 气泡
- SettingsDialog
- Google / Claude 原生协议 Provider
- 设置页内 AI 连通性测试
- 缩放和性能模式 UI
- AppConfig 中缩放 / 性能字段的实际应用
- 角色导入/切换界面
- 对话历史持久化
- 角色包懒加载
- 打包发布脚本
## 技术栈
@@ -118,26 +130,41 @@ QStandardPaths::AppConfigLocation/logs/QtDesktopPet.log
- 最多保留 3 个旧日志文件
- 文件名为 `QtDesktopPet.log.1``QtDesktopPet.log.2``QtDesktopPet.log.3`
## AI 计划
## AI 配置和聊天
项目计划支持 OpenAI Compatible API,但当前尚未接入 AI。
当前正式聊天使用 OpenAI Compatible 协议。已提供以下 Provider 配置入口:
后续目标:
- OpenAI
- Google
- Claude
- DeepSeek
- Custom
其中 OpenAI、DeepSeek、Custom 走 OpenAI Compatible 形式配置。Google 和 Claude 当前主要是配置预留,正式聊天运行时还未接入对应原生协议。
已支持:
- 用户自定义 Base URL
- 用户自定义 API Key
- 用户自定义 Model
- 非流式对话请求
- 用户自定义 Path
- 超时、Temperature、Max Tokens
- 流式输出
- 请求中切换 `think`
- 回复时切换 `talk`
- 收到首段输出后切换并保持 `talk`
- 失败时切换 `error`
- API Key 不写入日志,不在错误提示中完整显示
- 对话历史面板记录用户消息和 AI 最终回复
AI 测试入口已从角色右键菜单移除,后续会放入设置页。
## 隐私说明
当前版本没有 AI 网络请求
程序只会把用户消息发送到用户自己配置的接口。用户需要自行判断第三方代理、中转服务或自建服务是否可信。项目不会默认承诺第三方接口的隐私安全
后续接入 AI 后,程序只会把用户消息发送到用户自己配置的接口。用户需要自行判断第三方代理、中转服务或自建服务是否可信。项目不会默认承诺第三方接口的隐私安全
日志会记录请求诊断信息,例如 Provider、Base URL 主机、Path、HTTP 状态码、响应大小、错误摘要等;日志不应记录完整 API Key、Authorization Header 或完整消息正文
当前对话历史保存在内存中,请求上下文只截取最近部分历史。后续仍需要补充内存历史上限和可选持久化策略。
## 素材版权说明
+17 -1
View File
@@ -1653,7 +1653,7 @@ README 至少说明:
## 25. 当前版本总结
当前版本只做桌宠内核。
当前版本已经从桌宠内核推进到最小 AI 对话闭环
核心是:
@@ -1664,6 +1664,10 @@ PNG 多状态帧动画角色包
轻量状态机
OpenAI Compatible 自定义 AI 接口
AI 对话与桌宠动画联动
SSE 流式输出
聊天输入框、回复气泡和对话历史面板
按 Provider 分组保存 AI 配置
Windows DPAPI 加密保存 API Key
低资源占用
MIT License 开源
```
@@ -1673,3 +1677,15 @@ MIT License 开源
```text
先创建一个可运行、可对话、可换角色、资源占用低、后续容易扩展的 Qt 桌宠项目。
```
当前仍需补齐:
```text
1. 设置页内 AI 连通性测试
2. Google / Claude 原生协议 Provider,或在 UI 中明确提示暂未接入
3. 对话历史内存上限和可选持久化
4. AppConfig 中缩放、性能模式等字段的实际应用
5. character.json 中 base、anchor、bubble offset 的解析与应用
6. 角色包位置整理、角色切换和懒加载策略
7. 发布前素材授权确认与打包验证
```
+61 -31
View File
@@ -522,10 +522,12 @@ error 20 帧
```text
1. 阶段 0 工程基础:
已有 .gitignore、CMakeLists.txt、main.cpp、src/、docs/、resources/ 等基础结构
已有 .gitignore、CMakeLists.txt、main.cpp、src/、docs/ 等基础结构
LICENSE 已采用 MIT,版权主体为 Make
2. 阶段 1 最小桌宠窗口:
已实现透明无边框窗口、拖动、右键退出、置顶切换
已实现透明无边框窗口、拖动、右键菜单、置顶切换
已支持双击桌宠打开聊天输入框
3. 阶段 2A 角色包最小读取:
已有 CharacterPackage / CharacterPackageLoader
@@ -538,24 +540,45 @@ error 20 帧
5. 阶段 3 状态机初版:
已新增 PetStateMachine
已支持 idle / drag / think / talk / happy / sleep / error 的基础请求、拖动优先和缺失状态回退 idle
已补充流式聊天过程中的状态保持:等待首段回复时保持 think,输出期间保持 talk
6. 阶段 4 基础设施的一部分
6. 阶段 4 基础设施:
已新增 PetView,拆分显示职责
已新增 TrayController,支持托盘显示、隐藏、退出
已新增 ConfigManager,保存窗口位置置顶状态
已新增 ConfigManager,保存窗口位置置顶状态和部分预留性能字段
已新增 Logger,支持文件日志和基础轮转
7. 阶段 5 稳定性与性能检查:
已做过一轮人工稳定性观察,包括静置、idle 动画、托盘隐藏/显示、重复状态切换和资源损坏兜底
当前尚未形成自动化性能测试或长期压测记录
8. 阶段 6 AI 接入:
已新增 LLMProvider / OpenAICompatibleProvider / ConversationManager
已支持 OpenAI Compatible 异步请求、超时、取消、错误提示和网络诊断日志
已支持 SSE 流式输出,气泡中流式显示,历史面板只记录最终对话
已限制同一时间只允许一个 AI 请求
已避免在日志中输出完整 API Key 和完整消息正文
9. 阶段 7 UI 基础优化:
已新增 ChatBubble、ChatInputDialog、ChatHistoryPanel、SettingsDialog
已支持右键聊天、显示对话、取消 AI 请求、清空对话、设置
已删除临时 AI 测试入口和气泡测试入口
已支持 OpenAI / Google / Claude / DeepSeek / Custom 配置分 Provider 保存
Windows 下 API Key 使用 DPAPI 加密保存,非 Windows 需用户确认后才允许明文保存
```
当前实现与计划仍存在差异:
```text
1. shiroko 角色包仍位于项目根目录 shiroko/,尚未移动到 resources/characters/shiroko
2. 当前未实现 AI 接入、AI 配置界面和 ChatBubble
3. 当前未实现 SettingsDialog
4. 当前 ConfigManager 只保存窗口位置和置顶状态,尚未保存缩放、性能模式角色选择
5. 当前 Logger 只接入启动、退出、配置和角色包加载失败等低频日志
6. 当前 FrameAnimator 采用当前角色包全部状态帧预加载,尚未做懒加载
7. 本轮架构调整后尚未执行构建、编译或运行验证
2. Google / Claude 目前只有配置入口,正式聊天运行时仍只接入 openai-compatible 协议
3. SettingsDialog 仍是最小设置界面,尚未包含 AI 测试按钮、应用设置、角色选择、缩放和性能模式 UI
4. ConfigManager 已有缩放和性能字段,但 PetWindow 尚未真正应用缩放、性能模式角色选择
5. CharacterPackage 尚未解析并应用 character.json 中的 base、anchor、bubble offset
6. ConversationManager 请求上下文会截取最近 12 条历史,但内存中的 m_history 尚未做最大长度裁剪
7. 当前 FrameAnimator 采用当前角色包全部状态帧预加载,尚未做懒加载
8. README 和开发文档已开始同步当前进度,但仍需随功能继续维护
9. 最近一次流式状态修正已本地提交,推送时遇到远程认证失败,需要重新认证后推送
```
---
@@ -565,26 +588,32 @@ error 20 帧
短期建议:
```text
1. 在用户确认后做一次构建验证
2. 修复构建或静态检查发现的问题
3. 补最小 README.md,记录当前开发状态、构建方式、素材版权提示
4. 确认 LICENSE 是否采用 MIT
5. 在进入 AI 前,做一次桌宠内核稳定性检查:
- 启动显示
- idle 动画
- 状态切换
- 托盘隐藏 / 显示
- 配置保存 / 恢复
- 日志写入 / 轮转路径
1. 解决远程仓库认证问题,并推送本地提交
2. 用户手测流式状态修正:
- 发送消息后等待阶段应保持 think
- 等待阶段拖动松开应回到 think
- 收到首段回复后应进入 talk
- 长文本流式输出期间应持续 talk
3. 给 ConversationManager 增加内存历史上限,避免长期对话无限增长
4. 把 AI 测试能力迁移到后续设置页,不再放在角色右键菜单
5. 更新设置页结构,为 AI、应用、角色、性能分区预留位置
```
中期建议:
```text
1. 补 SettingsDialog 的最小框架
2. 补 ChatBubble
3. 再接入 OpenAI Compatible 非流式 AI 对话
4. AI 接入后再做 think -> talk -> idle / error -> idle 状态联动
1. 完善设置界面:
- AI 配置和测试
- 置顶、缩放、性能模式
- 角色包路径和角色切换
2. 应用 AppConfig 中已有但尚未落地的字段:
- scale
- performanceMode
- pauseWhenHidden
- enableLazyLoad
3. 解析并应用角色包 base / anchor / bubble 配置
4. 评估是否移动 shiroko 到 resources/characters/shiroko
5. 补一轮可重复的稳定性与性能测试记录
```
---
@@ -594,10 +623,11 @@ error 20 帧
后续开始写代码前,需要逐项确认:
```text
1. 是否创建 MIT LICENSE
2. 是否创建项目根 README.md
3. 是否把 shiroko 移动到 resources/characters/shiroko
4. 是否保持当前“预加载全部当前角色状态帧”的策略,还是改成按状态懒加载
5. shiroko 素材是否允许作为正式开源发布素材继续保留在仓库中
6. 是否在下一步执行构建验证
1. 远程仓库认证失败,当前本地提交尚未推送成功
2. 是否把 shiroko 移动到 resources/characters/shiroko
3. 是否保持当前“预加载全部当前角色状态帧”的策略,还是改成按状态懒加载
4. shiroko 素材是否允许作为正式开源发布素材继续保留在仓库中
5. Google / Claude 是先禁用正式聊天提示,还是继续实现原生 Provider
6. 设置页下一步先做 AI 测试入口,还是先做应用缩放 / 性能设置
7. 是否需要把对话历史持久化保存,还是第一版只保留内存会话
```