次の方法で共有


エージェントを作成およびアップグレードするためのガイドライン

重要

  • Microsoft 365 Copilotのエージェントはプレビュー段階にあり、Microsoft 365 Copilotでのみ機能します。
  • メッセージ拡張エージェントはプレビュー段階です。
  • Microsoft 365 Copilotのメッセージ拡張機能エージェントは、Microsoft Word とPowerPointのパブリック プレビュー段階にあります。
  • organizationでMicrosoft 365 Copilotが使用可能であることを確認します。 Microsoft 365 Copilotの開発環境を取得するには、次の 2 つの方法があります。
    • Microsoft 365 Copilotを持つサンドボックス Microsoft 365 テナント (TAP メンバーシップを通じて限定プレビューで利用できます)。
    • Microsoft 365 Copilot ライセンスを持つエンタープライズ顧客の運用環境。 エージェントがチーム ストアに掲載される可能性を高めるための検証ガイドラインの詳細については、「 エージェントの検証ガイドライン」を参照してください。

Microsoft 365 エージェントは、Teams や Outlook など、さまざまな Microsoft 365 製品との統合を提供します。 統合により、ユーザーは外部システムでコンテンツを検索または作成できます。 メッセージ拡張エージェントを使用すると、Microsoft 365 Copilotはボットを介して他のソフトウェアやサービスの API と対話できます。 Microsoft 365 Copilotを使用すると、次のことができます。

  • 最新情報またはレコードを検索します。 たとえば、最新のインシデント チケットやアンケートの結果などです。
  • 複数のレコードに基づいて情報を要約します。 たとえば、プロジェクト Northwind に関連するすべてのインシデント チケットを要約します。

既存のメッセージ拡張機能をビルドまたはアップグレードして、Microsoft 365 Copilotでの有用性と使いやすさを最大化することをお勧めします。 メッセージ拡張機能は、1 つ以上の検索コマンドをサポートする必要があります。 Microsoft 365 Copilotスキルとして認識されるため、ユーザーの代わりにコマンドを実行できます。

図は、Microsoft TeamsとMicrosoft 365 Copilotの間のユーザー エクスペリエンスを示しています。

アプリ、コマンド、およびパラメーターの説明を定義する

[修正する必要があります]

適切な説明は、アプリの機能の明確で簡潔な概要を提供し、Microsoft 365 Copilotが検索操作を効率的に検出して実行できるようにします。 ユーザーが動詞と共にアプリ名を入力する場合 (例: Contoso チケットの検索)、メッセージ拡張エージェントをMicrosoft 365 Copilotから呼び出す必要があります。

Microsoft 365 Copilotのメッセージ拡張エージェントのサンプル プロンプトの例を示すパス シナリオを示すスクリーンショット。

Microsoft 365 Copilotのエージェントとしてのメッセージ拡張機能のサンプル プロンプトの例のない失敗シナリオを示すスクリーンショット。

アプリの説明

長短のアプリの説明を明確にし、アプリのスコープを定義する必要があります。 Microsoft 365 Copilotでアプリをエージェントとしてレンダリングするには、次のエージェント要件に合わせてアプリの説明を変更します。

  • 長い説明では、Microsoft 365 Copilotのメッセージ拡張エージェントの機能と使用方法を明確に説明する必要があります。 たとえば、Microsoft 365 Copilotで Contoso クラウドを使用して、タスクを検索して要約します。
  • 簡単な説明では、自然言語でアプリの機能を簡単に説明する必要があり、アプリの名前を含めることができます。

次のコード スニペットは、各カテゴリの簡単な説明の例を示しています。

説明: チケット、バグ、プロジェクトを作成、検索、表示します。

アプリの説明の例:

