UKA-GYRE 開発記 ― 読み物編 第3回
前回の記事:
この記事は「UKA-GYRE 開発記」 読み物編 第3回 です。
難しい専門的知識は出てきません。
エンジニアでない方も安心してお読みください。
1. 1つのExcelに詰まった30日間の人生
某ダイエットアプリからエクスポートされたExcelファイル。
中身は1日1行のシンプルな表で、体重、摂取カロリー、タンパク質、脂質、炭水化物などの数字が30日分ずらっと並んでいる。
一見すると、ただの数字の羅列だ。
味気ない。
どこにもドラマはない。
でも、よく見てほしい。
この数字の一つひとつに「物語」がある。
たとえば金曜日の3,200kcal。
これは何だろう。
友人の誕生日パーティーで楽しく食べた日かもしれない。
仕事のストレスで爆食いした夜かもしれない。
あるいは、昼食の記録を忘れて夜にまとめて「たぶんこれくらい」と入力した結果かもしれない。
同じ「カロリーオーバー」でも、意味が全然違う。
祝いの席で食べた3,200kcalなら、「楽しめましたね。週末で調整しましょう」が正解。
ストレスによる過食なら、「何かありましたか?無理しないでくださいね」が正解。
そもそも記録が雑なだけなら、「入力の精度を上げましょう」が正解。
ベテランのトレーナーは、クライアントとの日々の会話や経験からこの「裏の物語」を読み取る。
「あ、先週飲み会って言ってたな」「最近仕事が忙しいって話してたな」と。
では、会話を交わすことなく、Excelの数字しか見えないAIは、どうやってこの物語に触れることができるのか。
2. 数字を「歴史」として読み解く
このシステムのAIは、1日分のデータだけを見て判断しない。
30日分を「1本の物語」として通して読む。
週ごとの平均値を計算し、体重やカロリーのトレンドを把握する。
すると
- 「月曜はいつもカロリーが低い(仕事が忙しい)」
- 「土曜は高い(外食が多い)」
- 「水曜だけタンパク質が多い(ジム帰りのプロテイン)」
といった、その人の生活リズムが浮かび上がってくる。
2.1. 「点ではなく線で読む」理由
この「点ではなく線で読む」視点が、なぜ決定的に重要なのか。一つ例を出したい。
ある日のデータ:摂取カロリー 2,800kcal、目標を500kcalオーバー。
この日だけ見たら「食べすぎです」と言いたくなる。素朴なAIなら確実にそう言う。
ところが週全体を見ると景色が一変する。
この人の週平均は1,900kcalで、目標を200kcal下回っている。
週の前半にしっかり節制した上で、この日だけ少し多めに食べただけだ。
この人に「食べすぎです」と言うのは、的外れどころか有害だ。
6日間頑張って節制してきた人のやる気を、たった一言で粉砕する。
正解は「今週は素晴らしいペースですね。1日くらい多めに食べても全く問題ありません」だ。
同じ2,800kcalが、文脈次第で「失敗」にも「ご褒美」にもなる。
だからこのシステムでは、日単位のデータだけでなく週平均や全体の傾向を踏まえた「内部ラベル」を自動計算している。
「今日」を「30日間の歴史の中」に位置づけた上で、AIにコメントを書かせる。
これが、ナイーブな汎用チャットボットとの決定的な違いだ。
3. トレーナーの「意図」を伝える5軸のラベル
数字の分析だけでは、まだ足りない。
なぜなら、同じデータを見ても、トレーナーによって指導方針が異なるからだ。
このシステムでは、トレーナーが5つの「ラベル」を選択してAIに渡す。
長期方針 ―― ローファット、バランス型、糖質管理など、この人の食事指導の大きな方向性。
現在の戦略 ―― 今まさに取り組んでいる具体的なアプローチ。
「まずは食事量の把握から」とか「PFCバランスの改善」など。
提案戦略 ―― 次のステップとしてトレーナーが考えている方針。
フェーズ ―― 減量期、維持期、増量期など、ダイエット全体のどのフェーズにいるか。
特殊状況 ―― 体調不良、旅行中、生理期間中など、通常とは異なる事情。
「これ、全部AIが自動判定すればいいのでは?」と思うかもしれない。
たしかに、データだけ見ればある程度は推測できる。
でも、あえて自動にしていない。
なぜなら、これらのラベルは「データの事実」ではなく「トレーナーの意図」を表しているからだ。
同じ「カロリーが目標を下回っている」データでも、「順調です、この調子で」と伝えたいトレーナーもいれば、「少し食べる量を増やしましょう」と伝えたいトレーナーもいる。
それはデータからは判断できない。
トレーナーの判断、つまり「意図」があって初めて決まる。
AIに意図を伝える手段。
それがこの5軸ラベルだ。
4. 体重計に乗れなかった日のデータ
ここまで「データがある前提」で話してきたが、現実はそう甘くない。
30日分のデータに歯抜けがある。
体重が記録されていない日。
カロリーがゼロの日。
体重が1日で3kg増えている明らかにおかしい数値。
これはダイエット経験者なら痛いほどわかる話だと思う。
体重を記録しなかった日というのは、たいてい「乗りたくなかった日」だ。
前日に食べすぎて、結果を見るのが怖い朝。
連休明けで現実を直視したくない月曜日。
体重計の前に立って、そっと踵を返した経験がある人は少なくないだろう。
つまり「データがない」ということ自体が、実は重要な情報だ。
4.1. 欠損データへのスタンス
このシステムは、欠損データに対してパニックを起こさない。
データがない日は「ない」という事実を織り込んだ上で分析を調整する。
無理に推測せず、でも無視もしない。
「記録が途切れている期間がありますが、記録できた日のデータはしっかり分析されています」というスタンスで、クライアントを責めない方向に設計されている。
完璧なデータなんて存在しない。
現実のデータは穴だらけで、ノイズだらけだ。
教科書のように綺麗に揃った30日分のデータが送られてくることのほうが珍しい。
そういうものとして扱う前提で、システムは作られている。
データの不完全さを受け入れること。
これは実はトレーナーの姿勢と同じだ。
記録できなかった日を責めるのではなく、記録できた日を認める。
AIもそうあるべきだと考えた。
5. AIに渡す「設計図」の全体像
ここまでの話をまとめよう。
AIがコメントを書くとき、日次の食事データ以外に手元にあるのはこれだ。
-
MBTIスタイル ―― 第1回で紹介した、16タイプに応じた語り口。
-
分析済みデータ ―― 30日分の食事データを、トレンドや内部ラベルに変換したもの。
-
RAGの知識 ―― 第2回で紹介した、過去の成功パターンやお手本コメント。
-
戦略ラベル ―― トレーナーが選んだ5つの意図。これは 補助 として方向性を示すもの。
これらが揃ったとき、何が起きるか。
たとえば、今朝の体重が昨日より0.4kg増えていたとする。
素朴なAIなら「体重が増加しています。食事を見直しましょう」と言うだろう。
クライアントの心は折れる。昨日あんなに我慢したのに。
でもこのシステムは、そんなコメントを書かない。
トレンド分析が「週平均は先週より0.3kg減少。順調な下降トレンドの中にいる」と告げる。
内部ラベルが「体重変動:一時的増加(トレンド内)」と判定する。
30日間の履歴が、この人は2週間前にも同じパターン ―― 外食翌日に1kg以上増え、3日で戻っている ―― を経験していると示す。
戦略ラベルの「減量フェーズ・バランス型」が、ここで焦って制限を強めるべきではないと方向づける。
全部つながる。
AIが書くのは「体重が増えました」ではない。
「昨日の外食の影響で一時的に増えていますが、週平均はしっかり下がっています。2週間前も同じパターンで3日で戻りましたよね。今週の流れは順調なので、いつも通りで大丈夫です」
のような生成が可能になる。
今日の1食を、30日間の物語の中に位置づける。
トレーナーの意図を汲み取り、その人の性格に合った言葉で届ける。
点ではなく、線として語る。
これが、 カロリーの数字の裏にある物語を理解する ということだ。
次回は、この「設計図」をAIにどうやって伝えるのかという話。
情報を渡せば勝手に良いコメントが出てくるほど、AIは単純ではなかった。
プロンプトエンジニアリングという名の試行錯誤の物語を、お楽しみに。
コラム:体重計が「嘘をつく」日
ダイエット経験者なら、こんな経験があるだろう。
昨日より1.5kg増えている。何も食べすぎていないのに。実は、体重は1日で最大2kg前後変動する。
水分、塩分、食事のタイミング、睡眠、ホルモン周期。体脂肪とは無関係な要因だらけだ。
ラーメンを食べた翌朝に1kg増えるのは、塩分で体が水を溜め込んだだけ。脂肪が1kg増えるには約7,200kcalの過剰摂取が必要で、ラーメン1杯では物理的に不可能だ。つまり、毎朝の体重計は「今日の水分量」を表示しているにすぎない。
それなのに、多くの人がこの数字に一喜一憂して、ダイエットを挫折する。本文で書いた「点ではなく線で読む」というのは、まさにこの問題の解決策だ。
1日の数字は嘘をつく。でも、1週間の平均は嘘をつけない。体重計を信じるな。トレンドを信じろ。
AIがやっているのは、人間の感情に左右されない「冷静な目」でデータを読むことなのだ。
次回の記事:
「UKA-GYRE」開発記 シリーズ目次
読み物編 --- エンジニアでなくても楽しめる!
- プロローグ ― UKA-GYRE 開発記
- 読み物 第1回 ― ISTJには数字を、ENFPには共感を ― AIに「性格」を与えた日
- 読み物 第2回 ― 深夜3時はAIの経験値稼ぎタイム ― 「昇華」のメカニズム
- 読み物 第3回 ― カロリーの数字の裏にある物語 ― AIが「今日のあなた」を理解するまで(この記事)
- 読み物 第4回 ― 「何を書くか」より「どう伝えるか」 ― AIを使った大人の実験科学
- 読み物 第5回 ― 「AIが書いた」ではなく「AIと一緒に書いた」 ― Human-in-the-Loopという思想(完結)
- 読み物 番外 ― 自分が作ったAIに食べ過ぎを怒られ続けた話 ― 開発者の裏側
技術深掘り編 --- 設計判断と実装の詳細