5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Copilot Studio を使って問い合わせ文章から不足情報を自動抽出・追加入力させる仕組みを作ってみた

5
Last updated at Posted at 2026-05-11

はじめに

私は過去に、技術サポート窓口で技術支援業務を対応していたことがあります。
主な役割は、特定製品に関する問い合わせを受け、障害の切り分けや技術的な質問への回答を行うことでした。
当時の問い合わせフローは以下のようなものです。

問い合わせ担当者が、問い合わせ内容をフォームに入力する
窓口エンジニアがその内容を確認し、

  • どの程度の緊急度か
  • どの製品・機能に関するものか
  • 調査に必要な情報が揃っているか
    不足している情報があれば、追加でヒアリングを行う

しかし実際の運用では、必要な情報を聞き漏らしてしまい、後から再度確認が必要になる、というケースが頻発していました。そこで、当時の現場を振り返りながら、「こんな仕組みがあったら助かったのに」と思っていた機能を Copilot Studio を使って実装してみることにしました。

この記事では、私が技術問い合わせのヒアリング補助エージェントを実装した際の設計と実装のポイントを紹介します。

今回実現したいこと

前述の問い合わせ業務の内容をまとめるとこのような感じです。

  • 問い合わせ者がフォームに問い合わせ情報を入力する
  • 窓口のエンジニアが入力内容を確認する
  • 必要な情報が不足していれば、追加でヒアリングする
  • 調査対応を開始し、管理簿に記録する

ここでミスが発生するのは

  • 「入力された情報の中に必要な情報があるか確認する」
  • 「必要な情報がなかった場合、その内容をヒアリングする」
    という部分です。

エンジニアのスキルレベルやコミュニケーション能力によっては、

  • 不足している情報に気づけない
  • 問い合わせ担当者に必要な情報を聞けなかった or 何を聞けばいいかわからない

といった事態が起こり得ます。

そこで今回は、 入力内容を基に「不足している情報」を自動で判断し、必要な質問をユーザーに提示する という仕組みを問い合わせ入力フォーム側に組み込み、エンジニアの負担を軽減することを目的としました。

以降では、この機能を Copilot Studio のカスタムエージェントで実装した際の具体的な構成と実装方法を解説します。

大まかな構成

本実装では、以下のような流れを想定しています。
(太字は、内部的にはAI側に処理させる部分です。)

  • ユーザーがテキストボックスに問い合わせ内容を入力
  • エージェントが文章から必要な項目を自動抽出
  • 抽出結果を確認し、不足している項目があれば質問を生成
  • 追加で入力された情報を含めて最終的なデータを構築
  • その内容を SharePoint リストに記録

※ 同様の構成で Dataverse テーブルへの記録も可能な想定です。

入力例(情報が不足しているケース)と想定動作

以下のように、 製品情報が不足している 問い合わせを想定します。

社内環境にて、特定の操作を実施した際にアプリケーションが応答しなくなり、
業務に支障が出ております。
【事象概要】
・特定のファイルを開いた後、保存操作を行うと画面がフリーズする
・タスクマネージャーから強制終了が必要
【再現手順】

アプリケーションを起動
任意のファイルを開く
編集後に保存を実行

【環境情報】
・OS:Windows 11 Pro
・端末:Surface Laptop
業務影響が出ているため、2026年2月25日までにご回答をいただけますと幸いです。

この内容を Copilot Studio のカスタムエージェントに入力すると、不足している情報(例:製品名)について、以下のように追加入力を求められます。

image.png

入力が完了すると、抽出・補完された情報が SharePoint リストに記録されます。

image.png

実装方針とその背景について

実は当初は、「不足情報があれば追加入力を促す」ことを すべてプロンプト指示で実現しようとしました。
(つまり全体の制御をAIに任せる方法です)
しかしこの方法では、

  • 追加入力を新たな情報として正しく解釈してくれない
  • 想定外の会話フローになり追加の質問をしてくれない
    など、動作の安定性に課題がありました。

そこで方針を変更し、「不足している情報ごとに質問文と入力フォームを表示する」という処理をAIに任せず、あらかじめ構成された順序で実行させる構成としています。

実装のポイント

内部的な処理の流れは以下の通りです。

  • 入力文章から、必要項目を JSON 形式で抽出
  • 抽出結果のうち、値が空の項目だけをリストアップ
  • 不足項目を配列(Table 型)として整理
  • ループ処理で1項目ずつ質問文を生成
  • 入力された内容を元の JSON にマージ
  • 最終的な JSON を Power Automate に渡して記録

この方法を採用することで、ループ内でもアダプティブカードを表示できるようになり、柔軟なヒアリングが可能になりました。

image.png

ユーザー入力用アダプティブカード

初期入力では、以下のようなアダプティブカードを使用します。

image.png

{
  type: "AdaptiveCard",
  '$schema': "https://adaptivecards.io/schemas/adaptive-card.json",
  version: "1.5",
  body: [
    {
      type: "Input.Text",
      placeholder: "内容を入力してください",
      label: "入力欄",
      id: "UserInput",
      isMultiline: true
    },
    {
      type: "ActionSet",
      actions: [
        {
          type: "Action.Submit",
          title: "Action.Submit",
          id: "Submit"
        }
      ]
    }
  ]
}

