Semantic Kernel(C#)でAzure OpenAI ServiceのGTP-4を使ってみる .NETラボ勉強会2023年5月 https://dotnetlab.connpass.com/event/281932/
Semantic Kernel(C#)でAzure AI OpenServiceのGPT-4を使ってみる株式会社SAKURUGエンジニアリングユニット草場 友光.NETラボ 2023年5月
View Slide
自己紹介• 普段は主にシステムをAzureにモダナイズする仕事をしています。• コミュニティ活動を通じて知識をアップデートしています。• 2022/08-2023 Microsoft MVP(Developer Technologies)• tomo_kusaba
宣伝【VISION】ひとの可能性を開花させる企業であり続けるVISIONに共感できる仲間募集中。
注意• 個人の見解・解釈が多分に入っています。• 見解の相違・事実誤認などありましたらご指摘ください。• Semantic Kernelは現在Preview版です。急速な勢いで機能実装されています。• 2023年5月27日現在の0.14.547.1 preview版に基づいています。• ここで紹介した方法について破壊的変更などの可能性があることに留意してください。• #dotnetlabでtweetすると右側に表示されます
今日の目的• Semantic KernelというOpenAI Serviceでとても便利なライブラリがあります。• Semantic Kernel自体にはテンプレート化、チェーン化、埋め込みベースのメモリ、プランニング機能といった便利な機能が備わっています。• 本日は、ChatGPTで会話ベースのアプリケーションを実装できるところまでを解説します。
セッションの動機• 現在、Chat GPTプレイグラウンドでC#のコード例として表示されているコードは「Azure.AI.OpenAI」のライブラリーを使用している。• ChatCompletionsOptionsのMessagesプロパティはGetしか許されておらずユーザメッセージとAIによる生成を繰り返し行うような使い方をするには使い勝手が悪い• REST APIとしてはとてもよいのに残念• しかし、Semantic Kernelならできそう!!
Azure OpenAI サービスとは?• Azure OpenAIサービスはGPT-3、CodexなどOpenAIの強力な言語モデルをREST APIとして使用できます。• コンテンツの生成、まとめ、自然言語からコードへの翻訳などができる。• REST API、Python SDK、またはAzure OpenAI StudioのWebベースのインターフェイスを介してサービスにアクセスできる。• C#ではREST APIを利用してサービスにアクセスする。
Open AI × Microsoft• https://news.microsoft.com/ja-jp/2023/01/25/230125-microsoftandopenaiextendpartnership/• 2023年1月複数年にわたって数十億ドル規模の投資を行うと発表• AIの力によりマイクロソフトのミッションである「地球上のすべての個人とすべての組織が、より多くのことを達成できるようにする」この手段の一つであると推察
責任あるAI• Azure OpenAI使用できる生成モデルにはかなりの潜在的利益があります。• しかし、慎重な設計と熟考した軽減策がない場合有害なコンテンツが生成される可能性があります。• 明確に定義したユースケースを示すことを申請者の要件とするオンボードされた顧客に対して責任あるAI実装のガイダンスを提供するなどです。
Azure OpenAIへのアクセス方法• 現在、アクセスは制限されています。• Microsoftと既存のパートナーシップがあるお客様、リスクが低いユースケース、軽減策の取り入れに取り組んでいるお客様が対象。• 申請フォームを提出し承認される必要があります。
GPT-4へのアクセス方法• リクエストフォームの申請が承認されると使用できる
Azure OpenAIとOpenAIの比較• Azure OpenAIはOpenAIとともにAPIを共同開発し互換性を確保し一方から他方へスムーズな移行を保証します。• Azure OpenAIを使用するとOpenAIと同じモデルを実行しながらAzureのセキュリティ機能を使用できる。• Azure OpenAIでは、プライベートネットワーク、リージョンの可用性、責任あるAIコンテンツのフィルター処理が提供される。• Azureならではのセキュリティ機能・ガバナンス機能が利用できる。
Chat Completion API• learn.microsoft.comよりメッセージ 説明System システムメッセージはモデルの初期コンテキストとガイダンスを提供します。応答すべきことと回答すべきでないこと。応答の書式方法について説明します。Assistant モデルによって生成された入力候補または応答を含むメッセージUser ユーザーが作成したメッセージ。
リソースの作成&モデルデプロイ• 前提条件ーAzure OpenAIサービスへのアクセス申請が承認済みであること• リソースの作成• Azure Portalなどからサブスクリプション・リソースグループ・リージョン・名前・価格レベルを指定してリソースを作成する• モデルのデプロイ• Azure PortalまたはAzure OpenAI Studioから使用するモデルをデプロイする。
ChatGPTプレイグラウンド• Web画面でコードなしにAzure OpenAI機能を試すことができる• パラメータを調整しながら素早く反復して実験することが可能• いくつかの言語やコマンドでのコード例が示されておりこれによってAPI仕様を確認することが可能• 日本語ドキュメントより更新が早いことが多いプレイグラウンドを参考にコードを書く
ChatGPTプレイグラウンドでまずは実験• 実装を始める前にChatGPTがどんな挙動をするかプレイグラウンドでいろいろ試してみることが必要です。
Semantic Kernelとは?• Semantic KernelはMicrosoftがOSSとして発表したAzureOpenAI ServiceやOpenAI Serviceをアプリケーションに素早く簡単に組み込むことができるようにするライブラリです。• 複数の関数を一つのパイプラインに結合できそのパイプラインをAIが自動的に作ってくれる。。。• 今日はこの中でも組み込みのChatCompletionを使用していきます。
Semantic Kernelの概要カーネル全体の制御プランナースキルの実行順を決めるスキルプロンプトを管理メモリー記憶を管理コネクター外部接続を管理今日は組み込みのChatCompletionを使用します。
Kernelのインスタンス化• 汎用ホストに近い書き方もできる!kernel = new KernelBuilder().Configure(c =>{c.AddAzureChatCompletionService(serviceId, deploymentName, baseUrl, key);}).WithLogger(_logger).Build();serviceIddeploymentNamekeybaseUrl
IChatCompletion• CreateNewChatメソッドで新しい会話インスタンスを作成• 引数はシステムメッセージ• 戻り値がOpenAIChatHistoryでここに会話メッセージを追加• GenerateMessageAsyncメソッドでAIがメッセージ生成• 引数はOpenAIChatHistoryとChatRequestSettings• 戻り値が生成された文字列(マークダウンされている)
OpenAIChatHistory• AddUserMessageメソッドでユーザの会話を追加• AddAssistantMessageメソッドでAIが生成した会話を追加• AddSystemMessageメソッドでシステムメッセージを追加{"role":"user","content":"システム障害を起こしちゃった。"}{"role":"assistant","content":"ご迷惑をおかけして申し訳ありません。突然のシステム障害により、お客様に多大なご迷惑をおかけしましたことを心よりお詫び申し上げます。現在、全力で復旧作業を行っておりますので、今しばらくお待ちいただけますようお願い申し上げます。今後は、同様のトラブルが発生しないように、システムの強化に努めてまいります。再度、ご迷惑をおかけしましたことを、心よりお詫び申し上げます。"}]{"role":"system","content":"顧客に謝罪をしなければいけません。¥n謝罪文を作ってください。"}
ChatRequestSettings• チャットパラメータを設定プレイグラウンドでいうここ!
コード例(コンストラクタ)0.13以降でコンストラクタの引数変更
コード例(入力時)
ストリーミング対応• 本家OpenAIのChatGPTは回答する際に文字が1文字ずつ表示されます。このような表示方法を再現してみましょう。• ストリーミングAPIを使えばこの機能は実現できます。• Semantic KernelのChatCompletionでは0.13系以降で実装されています。
ストリーミング対応コード
デモ
来月予告• Bing Connectorを使って最新の情報をもとに回答をする• 既存のチャットアプリにAIアシスタント(ChatGTP)を参加させてみた
時間があったら
Dev Driveの効果項目 条件プロジェクトの種類 Blazor Server構成 Releaseターゲットフレームワーク net7.0配置モード 自己完結ターゲットランタイム win-x64単一ファイルの作成 ✅ReadyToRunコンパイルを有効にする ✅未使用コードのトリミング ✅Dev Drive未使用時3分3秒Dev Drive使用時2分45秒
参考文献• Azure OpenAI Service とは• Azure OpenAI Service モデル• クイック スタート: Azure OpenAI Service で ChatGPT (プレビュー) と GPT-4 (プレビュー) の使用を開始する• Semantic Kernel• Microsoft が LLM をアプリ開発に統合するための OSS「Semantic Kernel」を発表
おしまいおしまい