{
  "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
  "version": "1.0.0",
  "manifestVersion": "1.13",
  "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
  "name": {
    "short": "Tasks",
    "full": "Contoso Tasks"
  },
  "description": {
    "short": "Create, search, view tickets, bugs, and projects",
    "full": "Contoso Tasks makes it easy to stay organized. Create, assign, and track tasks individually or collaboratively with your team, and see everything come together in one place."
  },

検索コマンドの説明

コマンドの説明は、ユーザーの意図と発話をエージェント内の検索コマンドにマップし、ユーザーの意図とキーワードの分析に基づいて構築する必要があります。 検索コマンドの説明では、次の手順を実行する必要があります。

  • コマンドが自然言語で検索する内容と方法 (詳細な一覧) に焦点を当てます。
  • 動詞とシノニム (該当する場合) を含めます。
  • ネイティブ アプリの検索機能で使用される可能性が高いキーワードに焦点を当てます。

セマンティックの説明

[修正に適しています]

semanticDescription プロパティは、Microsoft 365 Copilotのコマンドの詳細な説明を提供するために使用されます。 コマンドのセマンティック記述では、最大 5,000 文字がサポートされ、ユーザー インターフェイスには表示されません。 semanticDescription プロパティが空のままの場合、Microsoft 365 Copilotは description フィールドの情報を使用します。 semanticDescriptionを記述するときは、コマンドの予期される値、制限、および範囲に関する情報を含める必要があります。

semanticDescription プロパティは必須フィールドではありません。 ただし、アプリ マニフェストに semanticDescription を追加すると、短い説明、パラメーター、コマンドの説明に関する既存の検証チェックもセマンティックの説明に適用できます。

次のコード スニペットは、各カテゴリのコマンドとセマンティック説明の例を示しています。

説明: 明日の Northwind に関連する優先度の高いタスクを検索します。

コマンドの説明の例:

"commands": [
        {
          "id": "Search",
          "type": "query",
          "title": "Tasks",
          "description": "Search for high priority tasks related to Northwind that are due tomorrow.",
          "SemanticDescription": "Search for issues, epics, stories, tasks, sub tasks, bugs + additional details."
          "initialRun": true,
          "fetchTask": false,
          "context": [
            "commandBox",
            "compose",
            "message"
          ],

重要

エージェントで OAuth サインイン リンクをアクティブ化するには、アプリ マニフェスト内の検索コマンドのtrueinitialRun プロパティを設定していることを確認します。

パラメータの説明

各メッセージ拡張コマンドには、対応する parameters プロパティがあり、最大 5 つのパラメーターをサポートします。 最初のパラメーターは、メッセージ拡張検索バーに表示する必要があります。 パラメーターには適切な説明が必要です。許容されるパラメーター、列挙型、頭字語、および出力形式の組み合わせを含める必要があります。

semanticDescription プロパティは、Microsoft 365 Copilotのコマンドの詳細な説明を提供するために使用されます。 パラメーターのセマンティック記述は最大 2,000 文字をサポートし、ユーザー インターフェイスには表示されません。 semanticDescription プロパティが空のままの場合、Microsoft 365 Copilotは description フィールドの情報を使用します。 semanticDescriptionを記述するときは、コマンドの予期される値、制限、および範囲に関する情報を含める必要があります。

適切なパラメーターの説明では、出力形式の自然言語でのシステムの要件について説明します。 次に、各カテゴリの基本的な検索要求と高度な検索要求の例をいくつか示します。

  • 基本検索: Northwind に関連するタスクを検索します。
  • 高度な検索: 明日の Northwind に関連する優先度の高いタスクを検索します。

パラメーターの説明の例:

"parameters": [
    {
        "name": "Name",
        "title": "Project or Task Name",
        "description": "Project name or task name as keyword.",
        "inputType": "text"
    },
    {
        "name": "Time",
        "title": "Time",
        "description": "Date or number of days for which you need tasks for.",
        "semanticDescription": "Date or number of days for which you need tasks for. Output: Number",
        "inputType": "text"
    },
    {
        "name": "Priority",
        "title": "Priority",
        "description": "Priority of tasks.",
        "semanticDescription": "Priority of tasks. Acceptable values are high, medium, low, NA",
        "inputType": "text"
    }] 

複合発話を使用して情報を取得するようにメッセージ拡張を強化する

[修正する必要があります]

注:

[検索] ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) は、Microsoft 365 Copilotではサポートされていません。

Microsoft 365 Copilotの場合、検索ベースのメッセージ拡張機能は、正確な情報の深い取得を実行するために、3 つ以上の一意の複合発話をサポートする必要があります。 複合発話を有効にするには、 アプリ マニフェスト (以前は Teams アプリ マニフェストと呼ばれる) を更新して、3 つ以上のパラメーターを処理するように検索範囲を拡張し、次のことを確認する必要があります。

  • 複数のパラメーターに基づく検索をサポートするように Web サービスを更新します。 ユーザー要求に応答する方法の詳細については、「 検索コマンドに応答する」を参照してください。

  • Microsoft 365 Copilotは、ユーザー発話の一部ではないパラメーターに空の文字列または null 値を渡す場合があります。 パラメーターを処理するように Web サービスを更新します。

  • メッセージ拡張では、最大 10 個のコマンド (使用可能な 9 個) がサポートされ、各コマンドには対応する parameters プロパティがあり、最大 5 つのパラメーターをサポートします。


次のコードは、アプリ マニフェストで定義されている複数のパラメーターの例です。
"commands": [
                {
                    "id": "inventorySearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search products by name, category, inventory status, supplier location, stock level",
                    "title": "Product inventory",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "productName",
                            "title": "Product name",
                            "description": "Enter a product name here",
                            "inputType": "text"
                        },
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category of the product",
                            "inputType": "text"
                        },
                        {
                            "name": "inventoryStatus",
                            "title": "Inventory status",
                            "description": "Enter what status of the product inventory. Possible values are 'in stock', 'low stock', 'on order', or 'out of stock'",
                            "inputType": "text"
                        },
                        {
                            "name": "supplierCity",
                            "title": "Supplier city",
                            "description": "Enter the supplier city of product",
                            "inputType": "text"
                        },
                        {
                            "name": "stockQuery",
                            "title": "Stock level",
                            "description": "Enter a range of integers such as 0-42 or 100- (for >100 items). Only use if you need an exact numeric range.",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "discountSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search for discounted products by category",
                    "title": "Discounts",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category to find discounted products",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "revenueSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Find products based on their revenue/period",
                    "title": "Revenue",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "revenueRange",
                            "title": "Revenue range",
                            "description": "Enter 'high' or 'low' or enter a range of integers such as 0-10000 or 5000- using this exact format",
                            "inputType": "text"
                        }
                    ]
                }
            ]

