2025.01.31 (五)
2026.05.25 (一) 更新

✨ GPT 的摘要  

使用 OpenAI API 和 FlutterFlow 构建 AI Comment 系统,通过联动 Custom Function 与 API Call 扩展 Keymory 的 AI 功能。还追加了角色选择与保存功能,并整理了 Chat 和 Diary 之间的数据流。

💻 开发日志

⏰ 今天要做的事

  • How to Use Open AI’s GPT-4o in FlutterFlow - Part 1
  • How to Use Open AI’s GPT-4o in FlutterFlow - Part 2

  • ✅ ChatPage - 用 Dropdown 选择角色时,把对应角色信息一起保存到 Chats Collection
    • 将与 character name 一致的 Character documentreference 分配到 Page state。
  • ✅ ChatPage - 创建 NewChat 时也一并传递角色信息。

  • ✅ 帮助创建 DiaryPage - Drawer - ChatHistoryListTile(像 GPT 那样)

  • ✅ 试着把 CustomFunction tmpGetAIComment 的函数值放进 API Call createDiaryComment
    • ✅ 创建 CustomFunction tmpGetAIComment 并测试结果值输出
    • ✅ 创建 API Call createDiaryComment 并测试 Response 值输出
  • ✅ 创建 OpenAI API Call:createDiaryComment
    • 基本上是和 createChatCompletion 相似的结构
    • 不同点:没有。只是为了区分才创建。
    • API Call - createDiaryComment 所需的 Messages Variable 是 custom function getAIComment 的返回值。
  • ✅ 构思 CustomFunction getAIComment 的实现场景(实际实现由 KSK 负责)
    • Characters (Collection) 获得的 Parameter Values
      • 角色设置(Character Document)
        • ex) Somi:name(20 多岁)、大学生、害羞的性格,……
      • 值调用方式:API Call - Get Assistant
    • User Information 获得的 Parameter Values
      • 姓名、性别、MBTI
      • 值调用方式:Backend Query - Authenticated User
    • DiaryPage Variables 获得的 Parameter Values
      • 日记内容、细分情绪关键词、情绪数值、回答格式、回答长度
      • 值调用方式:Widget State, Page State
    • CustomFunction(getAIComment) 的作用
      • 把所有 Parameter Values 都作为 Input 值接收。
      • 编写要发送给 GPT 的 prompt。
      • 返回 MessagesList <Json>)值。
        • [{"role":"developer", "content":"~~~"}]

💯 已完成事项摘要

  • AI Comment 系统实现
    • 创建 Custom Function tmpGetAIComment,并完成与 API Call createDiaryComment 的联动
    • 实现用于 AI Comment 的 OpenAI API 请求及响应处理逻辑
    • 修改为将角色信息保存到 Chats Collection,并在创建 New Chat 时一起传递
  • UI 与功能改进
    • 创建 ChatHistoryListTile,实现 GPT 风格的聊天列表
    • 整理 HomeFeedPageDiaryPage 的数据结构
    • 设计 getAIComment Custom Function
  • FlutterFlow + OpenAI API 学习
    • 学习并应用 GPT-4o 使用教程(Part 1 & Part 2)

