5歳児向けリアルタイムAIチューターの構築
本記事では、4〜9歳の子ども向けに数学と読書を教えるリアルタイムAIチューターのエンジニアリング上の課題とアーキテクチャ決定について説明します。中核となる課題は、教育学を統合しながらサブ秒応答を実現し、子どもの注意力喪失を防ぐことです。チームは標準的なエージェントループを捨て、生成と実行を分離してストリーミングアクションを行うカスタムハーネスを設計し、子どもが考える時間に教育学的推論を行う非同期プランナーを採用しました。セーフティシステムは並行して動作し遅延を回避し、安全チェックで問題が検出された場合は反射的な応答を差し替えます。
私たちは、4〜9歳の子どもに算数と読書を教える初のAIチューターを構築することに着手しました。AIが実際に5歳児を教えるためには、教育法をエンジニアリングに組み込む必要があります。子どもは遅い応答を待てず、チャットインターフェースを読めず、モデルが間違ったことを聞き逃すこともできません。本稿では、リアルタイムAIチューターを構築する際のアーキテクチャ上の決定を形作った教訓の一部を共有します。
会話中の2秒の休止は、開発者や自動エージェントと電話で話す大人とは異なる意味を子どもに持ちます。数秒で子どもの注意は散漫になり、学習は止まります。優れた教師は考えるために休止することなくこれを管理します。たとえ答えを保留して子どもに考えさせるときでも、すぐに子どもに応答します。ティーチングとは、現在の瞬間に適切なアプローチを合わせることであり、ほとんどのアプローチは答えではありません。
4〜9歳の子ども向けのAIチューターを構築するにあたり、私たちは単に素早く応答するチャットボットではなく、実際に教えるチューターを目指しました。その根底にある制約は厳しく、選択の余地がないことを認識していました。それはすべてのターンにおけるサブ秒応答です。ほとんどのエージェントは推論予算を通じて速度と品質をトレードオフしますが、私たちのアーキテクチャはチューターを教育学に基づかせ、子どもにリアルタイムで応答しなければなりません。
私たちは標準的なエージェントループを捨てました。教師は常に、何かを言うか、ホワイトボードに描くか、ゲームをするか、トピックを完全に変えるかなど、生徒をどう引き付けるかを決定しています。今日のエージェントの標準的なパターンはツールループです。LLMが1つ以上のツール呼び出しを出力し、それらの実行を待ち、結果を観察し、次に何をするかを決定します。したがって、ティーチングエージェントを構築する簡単な方法は、教師が取る可能性のある各アクションに対してツールを作ることです。
しかし、ツールループにはレイテンシの問題があります。フロンティアモデルは最初のトークンを生成するのに2〜3秒かかり、その後毎秒約30トークンでデコードします。私たちのアクションは平均数十トークンです。往復レイテンシとオーディオ再生を加えると、標準的なループでは文や画面の変更の間に3〜4秒のダウンタイムが発生します。初期のプレイテストで実際にそれが起こるのを目の当たりにしました。6歳の男の子がエージェントの思考を待って、こう尋ねました。「なんで動かないの?いつ始まるの?つまんない」。同じラウンドの別の子どもは、注意を一部だけ払えばついていけることに気づき、遅延が彼女にチューンアウトすることを教えました――それも彼女が学習をやめた瞬間でした。
便利な修正は、より小型で高速なモデルを使うことですが、そこには範囲の問題が現れます。ティーチングは広範なタスクです。チューターは1回のレッスンで数十のアクションから選択する可能性があり、最も難しい判断は、答えを差し控えてヒントを与え、より小さな質問をし、または子どもが十分に苦闘して洞察が自分のものになるようにすることです。小型モデルはその幅広さにわたって指示に従うのに苦労しました。初期のバージョンで小型モデルを使ったエージェントは応答性が高いものの、常に答えを漏らしていました。漏らすたびに、学習が起こる瞬間を奪っていました。
そこで私たちは、指示追従、レイテンシ、柔軟なアクション空間のバランスをとるカスタムハーネスを構築しました。モデルは単一の応答で複数のアクションをストリーミングします。インタプリタが各アクションを解析して実行し、その間にモデルは次のアクションを生成し続けます。子どもは応答全体が完了するのを待つ必要はなく、最初のアクション(約30トークン)だけを待てばよいのです。
生成と実行の分離はさらに2つの利点をもたらします。状況に応じて利用可能なアクションを変更できます(例えば、画面上に質問がある場合、エージェントは回答ではなく足場作りのための指示とオプションを得ます)。また、レイテンシのペナルティなしに各アクションを検証できます。ストリームが無効なアクションを生成した場合のみ割り込んで再生成し、それ以外は実行が一時停止することはありません。
これらはすべて無料ではありません。ループを所有するということは、フレームワークに頼る代わりに独自の可観測性とトレーシングを構築しなければならないことを意味します。そして私たちは流れに逆らっています。フロンティアモデルはツール使用パターンで高度にポストトレーニングされています。将来のモデルが十分に高速になれば、私たちのハーネスはより単純なループに置き換えられるように設計されています。
教訓:エージェントフレームワークはバックグラウンドワークに向けて構築されており、速度と思考のトレードオフは簡単です。リアルタイム学習はその逆の極端にあります。会話速度で教えることは、ループを自分たちで所有することを意味します。
優れたチューターは子どもが次に何をするかを予測します。実際の教師は、生徒がしたことを振り返ると同時に、次に何をするかを予測します。同じレッスンを100回教えるとパターンが見えてきます。しかし、あなたはこの子どもを知っています。どこで行き詰まっているか、何に興奮するか、今日何でつまずきそうか。計画を立ててレッスンを始め、その場で調整します。
私たちは子どもと対話するエージェントを「会話者」と呼びます。初期の実験では、アクション空間が小さいほど指示追従が向上することが示されたため、2つ目のエージェント「プランナー」を構築し、レッスンの目標に対して会話をレビューし、会話者のコンテキストを管理させました。最初のバージョンは同期的に動作し、もちろん遅すぎました。固定ターン数で期限切れになる計画は信頼できず、会話者が新しい計画を要求するのも同様でした。うまくいったのは、子どもが考えたり話したりしている間に実行される非同期プランナーでした――教師が会話の隙間で振り返り予測するのと同じです。それらの隙間で判断が下されます。子どもに挑戦させるか成功させるか、概念を続けるか次に進むか。教師は直感で判断しますが、モデルは推論してそこに到達する必要があり、非同期実行がその時間を買います。
非同期とは、2つのエージェントが同時に実行され、両方が調整せずに共有状態を読み書きすることを意味します。そのため、すべてのターン、タップ、UI更新を追加専用ログの不変イベントとして保存します。どちらのエージェントも相手を待たずに読み取りと追加を行います。
この軌跡形式は別の種類の予測を可能にします。会話者がクローズド質問(穴埋め問題、アイスパイ、方程式の完成など)をすると、ハーネスは子どもの可能性のある回答を仮定し、軌跡から分岐した独自のブランチで各回答への応答を事前生成します。子どもが回答すると、ブランチにマッチングして応答を再生し、新しいモデル呼び出しを待たずに済みます。
トレードオフはコストと、時折の予測ミスです。プランナーはより高性能で高価なモデルで動作し、すべてのターンで実行されます。そして予測はあくまで予測です。時には、押し出される準備ができていた子どもに簡単な勝利が与えられることがあります。会話者のエラーが単なるミスなのか、欠陥のある計画の結果なのかを評価することはさらに困難です。計画を信頼するタイミングと、その瞬間にライブで起こっていることを信頼するタイミングについて、まだ明確なシグナルはありません。
教訓:子どもはアプリとリアルタイムで対話し、エージェントは離散的な生成で動作するため、子どもが考えたり話したりする時間を活用します。プランナーに過去を振り返らせ未来を予測させ、会話者に現在を処理させ、ゆっくりとした教育学的推論をリアルタイムのやり取りと同時に行わせます。次の動きが予測可能な場合は、子どもが答える前にそれを生成します。
誰も聞かない安全チェック。ほとんどのAI製品は、モデル呼び出しやエージェントターンと直列にガードレールを構築します。ユーザーはトークンストリームがコンテンツフィルターを通過することに気づかず、開発者はCLIツール呼び出しが自動レビューされるのを喜んで待ちます。5歳児とのリアルタイム会話では隠れる場所がなく、元に戻すこともできません。子どもはチューターが言ったことを聞き逃すことはできません。セーフティシステムはすべてのターンであらゆるアクションをゲートしなければなりません。
私たちのセーフティ分類器はLLMで、実行に約500〜1000ミリ秒かかります。そのチェックが完了するまで会話者の実行を待つと、許容できない1秒の遅延がすべてのターンに追加されます。ここで、私たちのハーネスで生成と実行を分離する別の利点が現れます。セーフティ分類器は生成をブロックせずに実行をブロックします。子どもが話し終えるとすぐに、分類器と小さなモデルを並行してディスパッチし、会話者の最初のアクションを生成します。そのモデルは素早く反応し、子どもが言ったことを反映または確認する即時応答(「恐竜が好きなんだね!私も好き」)を生成します。
ルールベースのチェックの方が高速で安価ですが、5歳児が実際に話す方法には耐えられません。セーフティポリシーに追加するカテゴリごとにトークンが増え、非決定論的分類器の再調整が必要になります。時には転写エラーが分類器を驚かせ、誤検出を引き起こします。これらのケースをレビューし、エージェントが子どもを理解する方法を改善するために使用します。
その即時アクションが生成される頃には、通常分類器はセーフを返しています。そのチェックにより会話者のブロックが解除され、即時アクションの実行中に会話者が生成できるようになります。子どもは、複数のモデル呼び出しにもかかわらず、連続した1つのターンを聞きます。
しかし、レイテンシよりも難しい問題は、その反射的アクションが間違った選択である場合にどうするかです。ミラーリングは子どもとの日常会話には最適ですが、教育学的に推奨されることとは逆の場合があります。例えば、レッスン中にクラスメートから悪い名前で呼ばれたと子どもが話したとします。「恐竜が好き」を「恐竜が好きなんだね!私も好き」に変えるのと同じ反射が、悪い名前を子どもに繰り返してしまいます。
そこで、セーフティ分類器が子どものターンをフラグした場合は常に、即時アクションを破棄します。会話者はこのターンに対して異なるガイダンスを受け取ります。名前を繰り返さず、それが悪かったに違いないと認め、大人に話すよう提案します。
注:私たちのセーフティシステムは、子どもの発達専門家と開発されたポリシーに基づいています。セーフティシステムの詳細な仕組みについては、別の記事で説明します。
教訓:レイテンシのペナルティを防ぐために、生成ではなく実行をセーフティチェックでゲートします。チェックが失敗した場合は、子どもの状況に合わせたガイダンスで反射的応答を置き換えます。
3つの問題領域は表面をなぞったにすぎません。AIチューターの構築には、適切なモデルを選び、プロンプトを与えて完了するだけでは不十分です。子どものためのAIチューターの構築には、それ以上のものが必要です。それは、事実上および教育学的に正しいための十分な時間を与えるリアルタイムシステムのエンジニアリングです――答えが学習を損なうときに答えを差し控える時間、子どもが考えを終える前に次のアクションを選ぶ時間、子どもが聞く前に素早い反射を再考する時間。
これらのピースは単独では小さく見えますが、魔法はこれらすべてのピースが連携して初めて現れます。先を考え、優雅に回復し、子どもに追いつくのではなく子どもと共にあるチューターです。
これらの問題に興味がある方、または子どものためのリアルタイムAIチューターを構築する実際の課題についてもっと知りたい方は、ぜひお話ししましょう。採用活動中です。