Northwind アプリがシーフードと在庫パラメーターの応答を返すパス シナリオの例を示すスクリーンショット。

検索パラメーターには、許容されるパラメーター、列挙型、頭字語、および出力形式を含む適切な説明が必要です。 詳細と例については、「 パラメーターの説明」を参照してください。

サンプル プロンプトを定義する

[修正する必要があります]

samplePrompts プロパティは、Microsoft 365 Copilot内のさまざまなエージェントを使用する方法についてユーザーに指示します。 Microsoft 365 Copilotは、サンプル プロンプトを使用して、ユーザーのプロンプトを表示します。 プロンプトは、異なるロケールに適応でき、異なるコマンド間でクリアする必要があります。 サンプル プロンプトは、ユーザーが最初にエージェントをインストールまたは有効にしたときに、Microsoft 365 Copilot内の First Run Experience (FRE) で使用できます。

Microsoft 365 Copilotでメッセージ拡張エージェントが有効になっている場合に表示されるサンプル プロンプトを示すスクリーンショット。

注:

  • アプリ マニフェストで samplePrompts プロパティが指定されていない場合、プロンプトは表示されません。
  • samplePrompts プロパティは、アプリの申請プロセス中にアプリの検証に必須です。
  • アプリに複数のコマンドを定義すると、最大 3 つのプロンプト (上位 3 つのコマンドのそれぞれから 1 つ) がユーザーに表示されます。 プロンプトは回転して、さまざまなコマンド間でさまざまなプロンプトセットをユーザーに提供します。

次のコードは、アプリ マニフェストの samplePrompts プロパティの例です。

"composeExtensions": [
 {
  "canUpdateConfiguration": true,
  "botId": "bxxxxxx5-xxxx-xxxx-xxxx-4xxxxxx16599",
  "commands": [
   {
    "id": "orders",
    "title": "Orders",
    "context": [
     "Commandbox",
     "Compose"
    ],
    "description": "Search for orders",
    "semanticDescription": "Search for orders",
    "samplePrompts": [
     {
      "text": "Search for all orders"
     },
     {
      "text": "Search for orders related to Contoso"
     },
     {
      "text": "Search for all pending orders"
     },
     {
      "text": "Search for all completed ordered for Fabrikam"
     }
    ]
   }
  ]
 }
]

リッチ アダプティブ カード応答を作成する

[修正する必要があります]

