347 lines
5.6 KiB
Plaintext
347 lines
5.6 KiB
Plaintext
|
||
````mdx
|
||
---
|
||
title: 从托盘提醒到 AI 桌宠:HGuard 的设计与进化路线
|
||
date: 2026-02-26
|
||
tags: [Rust, 桌面应用, 系统设计, AI, 桌宠]
|
||
---
|
||
|
||
# 从托盘提醒到 AI 桌宠:HGuard 的设计与进化路线
|
||
|
||
HGuard 最初只是一个非常简单的想法:
|
||
|
||
> 我需要一个能提醒我起立和喝水的工具。
|
||
|
||
作为一个长期写代码、写算法、折腾系统的人,我发现“久坐”不是偶然,而是一种常态。现有工具要么太重,要么过于商业化,要么缺少可扩展性。
|
||
|
||
于是我决定自己写一个。
|
||
|
||
但在实现基础功能之后,我意识到:
|
||
**它不应该只是一个提醒工具。**
|
||
|
||
我希望它最终成为:
|
||
|
||
- 一个后台健康守护系统
|
||
- 一个可交互的桌面存在体
|
||
- 一个具备 AI 对话能力的桌宠
|
||
- 一个能够理解当前屏幕内容的上下文助手
|
||
|
||
这篇文章记录 HGuard 当前的实现状态,以及未来明确、可执行的演进路线。
|
||
|
||
---
|
||
|
||
# 一、当前版本:一个稳定的后台健康守护核心
|
||
|
||
当前版本的 HGuard 已实现以下能力:
|
||
|
||
## 1. 托盘常驻
|
||
|
||
- 程序以托盘应用形式运行
|
||
- 不打扰桌面工作
|
||
- 支持随时退出或暂停
|
||
|
||
## 2. 可配置任务系统
|
||
|
||
使用 `config.toml` 管理任务,例如:
|
||
|
||
```toml
|
||
[[tasks]]
|
||
name = "stand_up"
|
||
interval_minutes = 60
|
||
message = "该起立活动一下了"
|
||
|
||
[[tasks]]
|
||
name = "drink_water"
|
||
interval_minutes = 20
|
||
message = "喝水时间到"
|
||
````
|
||
|
||
优点:
|
||
|
||
* 用户无需重新编译程序
|
||
* 扩展任务非常简单
|
||
* 未来可支持更多任务类型
|
||
|
||
## 3. 异步调度引擎
|
||
|
||
核心采用 async 架构,调度结构大致如下:
|
||
|
||
```
|
||
engine
|
||
├── scheduler
|
||
├── task
|
||
├── notifier
|
||
```
|
||
|
||
### engine
|
||
|
||
* 启动系统
|
||
* 加载配置
|
||
* 初始化任务
|
||
|
||
### scheduler
|
||
|
||
* 管理任务周期
|
||
* 基于时间轮或 interval 驱动
|
||
|
||
### task
|
||
|
||
* 定义任务状态
|
||
* 管理运行记录
|
||
|
||
### notifier
|
||
|
||
* 触发提醒
|
||
* 未来可扩展为多种通知形式
|
||
|
||
这种结构保证:
|
||
|
||
* 调度逻辑与通知逻辑解耦
|
||
* 可随时添加新类型任务
|
||
* 未来可平滑接入 AI 模块
|
||
|
||
当前版本定位非常明确:
|
||
|
||
> 一个稳定、轻量、后台运行的健康守护内核。
|
||
|
||
---
|
||
|
||
# 二、架构升级目标:模块分层与 AI 解耦
|
||
|
||
未来 HGuard 不会把 AI 写进核心模块,而是采用分层架构。
|
||
|
||
计划结构:
|
||
|
||
```
|
||
core/
|
||
engine.rs
|
||
scheduler.rs
|
||
task.rs
|
||
notifier.rs
|
||
|
||
ai/
|
||
llm_client.rs
|
||
context_memory.rs
|
||
screen_analyzer.rs
|
||
|
||
ui/
|
||
desktop_window.rs
|
||
interaction.rs
|
||
live2d_renderer.rs
|
||
|
||
system/
|
||
screen_capture.rs
|
||
permission.rs
|
||
```
|
||
|
||
原则:
|
||
|
||
* Core 不依赖 AI
|
||
* AI 作为增强能力存在
|
||
* UI 与 Core 通过 IPC 通信
|
||
|
||
这样可以保证:
|
||
|
||
* 即使 AI 模块崩溃,健康提醒仍然运行
|
||
* 可以替换不同 LLM API
|
||
* 可关闭屏幕分析功能
|
||
|
||
---
|
||
|
||
# 三、阶段性演进路线(可实施版本)
|
||
|
||
## Phase 1(已完成)
|
||
|
||
* 托盘运行
|
||
* 可配置任务
|
||
* 异步调度
|
||
* 基础通知系统
|
||
|
||
目标:稳定运行。
|
||
|
||
---
|
||
|
||
## Phase 2:桌面悬浮窗口
|
||
|
||
目标:让 HGuard “可见”。
|
||
|
||
### 实现步骤:
|
||
|
||
1. 使用 Tauri 或 winit 创建无边框窗口
|
||
2. 设置透明背景
|
||
3. 支持置顶
|
||
4. 支持拖动
|
||
5. 显示当前任务状态
|
||
|
||
这个阶段不接入 AI,只做 UI 可视化。
|
||
|
||
---
|
||
|
||
## Phase 3:接入 AI 文本生成
|
||
|
||
目标:让提醒“更有情绪”。
|
||
|
||
### 实现步骤:
|
||
|
||
1. 新建 ai/llm_client.rs
|
||
2. 支持 API Key 配置
|
||
3. 设计基础 Prompt:
|
||
|
||
```
|
||
你是一个桌面健康助理。
|
||
用户喜欢写代码。
|
||
提醒语气略带调侃但不过分。
|
||
```
|
||
|
||
4. 每次提醒时:
|
||
|
||
* 传入任务类型
|
||
* 生成变体提醒语
|
||
|
||
例如:
|
||
|
||
> 你已经连续写了 60 分钟代码了,是时候站起来救救你的脊椎了。
|
||
|
||
---
|
||
|
||
## Phase 4:屏幕理解能力
|
||
|
||
目标:实现“上下文感知”。
|
||
|
||
### 技术路线:
|
||
|
||
1. 每 N 秒截屏(默认关闭)
|
||
2. OCR 提取文本
|
||
3. 或调用多模态模型
|
||
4. 生成 contextual 对话
|
||
|
||
示例:
|
||
|
||
* 当前在 VSCode
|
||
* 正在编辑 Rust 文件
|
||
* 超过 2 小时未切换窗口
|
||
|
||
生成:
|
||
|
||
> 你是真的喜欢 Rust,还是只是逃避现实?
|
||
|
||
⚠ 必须提供隐私开关。
|
||
|
||
---
|
||
|
||
## Phase 5:Live2D 桌宠
|
||
|
||
目标:可视化人格。
|
||
|
||
### 技术选型:
|
||
|
||
推荐:
|
||
|
||
* 前端 + Live2D SDK
|
||
* Rust 后端通过 IPC 通信
|
||
|
||
实现:
|
||
|
||
* 不同情绪切换动画
|
||
* 提醒时触发动作
|
||
* 被点击时触发对话
|
||
|
||
---
|
||
|
||
## Phase 6:情绪系统与记忆系统
|
||
|
||
定义简单状态机:
|
||
|
||
* Idle
|
||
* Reminder
|
||
* Playful
|
||
* Concerned
|
||
|
||
记录:
|
||
|
||
* 今日提醒次数
|
||
* 忽略次数
|
||
* 活跃时长
|
||
|
||
形成持续人格。
|
||
|
||
---
|
||
|
||
# 四、性能与隐私设计原则
|
||
|
||
在设计 AI 桌宠时必须考虑:
|
||
|
||
## 1. 不高频截图
|
||
|
||
默认关闭屏幕理解。
|
||
|
||
## 2. 本地优先
|
||
|
||
优先本地 OCR 或模型。
|
||
|
||
## 3. 明确告知用户
|
||
|
||
说明:
|
||
|
||
* 截图是否上传
|
||
* 是否保存数据
|
||
* 是否长期存储
|
||
|
||
健康工具不应成为监控工具。
|
||
|
||
---
|
||
|
||
# 五、最终愿景
|
||
|
||
HGuard 的终极形态不是一个简单工具,而是:
|
||
|
||
* 一个长期运行的后台守护系统
|
||
* 一个具备情境感知能力的桌面助手
|
||
* 一个拥有轻量人格的陪伴型 AI
|
||
|
||
它不会干扰工作。
|
||
|
||
但它会存在。
|
||
|
||
---
|
||
|
||
# 六、当前进度总结
|
||
|
||
已完成:
|
||
|
||
* 核心调度系统
|
||
* 配置驱动任务
|
||
* 托盘常驻
|
||
* 异步架构
|
||
|
||
正在进行:
|
||
|
||
* UI 可视化方案设计
|
||
* AI 接口抽象
|
||
|
||
下一步:
|
||
|
||
* 实现桌面悬浮窗口
|
||
* 接入基础 LLM API
|
||
|
||
---
|
||
|
||
# 七、为什么要做这个项目?
|
||
|
||
因为我发现:
|
||
|
||
健康不是“知道该做什么”,
|
||
而是需要一个系统长期提醒你。
|
||
|
||
而陪伴也不是“热闹”,
|
||
而是一个持续存在的反馈体。
|
||
|
||
HGuard 试图把这两件事结合起来。
|
||
|
||
这是一个长期项目。
|
||
|
||
它不会一蹴而就。
|
||
|
||
但它会持续进化。
|
||
|
||
``` |