Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Semantic KernelのChatCompletionでBing検索を使う

Semantic KernelのChatCompletionでBing検索を使う

Semantic KernelのChatCompletionでBing検索を使う
.NETラボ勉強会2023年6月
https://dotnetlab.connpass.com/event/285454/

tomokusaba

June 22, 2023
Tweet

More Decks by tomokusaba

Other Decks in Programming

Transcript

  1. Semantic Kernelの
    ChatCompletionでBing検索
    を使う
    株式会社SAKURUG
    エンジニアリングユニット
    草場 友光
    .NETラボ 2023年6月

    View full-size slide

  2. 自己紹介
    • 普段は主にシステムをAzureにモダナ
    イズする仕事をしています。
    • コミュニティ活動を通じて知識をアッ
    プデートしています。
    • 2022/08-2023 Microsoft MVP
    (Developer Technologies)
    • tomo_kusaba

    View full-size slide

  3. 本日誕生日です
    • 一応、欲しいものリスト
    • https://www.amazon.jp/hz/wishlist/ls/1PYM6PUAV4A1U
    ?ref_=wl_share

    View full-size slide

  4. 宣伝
    【VISION】ひとの可能性を開花させる企業であり続ける
    VISIONに共感できる仲間募集中。

    View full-size slide

  5. 注意
    • 個人の見解・解釈が多分に入っています。
    • 見解の相違・事実誤認などありましたらご指摘ください。
    • Semantic Kernelは現在Preview版です。急速な勢いで機能実
    装されています。
    • 2023年6月24日現在の0.16.230615.1 preview版に基づいて
    います。
    • ここで紹介した方法について破壊的変更などの可能性があるこ
    とに留意してください。
    • #dotnetlabでtweetすると右側に表示されます

    View full-size slide

  6. 今日の目的
    • Semantic KernelというOpenAI Serviceでとても便利なライブラ
    リがあります。
    • Semantic Kernel自体にはテンプレート化、チェーン化、埋め
    込みベースのメモリ、プランニング機能といった便利な機能が
    備わっています。
    • 本日は、ChatGPTでBing Searchを使い最新の情報を元に回答
    するところ。
    • すでにあるチャットアプリにAIアシスタントを参加させてみた
    というところについて解説します。

    View full-size slide

  7. 先月からのIChatCompletionを使う上
    での破壊的変更・非推奨機能への変更
    • KernelBuilderでConfigure()内でサービス追加していたが非推
    奨になり、With~()に統一
    • OpenAIChatHistory.Messagesプロパティの型が
    ListからListに変更

    View full-size slide

  8. Azure OpenAI サービスとは?
    • Azure OpenAIサービスはGPT-3、CodexなどOpenAIの強力
    な言語モデルをREST APIとして使用できます。
    • コンテンツの生成、まとめ、自然言語からコードへの翻訳など
    ができる。
    • REST API、Python SDK、またはAzure OpenAI Studioの
    Webベースのインターフェイスを介してサービスにアクセスで
    きる。
    • C#ではREST APIを利用してサービスにアクセスする。

    View full-size slide

  9. Open AI × Microsoft
    • https://news.microsoft.com/ja-jp/2023/01/25/230125-
    microsoftandopenaiextendpartnership/
    • 2023年1月複数年にわたって数十億ドル規模の投資を行うと発

    • AIの力によりマイクロソフトのミッションである「地球上の
    すべての個人とすべての組織が、より多くのことを達
    成できるようにする」この手段の一つであると推察

    View full-size slide

  10. 責任あるAI
    • Azure OpenAI使用できる生成モデルにはかなりの潜在的利益
    があります。
    • しかし、慎重な設計と熟考した軽減策がない場合有害なコンテ
    ンツが生成される可能性があります。
    • 明確に定義したユースケースを示すことを申請者の要件とする
    オンボードされた顧客に対して責任あるAI実装のガイダンスを
    提供するなどです。

    View full-size slide

  11. Azure OpenAIへのアクセス方法
    • 現在、アクセスは制限されています。
    • Microsoftと既存のパートナーシップ
    があるお客様、リスクが低いユース
    ケース、軽減策の取り入れに取り組ん
    でいるお客様が対象。
    • 申請フォームを提出し承認される必要
    があります。

    View full-size slide

  12. GPT-4へのアクセス方法
    • リクエストフォームの申請が承認されると使用できる

    View full-size slide

  13. Azure OpenAIとOpenAIの比較
    • Azure OpenAIはOpenAIとともにAPIを共同開発し互換性を確
    保し一方から他方へスムーズな移行を保証します。
    • Azure OpenAIを使用するとOpenAIと同じモデルを実行しな
    がらAzureのセキュリティ機能を使用できる。
    • Azure OpenAIでは、プライベートネットワーク、リージョン
    の可用性、責任あるAIコンテンツのフィルター処理が提供され
    る。
    • Azureならではのセキュリティ機能・ガバナンス機能が利用で
    きる。

    View full-size slide

  14. Chat Completion API
    • learn.microsoft.comより
    メッセージ 説明
    System システムメッセージはモデルの初期
    コンテキストとガイダンスを提供し
    ます。応答すべきことと回答すべき
    でないこと。応答の書式方法につい
    て説明します。
    Assistant モデルによって生成された入力候
    補または応答を含むメッセージ
    User ユーザーが作成したメッセージ。
    今回はここにBing Search
    の検索結果を入れてみます。

    View full-size slide

  15. 準備
    • Microsoft.SemanticKernel.Skills.Webを追加でNuget

    View full-size slide

  16. インスタンス化
    • 引数はAPI KeyとILogger(オプション)
    https://github.com/microsoft/semantic-
    kernel/blob/main/dotnet/src/Skills/Skills.Web/Bing/BingConnector.cs

    View full-size slide

  17. Bing Searchを使う
    • public async Task>
    SearchAsync(string query, int count = 1, int offset = 0,
    CancellationToken cancellationToken = default)を呼ぶ
    • 検索結果の見出しの部分が本文として取得できる
    ここの部分!
    つまり途中で切れてる

    View full-size slide

  18. Bing Searchの結果をプロンプトに
    • Bing Searchの結果をプロンプトに格納したい
    • SystemMessageが何件もあるのはいかがなものか?
    • すべて文字列連結して1つのSystemMessageに格納
    • SystemMessageが次の会話に残るのもなんか嫌
    • 一時的なチャット履歴を作成しこれにBing Searchの結果を格納しgpt
    さんで会話生成!

    View full-size slide

  19. 結果
    続きは Microsoft Build
    Japan 「Semantic
    Kernelを使ってAIチャット
    アプリを構築する」ハンズオ
    ンで

    View full-size slide

  20. 既存のチャットアプリにAIアシスタント
    を参加させてみる
    • .NETラボ勉強会2022年2月「SignalRを使ったチャットアプ
    リの制作」で紹介したチャットアプリにAIアシスタントを参加
    させてみる。
    追加

    View full-size slide

  21. 基本的な動作

    View full-size slide

  22. 応用的な動作
    普通に発言
    ほのかさんに話しかけ
    てみる!
    文脈を読んだ返答が
    帰ってくる!

    View full-size slide

  23. AIアシスタント追加のポイント
    • Semantic Kernelの機能を提供するクラスを用意する
    • kernelのインスタンス化(コンストラクタ)
    • メッセージ生成メソッド
    • メッセージ追加メソッド→通常発言の場合でもOpenAIChatHistoryに
    メッセージを追加しておき文脈を意識した返答をAIアシスタントがで
    きるようにする!
    • チャット画面Razor側でSemantic Kernel機能を提供するクラ
    スをInject(Singleton)
    • 発言ボタンでメッセージ追加メソッドを呼ぶ
    • ほのかさんに話しかけるボタンでメッセージ追加メソッドを呼ぶ

    View full-size slide

  24. Semantic Kernel0.15.230609.2-
    preview新機能の紹介
    • 複数の回答を生成する機能が追加になりました

    View full-size slide

  25. 使い方
    • ChatRequestSettingsのResultsPerPromptプロパティに回答
    する数を設定
    • GetChatCompletionsAsyncまたは
    GetStreamingChatCompletionsAsync(ストリーミング)を
    呼ぶ
    • ストリーミングは回答ごとにストリーミングされてくるので難
    しめ(サンプルではTaskを使ってます)

    View full-size slide

  26. コード例

    View full-size slide

  27. 参考文献
    • Azure OpenAI Service とは
    • Azure OpenAI Service モデル
    • クイック スタート: Azure OpenAI Service で ChatGPT (プレ
    ビュー) と GPT-4 (プレビュー) の使用を開始する
    • Semantic Kernel
    • Microsoft が LLM をアプリ開発に統合するための OSS
    「Semantic Kernel」を発表

    View full-size slide

  28. おしまい
    おしまい

    View full-size slide