動的に質問文と入力フォームを生成する

Copilot Studio には、指定したプロンプトを用いて AI に文章生成を行わせる プロンプトアクションがあります。本実装ではこの機能を以下の処理で活用していきます。

  • 入力文章から必要項目を JSON で抽出
  • 抽出結果のうち、空の項目のみを再抽出
  • 不足項目を元に質問文を生成

実際にトピック ノードへ新しいプロンプトの追加をするため、以下のように操作します。

image.png

まずは最初のフローで示した通り、不足している情報だけを JSON 形式で抜き出します。
与えるプロンプトとしては以下のような形です。

image.png

{
  ""[entity 1]"": [抽出された値],
  ""[entity 2]"": [抽出された値],
  // 追加のエンティティをその値やデータ型とともに引き続き一覧表示します
  ...
}

続けて、上記のプロンプトでJSONになった情報のうち、不足している部分をプロンプトで抽出します。
先ほどの手順と同様にプロンプトアクションを追加したら、値が空文字のキーだけをJSON形式で返却するプロンプトを設定していきます。

image.png

空白が入っているキーをリストで出力し、以下のように不足している情報だけを抜き出します。

[{"key":"値1"},{"key":"値2"}]

上記のリストの各要素をループで一つずつ処理しないといけないので、このリストを一度テーブル型に変換します。会話ノードの出力結果は基本的に Record 型で出力されてくるため、そのままではループ可能な形式(Table)として扱うことができません。そのためまずは先ほどカスタムプロンプトから出力された Record 型の出力結果を JSON 形式にパースし、テーブル型に変換します。
[変数値を設定する] の会話ノードで、後述の PowerFx 式を構成します。

image.png

Table(
    ForAll(
        ParseJSON(Topic.BlankItemsList.text),
        { key: Text(ThisRecord.key) }
    )
)

このように変換することで、情報が空白になった内容をトピック内でループ処理可能になります。こんな感じです。

image.png

ループの中で、欠落している情報にあたる「ループ値の変数」を入力して、それぞれの不足情報をヒアリングするための質問文を生成しましょう。ここでもカスタムプロンプトを使います。以下のようにしてみます。

その後、不足する情報を追加入力させるためのフォームを表示し、入力された内容を記録情報として保持している JSON にマージします。

最後に、できた JSON をフローに渡して記録します。
エージェントフローの入力はテキスト形式とするのがポイントです。

image.png

受け取った文字列を JSON 解析して各項目を動的コンテンツに格納するため、アクション「JSON の解析」で文字列を処理します。ポイントは、Copilot Studio 側で一度マージ結果の JSON をメッセージなどで出力しておき、アクション「JSON の解析」の "サンプル ペイロードを使用してスキーマを生成する" でスキーマを生成しましょう。

マージ結果の JSON をメッセージなどで出力
image.png

"サンプル ペイロードを使用してスキーマを生成する" でスキーマ生成する
image.png

[完了] 押下後は、以下のように自動的にスキーマが設定され、以降の処理において各項目を動的コンテンツとして扱えるようになります。

image.png

最後は SharePoint Online の「項目の作成」などでテーブルに記録してあげます。
1つの文字列として入力されていた項目が、スキーマ構成に基づき分解されて入力されているところに注目してみてください。

image.png

実装のポイントの解説は以上です。実際の動作例は以下のような形になります。

動作例

たとえば、希望する回答期日が抜けている場合

Microsoft Teams を利用したオンライン会議中に、
特定の参加者の音声が断続的に途切れる事象が発生しております。
【事象概要】
・会議開始から10〜15分程度で音声が聞こえなくなる
・一度退出し再参加すると一時的に改善する
【再現手順】

Microsoft Teams で会議を開始
複数名(5名以上)が参加
10分以上経過後、一部参加者の音声が途切れる

【環境情報】
・OS:Windows 10 Enterprise
・Teams バージョン:最新版(自動更新)
・ネットワーク:社内有線LAN
原因および対処方法についてご教示いただけますでしょうか。

image.png

たとえば、再現手順がない場合

Microsoft Excel を利用した業務ファイルにて、
数式の計算結果が想定と異なる値になる事象を確認しております。
【事象概要】
・SUM 関数の結果が実際の合計値と一致しない
・再計算(F9)を実行しても改善しない
【影響範囲】
・月次レポート作成業務
・複数の担当者で同様の事象を確認
【環境情報】
・製品:Microsoft Excel(Microsoft 365 Apps)
・OS:Windows 11
業務上重要なデータであるため、2026年3月1日までに
ご回答をいただけますと幸いです。

image.png

想定通り、不足している情報をちゃんと聞いてくれていますね。
記録のほうは以下の通りです。

image.png

まとめ

本記事では、Copilot Studio を用いて、

  • 問い合わせ文章の解析
  • 不足情報の自動特定
  • 追加質問の生成と入力フォーム表示
  • 管理用リストへの記録

までを一連で実現する方法を紹介しました。
この仕組みは問い合わせ対応に限らず、 「任意の文章から項目を抽出し、不足分を補完する」
といった業務全般に応用できる可能性がありそうです。同様の業務を担当している方や、Copilot Studio で何か作ってみたいと考えている方の参考になれば幸いです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?