Slide 1

Slide 1 text

Semantic Kernel(C#)で Azure AI OpenServiceの GPT-4を使ってみる 株式会社SAKURUG エンジニアリングユニット 草場 友光 .NETラボ 2023年5月

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

今日の目的 • Semantic KernelというOpenAI Serviceでとても便利なライブラ リがあります。 • Semantic Kernel自体にはテンプレート化、チェーン化、埋め 込みベースのメモリ、プランニング機能といった便利な機能が 備わっています。 • 本日は、ChatGPTで会話ベースのアプリケーションを実装で きるところまでを解説します。

Slide 6

Slide 6 text

セッションの動機 • 現在、Chat GPTプレイグラウンドでC#のコード例として表示 されているコードは「Azure.AI.OpenAI」のライブラリーを使 用している。 • ChatCompletionsOptionsのMessagesプロパティはGetしか 許されておらずユーザメッセージとAIによる生成を繰り返し行 うような使い方をするには使い勝手が悪い • REST APIとしてはとてもよいのに残念 • しかし、Semantic Kernelならできそう!!

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

リソースの作成&モデルデプロイ • 前提条件ーAzure OpenAIサービスへのアクセス申請が承認済 みであること • リソースの作成 • Azure Portalなどからサブスクリプション・リソースグループ・リー ジョン・名前・価格レベルを指定してリソースを作成する • モデルのデプロイ • Azure PortalまたはAzure OpenAI Studioから使用するモデルをデプ ロイする。

Slide 15

Slide 15 text

ChatGPTプレイグラウンド • Web画面でコードなしにAzure OpenAI機能を試すことができ る • パラメータを調整しながら素早く反復して実験することが可能 • いくつかの言語やコマンドでのコード例が示されておりこれに よってAPI仕様を確認することが可能 • 日本語ドキュメントより更新が早いことが多い プレイグラウンドを参考にコードを書く

Slide 16

Slide 16 text

ChatGPTプレイグラウンドでまずは実験 • 実装を始める前にChatGPTがどんな挙動をするかプレイグラ ウンドでいろいろ試してみることが必要です。

Slide 17

Slide 17 text

Semantic Kernelとは? • Semantic KernelはMicrosoftがOSSとして発表したAzure OpenAI ServiceやOpenAI Serviceをアプリケーションに素早 く簡単に組み込むことができるようにするライブラリです。 • 複数の関数を一つのパイプラインに結合できそのパイプライン をAIが自動的に作ってくれる。。。 • 今日はこの中でも組み込みのChatCompletionを使用していき ます。

Slide 18

Slide 18 text

Semantic Kernelの概要 カーネル 全体の制御 プランナー スキルの実行順を 決める スキル プロンプトを管理 メモリー 記憶を管理 コネクター 外部接続を管理 今日は組み込み の ChatCompletion を使用します。

Slide 19

Slide 19 text

Kernelのインスタンス化 • 汎用ホストに近い書き方も できる! kernel = new KernelBuilder().Configure(c => { c.AddAzureChatCompletionService(serviceId, deploymentName, baseUrl, key); }).WithLogger(_logger).Build(); serviceId deploymentName key baseUrl

Slide 20

Slide 20 text

IChatCompletion • CreateNewChatメソッドで新しい会話インスタンスを作成 • 引数はシステムメッセージ • 戻り値がOpenAIChatHistoryでここに会話メッセージを追加 • GenerateMessageAsyncメソッドでAIがメッセージ生成 • 引数はOpenAIChatHistoryとChatRequestSettings • 戻り値が生成された文字列(マークダウンされている)

Slide 21

Slide 21 text

OpenAIChatHistory • AddUserMessageメソッドでユーザの会話を追加 • AddAssistantMessageメソッドでAIが生成した会話を追加 • AddSystemMessageメソッドでシステムメッセージを追加 {"role":"user","content":"システム障害を起こしちゃった。"} {"role":"assistant","content":"ご迷惑をおかけして申し訳ありません。突然のシステム障害により、お客様に多大なご迷惑をおかけしました ことを心よりお詫び申し上げます。現在、全力で復旧作業を行っておりますので、今しばらくお待ちいただけますようお願い申し上げます。今後 は、同様のトラブルが発生しないように、システムの強化に努めてまいります。再度、ご迷惑をおかけしましたことを、心よりお詫び申し上げま す。"}] {"role":"system","content":"顧客に謝罪をしなければいけません。¥n謝罪文を作ってください。"}

Slide 22

Slide 22 text

ChatRequestSettings • チャットパラメータを設定 プレイグラウンドでいうここ!

Slide 23

Slide 23 text

コード例(コンストラクタ) 0.13以降でコンスト ラクタの引数変更

Slide 24

Slide 24 text

コード例(入力時)

Slide 25

Slide 25 text

ストリーミング対応 • 本家OpenAIのChatGPTは回答する際に文字が1文字ずつ表示 されます。このような表示方法を再現してみましょう。 • ストリーミングAPIを使えばこの機能は実現できます。 • Semantic KernelのChatCompletionでは0.13系以降で実装さ れています。

Slide 26

Slide 26 text

ストリーミング対応コード

Slide 27

Slide 27 text

デモ

Slide 28

Slide 28 text

来月予告 • Bing Connectorを使って最新の情報をもとに回答をする • 既存のチャットアプリにAIアシスタント(ChatGTP)を参加さ せてみた

Slide 29

Slide 29 text

時間があったら

Slide 30

Slide 30 text

Dev Driveの効果 項目 条件 プロジェクトの種類 Blazor Server 構成 Release ターゲットフレームワーク net7.0 配置モード 自己完結 ターゲットランタイム win-x64 単一ファイルの作成 ✅ ReadyToRunコンパイルを有効にする ✅ 未使用コードのトリミング ✅ Dev Drive未使用時 3分3秒 Dev Drive使用時 2分45秒

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

おしまい おしまい