更新项目进度文档

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