Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Open AI × Microsoft • https://news.microsoft.com/ja-jp/2023/01/25/230125- microsoftandopenaiextendpartnership/ • 2023年1月複数年にわたって数十億ドル規模の投資を行うと発 表 • AIの力によりマイクロソフトのミッションである「地球上の すべての個人とすべての組織が、より多くのことを達 成できるようにする」この手段の一つであると推察

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

デモ

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

基本的な動作

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

コード例

Slide 28

Slide 28 text

デモ

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

おしまい おしまい