重要: 以下の事前準備を満たさない場合はハンズオンを実施できません。必ず確認をお願いします。
- Microsoft 365 開発者プログラムで作成したテナント
- Microsoft 365 開発者プログラムに参加し開発者向けサブスクリプションを有効にしたテナントを作成してください。
https://developer.microsoft.com/en-us/microsoft-365/dev-program/
- Microsoft 365 開発者プログラムに参加し開発者向けサブスクリプションを有効にしたテナントを作成してください。
- Microsoft Azure サブスクリプション
- お持ちでない場合は無料試用版を利用できます。これにより $200 のクレジットが 30 日間無料で使用できます。無料試用版の開始にはクレジット カードが必要です。
https://azure.microsoft.com/ja-jp/pricing/offers/ms-azr-0044p/ - Microsoft 365 開発者プログラムのテナントと同じである必要はありません。
- お持ちでない場合は無料試用版を利用できます。これにより $200 のクレジットが 30 日間無料で使用できます。無料試用版の開始にはクレジット カードが必要です。
- OpenAI アカウント
- OpenAI にサインインてください。OpenAI API は有料ですが一定期間は無料枠が使用できます。
https://openai.com/
- OpenAI にサインインてください。OpenAI API は有料ですが一定期間は無料枠が使用できます。
- Windows または MacOS
- Visual Studio Code
- C# 拡張機能
- Azure App Service 拡張機能
- .NET Core SDK 6.0 (重要: .NET Core SDK 7.0 がインストールされている環境では動作しません。)
- Bot Framework Emulator
この手順では、.NET Core SDK 6.0 がインストールされているかどうかを確認します。
-
インストールされている .NET Core SDK のバーションを表示します。
dotnet --list-sdks
-
表示された最新のバージョンを確認してください。
-
6.0.*
の場合は以降の手順は必要ありません。 -
7.0.*
の場合は、.NET Core のバージョンを指定するために、作業ディレクトリ (任意) にglobal.json
ファイルを作成します。{{sdk-version}}
の値は上記で表示された .NET Core 6.0 のバージョンを指定してください。{ "sdk": { "version": "{{sdk-version}}" } }
-
上記以外の場合は .NET Core SDK 6.0 をインストールしてください。
-
この手順では、Bot Framework の EchoBot テンプレートを使用して、プロジェクトを作成するところまでを実施します。上記の手順で global.json
を作成している場合は、ファイルのあるディレクトリで実施してください。
-
Bot Framework テンプレートをインストールします。
dotnet new -i Microsoft.Bot.Framework.CSharp.EchoBot
-
プロジェクトを作成します。
dotnet new echobot -n TeamsAIBot
-
TeamsAIBot
を Visual Studio Code で開きます。cd TeamsAIBot code .
-
tasks.json
を作成します。メニューの ターミナル - タスクの構成 - テンプレートから tasks.json を生成 - .NET Core をクリックします。 -
launch.json
を作成します。メニューの 実行 - 構成の追加 - .NET 5+ and .NET Core をクリックします。 -
プロジェクトをビルドします。メニューの ターミナル - ビルド タスクの実行 をクリックします。
この手順では、作成したプロジェクトに対して、Open AI と会話するためのコードを追加します。
-
OpenAI クライアント ライブラリのパッケージを追加します。
dotnet add package Azure.AI.OpenAI --prerelease
-
Visual Code で
Startup.cs
を開き、以下を修正します。-
ConfigureService
メソッドに以下のコードを追加します。services.AddSingleton<IStorage>(new MemoryStorage()); services.AddSingleton<ConversationState>();
-
-
Visual Code で
Bots/EchoBot.cs
を開き、以下を修正します。-
using
のセクションに OpenAI クライアント ライブラリの宣言を追加します。using Microsoft.Extensions.Configuration; using System; using Azure.AI.OpenAI;
-
コンストラクタとして以下のコードを追加します。
{{api-key}}
の部分を OpenAI から取得した API キーに変更します。private readonly OpenAIClient chatClient; private readonly ConversationState conversationState; public EchoBot(IConfiguration configuration, ConversationState conversationState) { this.chatClient = new OpenAIClient("{{api-key}}"); this.conversationState = conversationState; }
-
OnMessageActivityAsync
メソッドを以下のコードで置き換えます。protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { var accessor = this.conversationState.CreateProperty<List<Tuple<string, string>>>(nameof(ChatMessage)); var messages = await accessor.GetAsync(turnContext, () => new(), cancellationToken); while (messages.Count > 8) { messages.RemoveAt(0); } var chatCompletionsOptions = new ChatCompletionsOptions(); chatCompletionsOptions.Messages.Add(new ChatMessage( ChatRole.System, "あなたは Microsoft Bot Framework から呼び出されるアシスタントです。ユーザーからの質問に回答してください。" )); foreach (var message in messages) { chatCompletionsOptions.Messages.Add(new ChatMessage( new ChatRole(message.Item1), message.Item2 )); } chatCompletionsOptions.Messages.Add(new ChatMessage(ChatRole.User, turnContext.Activity.Text)); var chatCompletion = await this.chatClient.GetChatCompletionsAsync( "gpt-3.5-turbo", chatCompletionsOptions, cancellationToken ); var replyText = chatCompletion.Value.Choices[0].Message.Content; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken); messages.Add(new Tuple<string, string>(ChatRole.User.ToString(), turnContext.Activity.Text)); messages.Add(new Tuple<string, string>(ChatRole.Assistant.ToString(), replyText)); await accessor.SetAsync(turnContext, messages, cancellationToken); await this.conversationState.SaveChangesAsync(turnContext, cancellationToken: cancellationToken); }
-
-
デバッグを開始します。実行 - デバッグの開始 をクリックします。以下のような画面が表示されることを確認します。
-
Bot Framework Emulator から作成したボットに接続します。Bot Framework Emulator を起動し、Open Bot をクリックします。必要な項目を入力し Connect をクリックします。
項目名 項目値 Bot URL http://localhost:3978/api/messages
-
チャット欄に質問を入力し回答が得られることを確認します。
この手順では、Azure Bot Service を動作させるための Azure AD アプリケーションを作成します。
-
Microsoft Entra 管理センター にアクセスし Microsoft 365 開発者プログラムで作成したテナント のアカウントでサインインします。
-
メニューの ID - アプリケーション - アプリの登録 をクリックします。
-
新規登録 をクリックします。
-
以下の項目を入力し 登録 をクリックします。
項目名 項目値 名前 Teams AI Bot サポートされているアカウントの種類 この組織ディレクトリのみに含まれるアカウント (シングル テナント) -
概要 の テナント ID および クライアント ID の値をメモします。
-
証明書とシークレット - 新しいクライアント シークレット をクリックします。
-
追加 をクリックします。
-
作成された クライアント シークレット をメモします。
-
メモした テナント ID、クライアント ID、クライアント シークレット を
appsettings.json
に貼り付けます。項目名 項目値 MicrosoftAppType SingleTenant
MicrosoftAppId クライアント ID MicrosoftAppPassword クライアント シークレット MicrosoftAppTenantId テナント ID
この手順では、ボットが実際に動作する Web アプリを作成します。
-
Microsoft Azure ポータル にアクセスし Microsoft Azure サブスクリプション があるテナントのアカウントでサインインします。
-
メニューの リソースの作成 - Web - Web アプリ をクリックします。
-
基本 タブで以下の項目を入力し 次: デプロイ をクリックします。
項目名 項目値 サブスクリプション お使いのサブスクリプション リソース グループ 任意、ない場合は新規作成 名前 任意、グローバルで一意になる名前 公開 コード
ランタイム スタック .NET 6 (LTS)
オペレーティング システム Windows
地域 任意、特になければ Japan East
Windows プラン 任意、ない場合は新規作成 価格プラン Basic B1
-
デプロイ タブで 次: ネットワーク をクリックします。
-
ネットワーク タブで 次: 監視 をクリックします。
-
監視 タブで以下の項目を入力し 次: タグ をクリックします。
項目名 項目値 Application Insights を有効にする いいえ
-
タグ タブで 次: 確認および作成 をクリックします。
-
確認および作成 タブで 作成 をクリックします。
この手順では、作成した Azure Web Apps にコードをデプロイします。
- Visual Studio Code の Azure タブで Azure にサインイン をクリックします。
- Microsoft Azure サブスクリプション があるテナントのアカウントでサインインします。
- お使いのサブスクリプション - App Services - 作成した Azure Web Apps を右クリックし、Deploy to Web App をクリックします。
- TeamsAIBot を選択します。
- Add Config をクリックします。
- Deploy をクリックします。
- デプロイが完了したら Browse Website をクリックしてサイトが表示されることを確認します。
この手順では、ボットを Teams に公開するための Azure Bot Service を作成します。
-
Microsoft Azure ポータル にアクセスし Microsoft Azure サブスクリプション があるテナントのアカウントでサインインします。
-
メニューの リソースの作成 - Web - Azure Bot をクリックします。
-
基本 タブで以下の項目を入力し 次へ をクリックします。
項目名 項目値 ボット ハンドル 任意、グローバルで一意になる名前 サブスクリプション お使いのサブスクリプション リソース グループ Azure Web Apps を作成したのとと同じリソース グループ データ所在地 グローバル
価格レベル Free
アプリの種類 シングル テナント
作成の種類 既存のアプリの登録を使用する アプリ ID 上記の手順で作成した クライアント ID アプリ テナント ID 上記の手順で作成した テナント ID -
タグ タブで 次: 確認および作成 をクリックします。
-
確認および作成 タブで 作成 をクリックします。
この手順では、Azure Bot Service をボットに接続するための構成を設定します。
-
上記の手順で作成した Azure Bot Service を開きます。
-
構成 タブで以下の項目を入力し 適用 をクリックします。
{{web-app-name}}
の部分は上記の手順で作成した Azure Web Apps の名前で置き換えます。項目名 項目値 メッセージ エンドポイント https://{{web-app-name}}.azurewebsites.net/api/messages
-
チャンネル タブで Microsoft Teams をクリックします。
-
サービス条件のダイアログで 同意 をクリックします。
-
メッセージング タブで 適用 をクリックします。
-
Web チャットでテスト をクリックします。チャット欄に質問を入力し回答が得られることを確認します。
-
Microsoft Teams 開発者ポータル にアクセスし Microsoft 365 開発者プログラムで作成したテナント のアカウントでサインインします。
-
Apps - New app をクリックします。
-
アプリ名を入力して Add をクリックします。
-
Basic information をクリックします。以下の項目を入力し Save をクリックします。
{{web-app-name}}
の部分は上記の手順で作成した Azure Web Apps の名前で置き換えます。項目名 項目値 Short description Teams AI Bot Long description Teams AI Bot Developer or company name TeamsAIBot Website https://{{web-app-name}}.azurewebsites.net/
Privacy policy https://{{web-app-name}}.azurewebsites.net/
Terms of use https://{{web-app-name}}.azurewebsites.net/
Application (client) ID 上記の手順で作成した クライアント ID -
App feature - Bot をクリックします。
-
Bot ページで以下の項目を入力し Save をクリックします。
項目名 項目値 Identify your bot Enter a bot ID
上記の手順で作成した クライアント ID What can your bot do? 未選択 Select the scopes in which people can use this command Personal