🎯 以后要做的事

  • ❔ DiaryPage:Merge CreateDiary/EditDiary Page
    • 使用 isEditMode page state
    • 使用 conditional value/visibility/action 等
  • ❔ DiaryPage - Create New Chat:基于日记内容创建 New Chat
    • AI 先根据日记内容提出问题
  • ❔ 问题修复
    • ❔ ChatPage:第一次开始对话时,会出现 default init message。
    • ❔ ChatPage:日期没有应用。
    • ❔ ChatPage - ChatHistoryDrawer:UI 溢出
    • ❔ DiaryPage:日期总是保存为今天
    • ❔ DiaryPage:使用 markdown viewer(防止溢出:Container Height)
  • ❔ HomeFeedPage - import 后应用 flutter_slidable:4.0.0
  • ❔ HomeFeedPage:在 FeedCardDiary 左右 slide 时聊天/编辑/删除

  • ❔ ChatPage - Create New Diary:基于对话内容创建 New Diary
  • ❔ ChatPage - Go to Linked Diary

  • ❔ Chat/Diary:GPT Streaming API

  • ❔ ChatPage - Alarm

  • ❔ AuthPage:Google Login

  • ❔ DiaryPage:根据 Mood Slider 值改变脸部表情 Emoji
  • ❔ DiaryPage:追加细分情绪关键词 Choice Chips 后设置 DB 联动
  • ❔ DiaryPage - AI Comment:把 Choice chips、mood slider 等输入值改成适合 AI Comment System Prompt 的形式。
    • ❔ **之前的 日记 或全部 对话记录(临时补上的技术债)
    • 用户基本信息:姓名、性别、MBTI、……
    • 细分情绪关键词:开心、难过、……
    • 角色设置:Somi、Sena、Minhyuk
    • 情绪数值:1~100 分
    • 回答格式:治愈型(Healing)、建议型(Suggestion)、信息型(Informative)
    • 回答长度:简短、普通、详细
    • is New Chat
      • 因为该 Chat 的 messages 是第一次创建,所以给第一个创建的 message document 设置 is_initial = true,然后把所有 system prompt 都塞进去。
        • is_initial = false
        • 限制:如果把 system prompt 塞进最开始的 message document,虽然对话中途修改会比较困难,但也不是不可能。 如果存在 is_initial = true 的 document,而且它被修改了,那把那个 document 删除再放回去就行。具体怎么做我还不知道,但总归能想办法。
  • ❔ DiaryPage - AI Comment:完成 CRUD
    • ❔ 删除 tmp_ai_comment field,改用 doc_ref
  • ❔ DiaryPage - AI Comment:角色设置
    • ❔ 删除 tmp_ai_comment_by field,改用 doc_ref
    • ❔ 用 profile_image field 值输出图片
  • ❔ DiaryPage - Drawer - ChatHistoryListTile:order by updated_time

  • ❔ HomeFeedPage - Bottom Sheet(+ Button):可以在多种选项中选择 1 个
    • 新日记:Go to DiaryPage
    • 情绪记录:Go to MoodPage
  • ❔ MoodPage(popup):Mood 设置 slider CRUD
    • Create
    • Read
    • Update
    • Delete
  • ❔ HomeFeedPage - ListView:显示 FeedCardMood
  • ❔ HomeFeedPage - ListView:按时间顺序排序 FeedCardDiary, FeedCardMood, FeedCardChat component(使用 Cloud Function)

  • ❔ HomeFeedPage:解决 On page load 时的问题(Unexpected Null Value)
  • ❔ DiaryPage - import 后应用 Interactive Slider

  • ❔ ChatPage - 实现 AI 先开口(Alarm/Notification)
    • 聊天系统 prompt 的核心是主动性。
      • 想做得更真实的话,也可以传递 diary/chat 的 create_date,这样提到“昨天”之类的日期会更自然。
  • ❔ 到 2025.2.5 周三 为止,提取并安装发表用最终版本 APK

💭 日记

闵赫

好玩,但也真够累。凌晨 5 点才睡。

keymory-1.png

GPT-4o 的评论(KPT)

GPT-4o

✅ 做得好的地方(Keep)

  • 🚀 扩展 AI Comment 功能: 通过联动 Custom Function 和 API Call,系统性地搭建了生成并保存 AI Comment 的逻辑,这一点很突出。
  • 🛠️ 整理数据流: 改进 Chat 和 Diary 之间的连接,并整理角色信息的保存和使用方式,会对项目推进有很大帮助。
  • 📋 FlutterFlow + OpenAI API 学习: 通过 GPT-4o 教程学习在 FlutterFlow 中有效使用 OpenAI API 的方法,并实际应用,这一点很令人印象深刻。

❌ 可惜的地方(Problem)

  • 工作强度过载: 工作一直持续到凌晨 5 点,疲劳累积的可能性正在变大。
  • 🏗️ 技术债增加: 部分功能用临时解决方式(tmp field 和补丁代码)实现,之后会需要整理。

🔄 可以尝试的地方(Try)

  • 调整工作时间: 如果继续通宵工作,生产力可能会下降,可以考虑调整日程。
  • 🔍 制定临时代码改善计划: 整理当前应用的临时逻辑,并制定正式数据模型的构建计划。
  • 🛠️ 改进 AI Comment: 寻找让 AI Comment 相关功能更直观的方法,也可以考虑优化 system prompt。

结论
今天是正式实现 Keymory 的 AI 功能,并提高 OpenAI API 与 FlutterFlow 使用度的一天。不过工作强度正在升高,看来需要调整日程并整理代码。希望能在发表日之前以最佳状态收尾!💪😊

留下评论