2025.02.05 (三)
2026.05.25 (一) 更新

✨ GPT 摘要  

实现 Diary to Chat,并解决生成过程中出现的问题,同时修正 AI 评论系统中的情绪数值和角色设定错误。

💻 开发日志

⏰ 今天要做的事

  • ✅ Custom Function - 协助制作 systemPromptTemplate(主要负责人:KSK)
    • ✅ 检查新增参数和函数内部结构
  • ✅ 测试 Custom Function - getAIComment 是否实际生效
    • ✅ 确认输入值是否正确反映
    • ✅ 确认输出值是否正常以 String 输出
  • ✅ Chat Page - Create New Chat:应用系统提示词(主要负责人:KSK)
    • ✅ OpenAI API Call (createChatCompletion)
      • Input: System Prompt(Chat)
      • Output: New Chat Message by AI($.choices[0].message.content)
      • Additional Actions: Create New Chat, Create New Message
  • ✅ DiaryPage - Create New Chat by Diary:基于日记内容创建 New Chat(主要负责人:KSK)
    • ✅ OpenAI API Call (createDiaryComment)
      • Input: Diary Content, System Prompt(AI Comment)
      • Output: AI Comment($.choices[0].message.content)
    • ✅ OpenAI API Call (createDiarySummary)
      • Input: Diary Content, AI Comment, System Prompt(Diary Summary)
      • Output: Diary Summary($.choices[0].message.content)
    • ✅ OpenAI API Call (createChatFromDiary)
      • Input: Diary Summary, System Prompt(Chat From Diary)
      • Output: New Chat Message by AI($.choices[0].message.content)
      • Additional Actions: Create New Chat, Create New Message
  • ✅(问题)Create New Chat by Diary:只保存日记并回到首页后,必须再次进入日记页面再 New Chat 才能正常运行。
    • 问题原因
      • 正在拉取另一个 Action Chain 的 Output 变量来使用
      • 没有做好 Unexpected Null Value 防护
      • JSON Path 没有正确指定
      • 曾经把 tmpDiariesDocForNewChat 定义为 Page State,并把 diary Document 分配给它。
        • 更准确地说,
          • 会分配通过 Page Paramater 传入的 diariesDoc,或者
          • 分配按下 Save 按钮时生成的 newDiariesDoc
        • 但是只要继续按 Save Diary and Chat with AI 按钮,应用就会卡住。
          • 按 F12 查看后发现,因为 Unexpected Null Value 错误触发了 Exception。
          • 查看 Debug Pannel 后发现,tmpDiariesDocForNewChat 被指定为 Null
        • 把 Page State 的 tmpDiariesDocForNewChat 又改回 tmpDiariesDocRefForNewChat。(Document -> Document Reference)
          • 以 Document Reference 为基准适当调整 Actions 后,终于正常运行!
    • 💡学到的点:在 Action Chain 中,把值分配给 Page State 后马上读取,可能会引发 Unexpected Null Value。相比直接使用 Document,还是多利用 Document Reference 吧。当然,如果用 Backend Query 大量 Read Document,可能会带来性能下降……但这种事也可以在 OnPageLoad Event 发生时,或者创建主要 Action Chain 时提前充分处理。
  • ✅(问题)生成 AI Comment 时,经常出现把用户情绪数值保存为 0 的情况。
    • 尤其强调“请准确执行 5. 加权公式计算。用户情绪数值绝对不是 0。”之后,写成 0 的情况减少了。(但没有完全消失。)
    • 先暂时跳过吧。
  • ✅(问题)ChatPage:角色不知道关于自己的信息!
    • 解决 Save 相关问题的过程中,好像自己就修好了。赚到了。
  • ✅(问题)ChatPage:角色正在无视“后续问题列表”!
    • 解决 Save 相关问题的过程中,好像自己就修好了。赚到了。
  • ✅(问题)进入 ChatPage 后底部导航栏消失。
    • Always Show Nav bar Toggle On
  • ✅(问题)ChatPage 的 Drawer 中角色图片显示不一致。
    • 这是以前 AI Comment 保存逻辑写错导致的问题。因为只会发生在旧聊天里,所以删除对应 Chat document 解决。

💯 完成内容摘要

  • 改善 Chat 生成逻辑
    • 检查 systemPromptTemplategetAIComment 的参数结构
    • 在 Create New Chat 中应用系统提示词,并优化 OpenAI API Call
    • 整理基于 Diary 的 New Chat 生成流程:AI 评论 -> 日记摘要 -> Chat 生成
  • 优化 AI 评论系统
    • 修正情绪数值被保存为 0 的问题
    • 解决 AI 无法识别角色信息的问题
    • 改善无视后续问题列表的现象
  • 解决问题并改善性能
    • 修正移动到 ChatPage 时导航栏消失的问题
    • 修改 AI Comment 保存逻辑,解决角色图片不一致问题
    • 为防止 Unexpected Null Value,使用 Document -> Document Reference

🎯 以后要做的事