メッセージ拡張機能は、アダプティブ カードを使用してユーザー入力に応答します。 メッセージ拡張エージェントのアダプティブ カードは、効果的に機能し、豊富に表示され、次の要件を満たしている必要があります。

  • アダプティブ カードの応答には、アダプティブ カードのコンテンツとプレビューカード情報が同じテンプレートの一部として含まれている必要があります。 [修正する必要があります]

    スクリーンショットは、Microsoft 365 Copilot アプリ応答にプレビューとコンテンツが同じ応答に含まれていることを示すサンプル アプリの例を示しています。


    アダプティブ カード応答テンプレートの例
    {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.5",
        "body": [
          {
            "type": "Container",
            "items": [
              {
                "type": "TextBlock",
                "text": "${companyName}",
                "size": "Medium",
                "wrap": true,
                "style": "heading"
              },
              {
                "type": "TextBlock",
                "text": "${stockExchange} ${stockSymbol}",
                "isSubtle": true,
                "spacing": "None",
                "wrap": true
              },
              {
                "type": "TextBlock",
                "text": "${formattedDate} ${formattedTime}",
                "wrap": true
              }
            ]
          },
          {
            "type": "Container",
            "spacing": "None",
            "items": [
              {
                "type": "ColumnSet",
                "columns": [
                  {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                      {
                        "type": "TextBlock",
                        "text": "${currentPrice} ",
                        "size": "ExtraLarge",
                        "wrap": true
                      },
                      {
                        "type": "TextBlock",
                        "text": "${priceChange} ${percentChange}",
                        "color": "${changeColor}",
                        "spacing": "None",
                        "wrap": true
                      }
                    ]
                  },
                  {
                    "type": "Column",
                    "width": "auto",
                    "items": [
                      {
                        "type": "FactSet",
                        "facts": [
                          {
                            "title": "Open",
                            "value": "${openPrice} "
                          },
                          {
                            "title": "High",
                            "value": "${highPrice} "
                          },
                          {
                            "title": "Low",
                            "value": "${lowPrice} "
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "previewCard": {
          "contentType": "application/vnd.microsoft.card.hero",
          "content": {
            "title": "${companyName}",
            "text": "${stockSymbol}"
          }
        }
      }
    

    注:

    アクションの種類 imBackmessageBack は、データ オブジェクトではサポートされていません。

    次のアクションの種類をお勧めします。

    • Action.OpenUrl: カードから指定した URL を開きます。
    • Action.ToggleVisibility: カード内の 1 つ以上の要素を表示または非表示にします。
    • Action.Execute: 入力フィールドを収集し、ボット サービスに要求として送信します。
    • Action.Submit: データ オブジェクトで型呼び出しを使用して、ダイアログまたは Stageview を開きます。

    図は、Microsoft 365 Copilotのアダプティブ カード応答の [在庫の更新]、[補充]、[取り消し] アクション ボタンの例を示しています。

  • ユーザーがダイアログ、ステージビュー、またはカードから直接カードの情報を変更できる場合は、アダプティブ カードでユニバーサル アクションと自動更新をサポートすることをお勧めします。 [推奨]

  • アダプティブ カードには 、メタデータの一部として URL を含める必要があります。これにより、カードをハブ間で簡単にコピーできます。 [推奨]

  • サムネイルとは別に、アダプティブ カード内の画像には代替テキストが必要です。 [推奨]

Microsoft 365 Copilot アプリのメッセージ拡張エージェント

[修正する必要があります]

重要

Microsoft 365 Copilot アプリのメッセージ拡張エージェントは、WordとPowerPointのプライベート プレビューが制限されています。 パブリック プレビューが発表された後に公開される詳細。

エージェントは、パーソナライズされたユーザー エクスペリエンスのために、より多くのスキルと知識をMicrosoft 365 Copilotに持ち込むことで、Microsoft 365 Copilotエクスペリエンスをカスタマイズして拡張します。 エージェントのサブセットであるエージェントを使用することで、ユーザーは、それらのアプリ内の情報を取得または変更するかどうかに関係なく、サード パーティのアプリケーションと対話することで、追加の機能をMicrosoft 365 Copilotに統合できます。 たとえば、メッセージ拡張エージェントは、エージェントがアクティブ化されたときに要求に応じてMicrosoft 365 Copilotが表示できるように、他のアプリケーションのデータの検索を容易にします。

Microsoft 365 Copilot in Teamsまたは copilot.microsoft.com 用のエージェントを開発した場合は、ユーザーがワークフロー内で提供する利点を既に認識しています。

コード サンプル

サンプルの名前 説明 TypeScript
Northwind インベントリ メッセージ拡張機能 このサンプルでは、Microsoft 365 Copilotで Teams メッセージ拡張機能をエージェントとして使用する方法を示します。 表示

関連項目