今天 FocusFour 1.2 上线了 AI 智能分析功能,有朋友问我具体是怎么做的。刚好也想分享一下,今天和大家聊聊这个功能背后的思考和实现过程,以及我们为什么选择做一个克制点的 AI。
设计思路
这个功能最初的想法来自我的设计师合作伙伴 Marcus。我们经常讨论:如果 FocusFour 需要添加 AI 能力,怎么加最合适?
市面上有很多”智能”产品,号称懂你,实际上把你框在它的逻辑里,也并没有那么聪明。我们想要把 AI 做的简单点,也不影响用户的独立思考。
我们始终觉得工具应该帮我们思考,而不是替我们思考。
所以当我们设计 AI 分析功能时,核心原则很明确:
- 不替用户做决定,因为每个人对”重要”的理解不一样
- 只在需要时提醒,避免无意义的干扰
- 保持体验的愉悦,让功能本身就是一种享受
说实话,直接让 AI 排好所有任务优先级在技术上反而更简单。但我们没这么做。我们想要提醒你角落里被遗忘的任务,指出明显不符合四象限理念的任务,然后配合简单的体验来帮你解决这个问题。
实现思路
讨论完,Marcus 设计好之后,我来负责主导实现,AI 负责基础功能的开发,我负责鞭策指导调教它。
1. 模型选择:GLM-4.5 的意外之喜
一开始我们测试了很多模型,从免费的到昂贵的都试过。最终选择了智谱的 GLM-4.5,原因很简单:速度快、效果好、价格合理。
这里有个小插曲,我们本来想省钱用免费模型,结果发现效果实在不理想。AI 要么理解不了四象限概念,要么给出的建议重复,理由也非常奇怪。为了好的体验,最后还是需要选择聪明的模型。
2. 智能过滤:只分析真正需要的任务
为了避免用户疲劳和 AI 的无效调用,我们设计了一个预过滤机制。系统会先判断哪些任务真正需要 AI 建议:
- 长时间未处理的任务
- 象限归属可能有问题的任务
- 明显与四象限理念冲突的任务
这样做不仅节省了 token 成本,更重要的是减少了用户的决策疲劳。好的 AI 应该知道什么时候不说话。
3. 多轮对话:一次只做一件事
我们采用了对话式设计,每次只返回一个任务建议。用户可以逐个处理,后台同时并行预加载下一个建议。
这种设计看似”低效”,实际上符合人的认知习惯,AI 的处理速度也更快。否则一次性输入太多返回太多,需要等待的时间会很长。
4. 提示词优化:只有反复打磨
这部分没什么技巧,就是不断测试和优化。每个 AI 模型的”脾性”都不一样,同一个提示词在不同模型上效果差别很大。
我们花了很多时间让 AI 理解什么是真正有价值的建议。最终整理的提示词让 AI 能够:
- 准确理解四象限理念
- 给出具体而非泛泛的建议
- 不会重复建议相同的任务
- 保持建议的温和性,不像在说教
动画效果
功能逻辑做好了之后,难点出现在动画实现。我想要的效果是:当收到 AI 建议时,指南针自然丝滑地顺时针转到对应象限。
一开始用的是 SwiftUI 的标准动画,但问题很快暴露了:
- 有时会停顿再转动
- 转动速率不稳定
- 偶尔会转动多圈
- 无法基于当前实际角度计算最优路径
核心问题是:SwiftUI 动画的黑盒特性让我们无法精确控制动画过程。你告诉它从 A 转到 B,但它的具体插值逻辑你无法干预。
这时候如果没有开发基础,可能就会被困住。无论怎么和 AI 说”你做错了”,它也知道你想要什么效果,但就是实现不了。
最终我提示 AI 使用 DisplayLink 来手动驱动动画。通过控制每一帧的角度更新,确保任何时刻都能获取准确的视觉状态。
这样我们就能实现:
- 始终选择最短路径转动
- 恒定的转动速度
- 基于真实位置的精确控制
视觉效果
为了让指南针更有质感,我们加了两个视觉效果:
边缘反光:在四象限底层放了一个角度渐变的圆角矩形,跟随指南针旋转。光线从不同角度照射的感觉让界面更有立体感。
角度高光:上层覆盖半透明的角度渐变图片,同样跟随指南针旋转。这个细节让转动时的光影变化更自然。
说实话,这些效果可能有些用户不一定会注意到,但正是这些细节构成了使用时候的品质感。
用 Claude Code AI 协作
这次开发依然使用了 Claude Code,体验确实不错。它能理解整个项目的上下文,提供的建议也更有针对性。
但过程中也遇到了一些 AI 编程的典型问题:
- 需要开发者具备足够的技术判断力
- 关键时刻还是需要人来解决核心难题
好在最后问题都得到了解决。
写在最后
AI 让编程效率大大提升,但产品的灵魂依然需要人来注入。
我们可以让 AI 做很多事,但不代表我们应该让它做所有事。
FocusFour 目前的 AI 功能可能还不是最完美的方案,但它代表了我们的态度:技术应该温柔自然地融入生活。
FocusFour 1.4 已在 App Store 上线,欢迎体验。