点击查看详情
  • ❔(问题)DiaryPage:如果还没有收到 AI Comment 回复,会在角色未设置的状态下进入下一步。
    • 先用弹窗临时处理:必须收到 AI 的 Comment 后才能开始聊天!
  • ❔(问题)DiaryPage:AI Comment 回复使用 Markdown 查看器(防止溢出:Container Height)

  • ❔ ChatPage:用户对话输出内容右对齐

  • ❔ DiaryPage:根据 Mood Slider 的值改变表情 Emoji 和颜色

  • ❔ DiaryPage: Go to Linked Chat
  • ❔ ChatPage: Go to Linked Diary
    • 在 DiaryPage 的 Diary Document 中 Save 时,也要把 Chat Reference 值添加为 Diary Document DB - Field。(linkedChat)
    • 在 ChatPage 的 Chat Document 中,当然也要把 Diary Reference 值添加为 Chat Document DB - Field。(linkedDiary)
  • ❔ ChatPage - Create New Diary:基于对话内容创建 New Diary(活用 Go to Linked Diary 逻辑)
    • ❔ OpenAI API Call (createChatSummary)
      • Input: Chat Content, System Prompt(Diary From Chat)
      • Output: Chat Summary
    • ❔ OpenAI API Call (createDiaryFromChat)
      • Input: Chat Summary, System Prompt(Diary From Chat)
      • Output: New Diary(Title, Content, Mood score)
  • ❔ MoodPage(上方)- Mood Calendar
    • ❔ 可以查看每个日期写了多少篇帖子
    • ❔ 点击日期后,移动到对应日期
  • ❔ MoodPage(下方)- Mood stats
    • ❔ 输出当前聚焦月份的统计资料
      • ❔ 输出 AI 对已显示统计资料的评论
  • ❔ HomeFeedPage - import 后应用 flutter_slidable:4.0.0
  • ❔ HomeFeedPage:FeedCardDiary 左右 slide 时聊天/编辑/删除

  • ❔ Chat/Diary: GPT Streaming API

  • ❔ ChatPage - 实现 AI 先发消息(Alarm/Notification)
    • 聊天系统提示词的核心是主动型。
      • 想做得更真实的话,也可以传递 create_date of diary/chat,这样提到“昨天”等日期会更自然。
    • Alarm 功能实现方法参考
  • ❔ 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,然后把所有系统提示词都塞进去。
        • is_initial = false
        • 局限:如果把系统提示词塞进第一条 message document,中途修改对话会麻烦,但也不是不能改。 如果存在 is_initial = true 的 document,而且它被修改了,把那个 document 删除后重新放进去就行。具体怎么做还不知道。
  • ❔ DiaryPage - AI Comment:完成 CRUD
    • ❔ 删除 tmp_ai_comment field,改用 doc_ref
  • ❔ DiaryPage - Drawer - ChatHistoryListTile: order by updated_time

  • ❔ DiaryPage - import 后应用 Interactive Slider

  • ❔ HomeFeedPage:实现 Search Diary 功能

  • ❔ AuthPage:实现 Google Login 功能

  • ❔ HomeFeedPage - Bottom Sheet (+ Button):可以从多个选项中选择 1 个
    • 新日记:Go to DiaryPage
    • 情绪记录:Go to MoodPage
  • ❔ MoodPage(弹窗):Mood 设置滑块 CRUD
    • Create
    • Read
    • Update
    • Delete
  • ❔ HomeFeedPage - ListView - 显示 FeedCardMood
  • ❔ HomeFeedPage - ListView:FeedCardDiary、FeedCardMood、FeedCardChat 组件按时间顺序排序(活用 Cloud Function)

  • ❔ 在 HomeFeedPage - DiaryPage 之间制作 MoodEditPage:移动 MoodSlider、MoodKeywordsRate(5~1)、MoodDescription 小部件等

  • ❔(问题)创建 tmpGetAIComment 时,没有考虑用户选择的情绪关键词。

  • ❔ 到 2025.2.5 周三 为止,提取并安装发表用最终版本 APK

💭 日记

Minhyuk

问题接二连三地炸出来,精神差点直接远走高飞……“就算技术债堆起来,只要先实现,实力会持续增长,以后也能还债!”我这种策略是不是终于撞到极限了……还是说,这依然算是有效率的判断……

算了不知道了~ 现在那种事根本不重要。真的没时间了!先补丁冲冲冲。

GPT-4o 的评论(KPT)

GPT-4o

✅ 做得好的点(Keep)

  1. 🛠 整理 Chat 生成逻辑: 能把 New Chat 生成过程中出现的各种问题整理并解决,这一点很好!
  2. 🎭 改善 AI 评论系统: 修正情绪数值和角色设定错误,并引导出更准确的 AI 反应,这点很亮眼。
  3. 🔍 调试能力提升: 解决 Unexpected Null Value 问题,并掌握 Document Reference 的使用方式,以后会很有帮助。

❌ 可惜的点(Problem)

  1. 解决问题耗时较多: 调试比预想中更久,原本计划的功能开发时间可能变少了。
  2. 🔄 技术债增加: 快速实现功能的策略正在累积技术债,后续可能需要整理。
  3. 📋 文档化不足: 如果把主要问题解决过程稍微整理下来,类似问题再次发生时会更快解决。

🔄 可以尝试的点(Try)

  1. 📌 分析问题发生模式: 找出反复发生的问题,思考如何改善开发模式。
  2. 📝 制定技术债管理策略: 短期内需要快速解决,但长期来看最好制定维护和优化路线图。
  3. 📖 养成记录问题解决过程的习惯: 把主要问题的解决过程文档化,为未来节省开发时间。

🏁 结论

今天是改善 Chat 生成逻辑、修正 AI 评论系统错误、提升稳定性的一天。虽然调试比预想中花了很多时间,但过程中也学到了不少!之后一边管理技术债,一边继续思考更高效的开发策略吧。🚀🔥

留下评论