Teams AI ライブラリと Teams Toolkit を使用してカスタム エンジン エージェントを構築する
Microsoft Teams用のカスタム エンジン エージェントを作成して、軽い操作を正確に制御できます。 これにより、ユーザーの意図を正確に理解して実行し、アプリのアクションに合わせて調整する言語モデルの有効性が示されます。
このチュートリアルでは、次の方法について学ぶことができます:
- Teams Toolkit を使用して新しいプロジェクトを設定する方法。
- Teams AI ライブラリ機能をインポートする方法。
- Teams にカスタム エンジン エージェントをデプロイし、軽い操作を制御する方法。
次の出力を確認できます。
前提条件
カスタム エンジン エージェントのビルドとデプロイに必要なツールの一覧を次に示します。
インストール | 使用するには... | |
---|---|---|
Teams ツールキット | アプリのプロジェクト スキャフォールディングを作成する Microsoft Visual Studio Code 拡張機能。 最新バージョンを使用します。 | |
Microsoft Teams | すべてのユーザーと共同作業を行うには、チャット、会議、通話のアプリを 1 か所で操作します。 | |
Node.js | バックエンド JavaScript ランタイム環境。 詳細については、「 プロジェクトの種類Node.js バージョン互換性テーブル」を参照してください。 | |
Microsoft Edge (推奨) または Google Chrome | 開発者ツールを備えたブラウザー。 | |
Visual Studio Code | JavaScript、TypeScript、Python ビルド環境。 最新バージョンを使用します。 | |
OpenAI または Azure OpenAI | 最初に OpenAI API キーを作成して、OpenAI の GPT を使用します。 Microsoft Azure でアプリをホストしたりリソースにアクセスしたりする場合は、開始する前に Azure OpenAI サービス を作成する必要があります。 | |
Microsoft 365 開発者アカウント | アプリをインストールするための適切なアクセス許可を持つ Teams アカウントにアクセスします。 |
開発環境を準備する
必要なツールをインストールしたら、開発環境を設定します。
Teams Toolkit をインストールする
Teams Toolkit は、アプリのクラウド リソースのプロビジョニングとデプロイ、Teams ストアへの発行などのツールを使用して、開発プロセスを簡素化するのに役立ちます。
ツールキットは Visual Studio Code で使用できます。
teamsapp
と呼ばれる CLI (コマンド ライン インターフェイス) を使用することもできます。
Visual Studio Code を開き、[拡張機能] ビュー (Ctrl + Shift + X / ⌘⇧-X または [ビュー >拡張機能] ) を選択します。
検索ボックスに、「Teams Toolkit」と入力します。
Teams Toolkit の横にある [インストール] を選択します。
Teams Toolkit アイコンは、インストール後に Visual Studio Code アクティビティ バー に表示されます。
Teams Toolkit は、Visual Studio Code Marketplace にもあります。
Teams 開発テナントを設定する
テナント とは、チャット、ファイルの共有、会議の実行を行う Teams の組織のスペースまたはコンテナーのようなものです。 この領域は、カスタム アプリをアップロードしてテストする場所でもあります。 テナントを使って開発する準備ができているかどうかを確認しましょう。
カスタム アプリのアップロード オプションを確認する
アプリを作成したら、アプリを配布せずに Teams に読み込む必要があります。 このプロセスは、カスタム アプリのアップロードと呼ばれます。 このオプションを表示するには、Microsoft 365 アカウントにサインインします。
注:
Teams ローカル環境でアプリをプレビューおよびテストするために、カスタム アプリのアップロードが必要です。 有効になっていない場合は、Teams ローカル環境でアプリをプレビューしてテストすることはできません。
既にテナントがあり、管理者アクセス権がありますか? 実際にあるかどうかを確認しましょう。
Teams でカスタム アプリをアップロードできるかどうかを確認します。
Teams クライアントで、[ アプリ ] アイコンを選択します。
[アプリの管理] を選択します。
[ アプリのアップロード] を選択します。
[カスタム アプリのアップロード] オプションを探します。 オプションが表示された場合は、カスタム アプリのアップロードが有効になります。
注:
カスタム アプリをアップロードするオプションが見つからない場合は、Teams 管理者に問い合わせてください。
無料の Teams 開発者テナントを作成する (省略可能)
Teams 開発者アカウントをお持ちでない場合は、無料で取得できます。 Microsoft 365 開発者プログラムに参加します。
Microsoft 365 開発者プログラムに移動します。
[今すぐ参加] を選択し、画面の指示に従います。
ようこそ画面で、[E5 サブスクリプションの設定] を選択します。
管理者アカウントを設定します。 完了すると、次の画面が表示されます。
設定した管理者アカウントを使用して Teams にサインインします。 Teams に [カスタム アプリのアップロード] オプションがあることを確認します。
無料の Azure アカウントを取得します。
アプリをホストする場合、または Azure でリソースにアクセスする場合は、Azure サブスクリプションが必要です。 開始する前に無料でアカウントを作成してください。
これで、アカウントを設定するためのツールがすべて揃いました。 開発環境では、アプリ プロジェクトのビルドを開始する準備が整いました。
カスタム エンジン エージェント アプリのプロジェクト ワークスペースを作成する
最初のカスタム エンジン エージェント アプリを作成しましょう。
Teams アプリのカスタム エンジン エージェント機能により、AI チャットボットが作成されます。 これを使用して、顧客サービスの提供など、シンプルで自動化されたタスクを実行します。 カスタム エンジン エージェントは Web サービスと対話し、そのオファリングを使用するのに役立ちます。 天気予報、予約、またはカスタム エンジン エージェントを使用して提供されるその他のサービスを取得できます。
アプリまたはカスタム エンジン エージェントを作成する準備が済んでいるので、カスタム エンジン エージェントを作成するための新しい Teams プロジェクトを設定できます。
このチュートリアルでは以下を学習します。
カスタム エンジン エージェント プロジェクト ワークスペースを作成する
前提条件を満たしている場合は開始します。
Visual Studio Code を開きます。
Visual Studio Code アクティビティ バーの [Teams Toolkit
] アイコンを選択します。
[ 新しいアプリの作成] を選択します。
[ カスタム エンジン エージェント] を選択します。
[ Basic AI chatbot]\(基本 AI チャットボット\) を選択します。
プログラミング言語として [TypeScript ] を選択します。
[ OpenAI ] または [ Azure OpenAI] を選択します。
OpenAI キーまたは Azure OpenAI キーと Azure OpenAI エンドポイントを入力します。
[既定のフォルダー] を選択して、プロジェクトのルート フォルダーを既定の場所に格納します。
次の手順で既定の場所を変更することもできます。
[ 参照] を選択します。
プロジェクト ワークスペースの場所を選択します。
[ フォルダーの選択] を選択します。
アプリに適した名前を入力し、[Enter] を選択 します。
ダイアログが表示されます。 [ はい、作成者を信頼する] または [いいえ] を選択します。要件に基づいて作成者を信頼しません 。
カスタム エンジン エージェントは数秒で作成されます。
アプリが作成されると、Teams Toolkit に次のメッセージが表示されます。
Teams アプリを作成する簡単な要約。
Teams アプリを作成するためのこの短い要約をご覧ください。
アプリのソース コードを見る
スキャフォールディングが完了した後、プロジェクトのディレクトリとファイルを Visual Studio Code のエクスプローラー領域で確認できます。
フォルダー名 | コンテンツ |
---|---|
env/.env.local.user |
プロビジョニングとデプロイの規則をカスタマイズするために teamsapp.yml によって使用されるローカル環境の構成ファイル。 |
index.ts |
アプリのメイン エントリ ポイント。 |
teamsBot.ts |
Teams アクティビティ ハンドラー。 |
appPackage |
アプリ マニフェスト テンプレート ファイルとアプリ アイコン (color.png と outline.png)。 |
appPackage/manifest.json |
ローカルおよびリモートの環境でアプリを実行するためのアプリ マニフェスト。 |
config.ts |
config.ts は、ボット アダプターの設定に使用される環境変数へのアクセスをラップします。 |
teamsapp.yml |
これは、プロパティと構成ステージ定義を定義する teams Toolkit プロジェクトメインです。 |
teamsapp.local.yml |
これにより、ローカル実行とデバッグを有効にするアクションでteamsapp.ymlがオーバーライドされます。 |
最初のカスタム エンジン エージェントをビルドして実行する
Teams Toolkit を使用してプロジェクト ワークスペースを設定したら、次にプロジェクトをビルドします。 Microsoft 365 アカウントにサインインしていることを確認します。
Microsoft 365 アカウントにサインインする
このアカウントを使用して、Teams にサインインします。 Microsoft 365 開発者プログラム テナントを使用している場合は、Microsoft 365 アカウントは、登録中に設定した管理者アカウントです。
Visual Studio Code を開きます。
サイド バーで Teams Toolkit
アイコンを選択します。
[M365 にサインイン (Sign in to M365)] を選択します。
既定の Web ブラウザーが開き、アカウントにサインインできます。
資格情報を使用して Microsoft 365 アカウントにサインインします。
メッセージが表示されたらブラウザーを閉じて、Visual Studio Code に戻ります。
Visual Studio Code 内の Teams Toolkit に戻ります。
このアカウントを使用して、Teams にサインインします。 Microsoft 365 開発者プログラム テナントを使用している場合は、Microsoft 365 アカウントは、登録中に設定した管理者アカウントです。
これで、アプリをビルドし、ローカルで実行する準備が整いました。
Teams AI ライブラリ機能を使用してカスタム エンジン エージェントを更新する
Teams Toolkit は、カスタム エンジン エージェントをスキャフォールディングして実行する最も簡単な方法です。 Teams Toolkit では、カスタム エンジン エージェントの構成を開始するための基本的な構造が作成されます。
Teams AI ライブラリ機能の構成を開始しましょう。
Visual Studio Code に移動し、ターミナル ウィンドウを開きます。
ターミナルで次のコマンドを実行して、
yarn
をインストールします。npm install npm install @microsoft/teams-ai
注:
Teams Toolkit を使用してサンプルを作成する場合は、自動的に作成されるセットアップに
.env.local.user
ファイルが表示されます。 ファイルが使用できない場合は、.env.local.user
ファイルを作成し、OpenAI キーまたは Azure OpenAI キーと Azure OpenAI エンドポイントを更新します。app.ts
ファイルに移動します。次のように、import ステートメントに
TurnContext
を追加します。import { MemoryStorage, TurnContext} from 'botbuilder';
"@microsoft/teams-ai"
import ステートメントに次のようにDefaultConversationState, Memory, TurnState
を追加します。// See https://aka.ms/teams-ai-library to learn more about the Teams AI library. import { Application, ActionPlanner, DefaultConversationState, Memory, TurnState, OpenAIModel, PromptManager } from "@microsoft/teams-ai";
"@microsoft/teams-ai" の後に、次を追加します。
// eslint-disable-next-line @typescript-eslint/no-empty-interface interface ConversationState extends DefaultConversationState { lightsOn: boolean; } type ApplicationTurnState = TurnState<ConversationState>; if (!process.env.OPENAI_API_KEY) { throw new Error('Missing environment variables - please check that OPENAI_KEY or AZURE_OPENAI_KEY is set.'); }
Define storage and application code
した後、次を追加します。// Define a prompt function for getting the current status of the lights planner.prompts.addFunction('getLightStatus', async (context: TurnContext, memory: Memory) => { return memory.getValue('conversation.lightsOn') ? 'on' : 'off'; });
return memory.getValue('conversation.lightsOn') ? 'on' : 'off';
した後、次を追加します。// Register action handlers app.ai.action('LightsOn', async (context: TurnContext, state: ApplicationTurnState) => { state.conversation.lightsOn = true; await context.sendActivity(`[lights on]`); return `the lights are now on`; }); app.ai.action('LightsOff', async (context: TurnContext, state: ApplicationTurnState) => { state.conversation.lightsOn = false; await context.sendActivity(`[lights off]`); return `the lights are now off`; }); interface PauseParameters { time: number; } app.ai.action('Pause', async (context: TurnContext, state: ApplicationTurnState, parameters: PauseParameters) => { await context.sendActivity(`[pausing for ${parameters.time / 1000} seconds]`); await new Promise((resolve) => setTimeout(resolve, parameters.time)); return `done pausing`; });
adapter.ts
ファイルに移動します。[
Import required bot services.
] で、既存のコードを削除し、次を更新します。// Import required bot services. // See https://aka.ms/bot-services to learn more about the different parts of a bot. import { TeamsAdapter } from '@microsoft/teams-ai'; import { ConfigurationServiceClientCredentialFactory } from 'botbuilder';
This bot's main dialog.
で次のコードを削除します。// This bot's main dialog. import config from "./config"; const botFrameworkAuthentication = new ConfigurationBotFrameworkAuthentication( {}, new ConfigurationServiceClientCredentialFactory(config) );
import { ConfigurationServiceClientCredentialFactory } from 'botbuilder';
した後、Create adapter.
の下のコードを次のように置き換えます。// Create adapter. // See https://aka.ms/about-bot-adapter to learn more about how bots work. const adapter = new TeamsAdapter( {}, new ConfigurationServiceClientCredentialFactory({ MicrosoftAppId: process.env.BOT_ID, MicrosoftAppPassword: process.env.BOT_PASSWORD, MicrosoftAppType: 'MultiTenant' }) );
index.ts
ファイルに移動します。Create HTTP server.
で、ボットが開始console.log(
\n後、${server.url}をリッスンしている ${server.name});
次の情報を追加します。console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); console.log('\nTo test your bot in Teams, sideload the app manifest.json within Teams Apps.');
ルート フォルダーで、新しいフォルダー構造である prompts>sequence を作成します。
シーケンスの下に、次のファイルを作成します。
- config.json
- skprompt.txt
- actions.json
config.json
ファイルに移動し、次のコードを追加して、プロンプト モデル設定を作成します。{ "schema": 1.1, "description": "A bot that can turn the lights on and off", "type": "completion", "completion": { "model": "gpt-3.5-turbo", "completion_type": "chat", "include_history": true, "include_input": true, "max_input_tokens": 2800, "max_tokens": 1000, "temperature": 0.2, "top_p": 0.0, "presence_penalty": 0.6, "frequency_penalty": 0.0, "stop_sequences": [] }, "augmentation": { "augmentation_type": "sequence" } }
カスタム エンジン エージェントは、自然言語モデリングに OpenAI または Azure OpenAI を使用します。
config.json
ファイルは、カスタム エンジン エージェントの言語処理を処理します。 このファイルは、index.ts
ファイルからPromptManager
によって開始され、エージェントの言語処理を監視します。 プロンプトを開始すると、プロンプト マネージャーはプロンプト構成ファイル (シーケンス/config.json) を検索し、プロンプト設定を OpenAI または Azure OpenAI に渡します。skprompt.txt
ファイルに移動します。 OpenAI または Azure OpenAI で会話を行い、会話を容易にするために、次の手順を追加します。The following is a conversation with an AI assistant. The assistant can turn a light on or off. context: The lights are currently {{getLightStatus}}.
skprompt.txt
ファイルには、ユーザーが OpenAI または Azure OpenAI と対話するテキスト プロンプトが含まれています。 OpenAI または Azure OpenAI は、これらのプロンプトを使用して、前のテキストに従う可能性が最も高い次の一連の単語を生成しようとします。actions.json
ファイルに移動します。 次のコードを追加して、カスタム エンジン エージェントのアクションを定義します。{ { "name": "LightsOn", "description": "Turn the lights on", "parameters": [] }, { "name": "LightsOff", "description": "Turn the lights off", "parameters": [] }, { "name": "Pause", "description": "Delays for a period of time", "parameters": { "type": "object", "properties": { "time": { "type": "number", "description": "The amount of time to delay in milliseconds" } }, "required": [ "time" ] } } }
actions.json
ファイルには、カスタム エンジン エージェントが実行できるアクションが含まれています。index.ts
ファイルのActionPlanner
は、actions.json
ファイルで定義されているアクションを使用してアクションを実行します。
このサンプルでは、すべての自然言語モデリングに OpenAI または Azure OpenAI を使用します。ユーザーは任意の言語でカスタム エンジン エージェントと通信できます。 カスタム エンジン エージェントは、追加のコードなしで適切に理解し、応答します。
カスタム エンジン エージェントをローカルでビルドして実行する
ローカル環境でアプリをビルドして実行するには次のようにします。
F5 キーを選択して、デバッグ モードでアプリを実行します。
注:
Teams Toolkit が特定の前提条件をチェックできない場合は、チェックするように求められます。
デバッガーでアプリをローカルで実行した場合の動作について説明します。
気にかかる点がある場合、F5 キーを押すと、Teams Toolkit によって以下が行われます。
- 次のすべての前提条件を確認します。
- Microsoft 365 アカウントでログインしています。
- カスタム アプリのアップロードは、Microsoft 365 アカウントで有効になっています。
- サポートされている Node.js バージョンがインストールされています。
- ボット アプリで必要なポートを使用できます。
- npm パッケージをインストールします。
- Dev Tunnel を開始して HTTP トンネルを作成します。
- Microsoft Entra IDにアプリを登録し、アプリを構成します。
- Bot Framework SDK にアプリを登録し、アプリを構成します。
- Teams 開発者ポータルにアプリを登録し、アプリを構成します。
- アプリを起動します。
- Web ブラウザーで Teams を起動し、アプリをアップロードします。
注:
アプリを初めて実行すると、すべての依存関係がダウンロードされ、アプリがビルドされます。 ビルドが完了すると、自動的にブラウザー ウィンドウが開きます。 このプロセスが完了するまでに 3 分から 5 分かかる場合があります。
Teams によって Web ブラウザーでアプリが実行されます。
メッセージが表示されたら、Microsoft 365 アカウントを使用してサインインします。
ローカル コンピューター上の Teams にアプリをアップロードするように求められたら、[ 追加] を選択します。
これで、カスタム エンジン エージェントが Teams で正常に実行されるようになりました。 アプリが読み込まれた後、カスタム エンジン エージェントとのチャット セッションが開きます。
「
LightsOn
」と入力して、カスタム エンジン エージェントとの対話を開始できます。
アプリがローカルで実行されない場合のトラブルシューティング方法について説明します。
Teams でアプリを正常に実行するには、Teams アカウントでカスタム アプリのアップロードが有効になっていることを確認します。 カスタム アプリのアップロードの詳細については、「前提条件」セクションを参照してください。
重要
カスタム アプリのアップロードは、 Government Community Cloud (GCC)、GCC-High、および国防総省 (DOD) 環境で利用できます。
ヒント
アプリ検証ツールを使用して、カスタム アプリをアップロードする前に問題がないか確認します。 このツールは Toolkit に含まれています。 アプリをアップロードするエラーを修正します。
カスタム エンジン エージェントをデプロイする
カスタム エンジン エージェントの作成、ビルド、実行について学習しました。 最後の手順は、アプリを Azure に展開することです。
Teams Toolkit を使用して、Azure にカスタム エンジン エージェントをデプロイしましょう。
Azure アカウントにサインインする
このアカウントを使用して、Microsoft Azure potral にアクセスし、アプリをサポートする新しいクラウド リソースをプロビジョニングします。
Visual Studio Code を開きます。
アプリを作成したプロジェクト フォルダーを開きます。
サイド バーで Teams Toolkit
アイコンを選択します。
[Azure にサインイン] を選択します。
ヒント
Azure アカウント拡張機能がインストールされ、同じアカウントを使用している場合は、この手順をスキップできます。 他の拡張機能で使用しているのと同じアカウントを使用します。
既定の Web ブラウザーが開き、アカウントにサインインできます。
資格情報を使用して Azure アカウントにサインインします。
メッセージが表示されたらブラウザーを閉じて、Visual Studio Code に戻ります。
サイドバーの [ACCOUNTS ] セクションには、2 つのアカウントが個別に表示されます。 また、使用可能な Azure サブスクリプションの数も一覧表示されます。 使用可能な Azure サブスクリプションが少なくとも 1 つあることを確認します。 ない場合は、サインアウトして別のアカウントを使用します。
これで、アプリを Azure にデプロイする準備が整いました。
これで、カスタム エンジン エージェントが作成されました。
アプリを Azure にデプロイする
デプロイは、2 つの手順で構成されます。 まず、必要なクラウド リソースが作成されます (プロビジョニングとも呼ばれます)。 次に、アプリのコードが作成されたクラウド リソースにコピーされます。 このチュートリアルでは、カスタム エンジン エージェントをデプロイします。
プロビジョニングとデプロイの違いは何ですか?
プロビジョニング 手順では、アプリ用の Azure と Microsoft 365 にリソースを作成しますが、コード (HTML、CSS、JavaScript) はリソースにコピーされません。 [デプロイ] ステップでは、プロビジョニング 手順中に作成したリソースにアプリのコードがコピーされます。 新しいリソースをプロビジョニングせずに複数回デプロイするのが一般的です。 プロビジョニング手順の完了には時間がかかる場合があるため、デプロイ手順とは別です。
Visual Studio Code のサイド バーで Teams Toolkit アイコンを選択します。
[プロビジョニング] を選択します。
Azure リソースに使用するサブスクリプションを選択します。
アプリは Azure リソースを使用してホストされます。
Azure でリソースを実行するときにコストが発生する可能性があることを示すダイアログが表示されます。
[プロビジョニング] を選択します。
プロビジョニング プロセスでは、Azure クラウドにリソースが作成されます。 時間がかかる場合があります。 進行状況を監視するには、右下隅にあるダイアログを確認します。 数分後に、次の通知が表示されます。
必要に応じて、プロビジョニングされたリソースを表示できます。 このチュートリアルでは、リソースを表示する必要はありません。
プロビジョニングされたリソースが [環境 ] セクションに表示されます。
プロビジョニングが完了したら、[ライフサイクル] パネルから [デプロイ] を選択します。
プロビジョニングと同様に、デプロイには時間がかかります。 プロセスを監視するには、右下隅にあるダイアログを確認します。 数分後に完了通知が表示されます。
これで、同じプロセスを使用して、カスタム エンジン エージェントを Azure にデプロイできます。
デプロイされたアプリを実行する
プロビジョニングとデプロイの手順が完了したら、次の手順を実行します。
Visual Studio Code からデバッグ パネル (Ctrl + Shift + D / ⌘⇧-D または ビュー > Run) を開きます。
[起動構成] ドロップダウンから [ リモートの起動 (Edge)] を選択します。
[ デバッグの開始 ] (F5) を選択して、Azure からアプリを起動します。
[追加] を選択します。
Toolkit には、アプリが Teams に追加されることを示すメッセージが表示されます。
アプリが Teams クライアントに読み込まれます。
アプリを Azure にデプロイした場合の動作について説明します
展開前は、このアプリケーションは以下のようにローカルで動作しています。
- バックエンドは、Azure Functions Core Tools を使用して実行します。
- アプリケーションの HTTP エンドポイントは、Microsoft Teams がアプリケーションを読み込む場所でローカルに実行されます。
デプロイは、2 つの手順で構成されるプロセスです。 アクティブな Azure サブスクリプションにリソースをプロビジョニングし、その後アプリケーションのバックエンド コードとフロントエンド コードを Azure にデプロイまたはアップロードします。
- バックエンドが構成済みの場合、Azure App Service や Azure Storage など、さまざまな Azure のサービスが使用されています。
- フロントエンド アプリケーションは、静的 Web ホスティング用に構成された Azure Storage アカウントにデプロイされます。
展開前は、このアプリケーションは以下のようにローカルで動作しています。
- バックエンドは、Azure Functions Core Tools を使用して実行します。
- アプリケーションの HTTP エンドポイントは、Microsoft Teams がアプリケーションを読み込む場所でローカルに実行されます。
デプロイは、2 つの手順で構成されるプロセスです。 アクティブな Azure サブスクリプションにリソースをプロビジョニングし、その後アプリケーションのバックエンド コードとフロントエンド コードを Azure にデプロイまたはアップロードします。
- バックエンドが構成済みの場合、Azure App Service や Azure Storage など、さまざまな Azure のサービスが使用されています。
- フロントエンド アプリケーションは、静的 Web ホスティング用に構成された Azure Storage アカウントにデプロイされます。
おめでとうございます!
これで完了です。
ライトを制御するカスタム エンジン エージェントを作成しました。
チュートリアルを完了しました。
このセクションに問題がある場合 このセクションを改善できるよう、フィードバックをお送りください。
Platform Docs