Azure OpenAI Service では stream = True
に設定してもチャンク単位で結果が返ってくるのでちょっと微妙でした。これはデフォルトでコンテンツフィルタリングが同期的に実行されていて、ある程度の文章の長さをバッファしてフィルタリングしているため、トークン単位ではなく、チャンク単位で Stream 結果が返ってきているからです。この同期的処理によって、常に出力コンテンツの安全性が担保されています。
今パブリックプレビュー中の「非同期変更フィルター」を使用すると、このフィルタリング処理を Stream 出力と非同期に実行することで OpenAI 社と同様の Stream 処理が実現できるようになりました。
5/22 すべての Azure OpenAI カスタマーが利用できるようになりました。
Azure OpenAI 限定アクセスのレビュー: 変更されたコンテンツ フィルタリング の承認から1日程度経つと、以下のようにコンテンツフィルター作成ウィザードの「ストリーミングモード」の設定を変更できるようになります。この設定を既定から「非同期変更フィルター」に変更して保存します。
この設定のコンテンツフィルターをモデルのデプロイにセットすれば使用できるようになります。あとは、OpenAI SDK などで、 stream = True
に設定すれば、以下のようにトリックではないヌルヌル出力が可能となります。
この機能の注意点として、Stream が非同期で停止(最大 1,000 文字の増分)されるまでは本来フィルタリングするべき文章が出力されてしまうことがあります。そのためプログラム処理として必ず出力後に finish_reason
および content_filter_result
の返却値をチェックしてフィルターに引っかかっていれば速やかに UI を修正することが求められます。
参考
非同期変更フィルターチェック用
トリックで見せる用