24
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

天才か? Azure OpenAI Service の Stream 出力をスムーズに見せかけるトリック

Last updated at Posted at 2023-10-30

追記 2024/03 非同期変更フィルター機能がご利用できます

Azure OpenAI Service で ChatCompletion API を使用する際、stream = True に設定すると、回答がバルクで返ってきてしまいます。

002.gif

これを OpenAI 本家のようにヌルヌルと出力させる面白いトリックを発見しました。というのも、いつもおなじみの Azure-Samples/azure-search-openai-demo更新で実装されてました。

001_1.gif

該当のコードはこれです。バックエンド側はそのままに、フロントエンド側でタイマーをセットして 33 ミリ秒ごとに新しい文字を追加していく仕組みです。フロントエンドの制約に応じて、ここにさまざまな値をセットしてインタラクションを調整できます。数十ミリ秒のような速い値はもちろん自然なインタラクションにつながりますが、数百ミリ秒の値であっても AI が生成しているというエクスペリエンスをユーザーに体感させるのに十分でしょう。

const updateState = (newContent: string) => {
    return new Promise(resolve => {
        setTimeout(() => {
            answer += newContent;
            const latestResponse: ChatAppResponse = {
                ...askResponse,
                choices: [{ ...askResponse.choices[0], message: { content: answer, role: askResponse.choices[0].message.role } }]
            };
            setStreamedAnswers([...answers, [question, latestResponse]]);
            resolve(null);
        }, 33);
    });
};

これを自分で試すために、該当部分だけ抜き出した超シンプルなサンプルコードを作成しました。すべて Azure-Samples のものを使っています。ありがたいです。

参考

24
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?