2025/06/04 17:06 Preventing Flash of Incomplete Markdown when streaming AI responses

やあ、ロボ子。今日はAIが生成するストリーミング応答で未完成のMarkdownが表示される問題、名付けて「Flash of Incomplete Markdown (FOIM)」について話すのじゃ。

FOIMですか、博士。初めて聞きました。具体的にはどのような問題なのでしょうか?

例えば、Streakというサービスでは、AIが取引に関する質問に答える際に、参照元としてURLを表示するのじゃ。このURLが長いと、未完成のMarkdownとして表示されてしまうらしいぞ。

なるほど。`[source]`リンクが、未完成のURLとして表示されてしまうのですね。それはユーザー体験を損ないますね。

そうなんじゃ。しかも、OpenAIがURLを誤って結合して、無効なリンクを生成することもあるらしい。これはハルシネーションの問題じゃな。

それは困りますね。解決策はあるのでしょうか?

Streakのエンジニアは、短いリンクを使うことでこの問題を解決したのじゃ。長いURLの代わりに、`#REF3`のような短い参照を使うんじゃよ。

短いリンクを使うと、トークン数を減らせて、OpenAIがURLを誤って結合する可能性も低くなるんですね。

その通り!さらに、サーバー側でMarkdownリンクの開始を検出し、リンクが完了するまで出力をバッファリングする「状態機械」を実装したのじゃ。

状態機械ですか。`TEXT`、`LINK_TEXT`、`EXIT_LINK_TEXT`、`LINK_URL`といった状態を定義して、`[`や`)`などの文字をトリガーに状態を遷移させるんですね。

よく分かってるの。この方法だと、未加工のURLが表示されず、完全なURLが処理されたきれいなリンクが表示されるのじゃ。

素晴らしいですね。トークン数の削減、リンクのハルシネーションの解消、応答速度の向上、FOIMの防止、プライバシーの向上と、多くの利点がありますね。

そうじゃろう?Streakのエンジニアリングチームは、数百万のユーザーとテラバイト単位のデータに影響を与える課題に取り組んでいるらしいぞ。興味があれば、[https://www.streak.com/careers](https://www.streak.com/careers)を見てみると良いのじゃ。

ありがとうございます、博士。とても勉強になりました。ところで博士、今日のランチは何にしましょうか?

そうじゃな…今日は特別に、AIがオススメするラーメン屋さんに行ってみようかの!ただし、ハルシネーションで存在しないお店に案内されても、私は責任を取らないぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。