更新项目进度文档
This commit is contained in:
@@ -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 或完整消息正文。
|
||||||
|
|
||||||
|
当前对话历史保存在内存中,请求上下文只截取最近部分历史。后续仍需要补充内存历史上限和可选持久化策略。
|
||||||
|
|
||||||
## 素材版权说明
|
## 素材版权说明
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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. 是否需要把对话历史持久化保存,还是第一版只保留内存会话
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user