IM-Copilotを活用した会議音声の自動文字起こし&要約:読みやすい議事録を簡単に作成

このCookBookでは、IM-Copilotの文字起こしアクションとチャットアクションを組み合わせて、音声ファイルから議事録を自動生成する実用的なアプリケーションをローコードで構築する手順を解説します。ユーザーが音声ファイルをアップロードするだけで、AIによる文字起こしと議事録の構造化を自動実行し、結果を表示できるアプリケーションを、フロー定義・API連携・画面作成の各ステップに分けて紹介します。

完成イメージ

このレシピが完成すると以下のような議事録生成アプリケーションが作成されます。
議事録生成画面

前提条件

  • このレシピは、intra-mart Accel Platform 2025 Spring 以降のバージョンで利用できます。
  • IM-Copilot 利用ガイド - セットアップ手順を参照に、「チャットアクション」及び「文字起こしアクション」に必要な設定が完了していること。

完成サンプル

「サイトマップ」→「Accel Studio」→「アプリケーション管理」→「アプリケーション一覧」→「インポート」にアクセスし、
Accel Studio インポートデータをインポートすることでサンプルコンテンツをご利用になれます。

レシピ

  1. LogicDesignerで議事録生成フローを作成します。
  2. ロジックフローのルーティング定義を作成します。
  3. BloomMakerで議事録生成画面を作成します。
  4. 議事録生成用画面のルーティング定義を作成します。
  5. 認可設定を行います。

1. 議事録生成フロー定義を作成します。

フロー定義の処理の流れは、以下の通りです。
1. 開始(「Start」タスク)
2. ファイル情報取得(「Acquire file information」タスク - im_bmGetFileInfo1)
3. 文字起こし実行(「Transcription」タスク - im_transcription1)
4. 議事録生成(「Chat」タスク - im_chat1)
5. 処理完了(「End」タスク)

フロー定義の全体像は、以下の通りです。
議事録生成フロー全体

定数設定では、以下のように設定してください:

定数設定

  • get_content_index0 - 文字起こし結果からコンテンツを取得するためのインデックス番号
  • roleuser - チャットアクションのroleをuserに指定
  • prompt … 議事録生成用のプロンプト(以下の内容)
以下の文字起こしテキストをもとに、Markdown形式で議事録を作成してください。

- 会議の目的と背景を簡潔にまとめてください。
- 発言者ごとの主な発言内容を要約してください。
- 決定事項、保留事項、次回までのアクションアイテムを明確に記載してください。
- 見出し(##)や箇条書き(-)を使って、読みやすく整理してください。
- 不明瞭な発言や背景は「不明」と記載してください。
- 会議の日時や参加者情報が含まれていれば、冒頭に記載してください。
- 説明文は不要です。

入出力設定では、以下のように設定してください:

入出力設定

  • 入力
    • fileKey … <string> (音声ファイルのキー)
  • 出力
    • transcription … <string> (文字起こし結果)
    • meetingMinutes … <string> (生成された議事録)

タスクのマッピング設定を行います。

(1) ファイル情報取得タスクのマッピングを設定します。(Acquire file information - im_bmGetFileInfo1)
音声ファイルのキーを使用してファイル情報を取得するため、以下のようにマッピングしてください。

ファイル情報取得タスクマッピング

画像で示されているように、入力から受け取ったファイルキーをファイル情報取得タスクに直接接続します。

  • Input - fileKey」→「im_bmGetFileInfo1 - key

マッピング設定の詳細手順:
1. 左側の「Input」から「fileKey」を選択します。
2. 右側の「im_bmGetFileInfo1」の「key」に接続します。

この設定により、画面から送信された音声ファイルのキー情報がファイル情報取得タスクに渡され、
後続の文字起こし処理で使用するファイル情報を取得できます。

(2) 文字起こしタスクのマッピングを設定します。(Transcription - im_transcription1)
ファイル情報取得タスクから取得した音声ファイルの内容を文字起こし処理に渡すため、以下のようにマッピングしてください。

文字起こしタスクマッピング

画像で示されているように、ファイル情報取得タスクから取得したファイルの内容(バイナリデータ)を文字起こしタスクの入力に接続します。

  • im_bmGetFileInfo1 - contents」→「im_transcription1 - input

マッピング設定の詳細手順:
1. 左側の「im_bmGetFileInfo1」から「contents」を選択します。
2. 右側の「im_transcription1」の「input」に接続します。

この設定により、音声ファイルのバイナリデータが文字起こしタスクに渡され、AIによる音声認識が実行されます。
文字起こし結果は次のチャットタスクで議事録生成に使用されます。

(3) 議事録生成チャットタスクのマッピングを設定します。(Chat - im_chat1)
文字起こし結果を使用して議事録を生成するため、以下のようにマッピングしてください。

チャットタスクマッピング

文字起こし結果と定数で設定したプロンプトを組み合わせて、チャットタスクに渡します。

  • Constant - prompt」と「im_transcription1 - text」をconcat関数で結合→「im_chat1 - messages[0].content
  • Constant - role」→「im_chat1 - messages[0].role

マッピング設定の詳細手順:
1. 中央の「Add Function」から「concat」関数を追加します。
2. 左側の「Constant」から「prompt」を選択し、concat関数に接続します。
3. 左側の「im_transcription1」から「text」を選択し、同じくconcat関数に接続します。
4. concat関数の出力を右側の「im_chat1」の「messages[0].content」に接続します。
5. 「Constant」の「role」を「im_chat1」の「messages[0].role」に接続します。

この設定により、議事録生成用のプロンプトと文字起こし結果が結合され、AIが適切な形式の議事録を生成します。

concat関数について

concat関数は、複数の文字列を結合するための関数です。
この設定により、議事録生成プロンプト(prompt)と文字起こし結果(text)が結合され、
完全な議事録生成リクエストとしてチャットAPIに送信されます。

例:

  • prompt: "以下の文字起こしテキストをもとに、Markdown形式で議事録を作成してください。..."
  • im_transcription1.text: "会議を開始します。今日は新製品の企画について話し合います。..."
  • 結合結果: プロンプトと文字起こし結果が連結され、AIが構造化された議事録を生成

(4) 終了タスクのマッピングを設定します。(End)
処理結果を出力するため、以下のようにマッピングしてください。

終了タスクマッピング

文字起こし結果と生成された議事録の両方を出力に設定します。

文字起こし結果の出力:
- 「im_transcription1 - text」→「Output - transcription

議事録の出力(配列操作を使用):
- 「im_chat1 - chatMessage」→「last array」関数→「values object」関数→「array get」関数→「Output - meetingMinutes
- 「Constant - get_content_index」→「array get」関数のindexに接続

マッピング設定の詳細手順:
1. 「im_transcription1」の「text」を「Output」の「transcription」に直接接続します。
2. 「im_chat1」の「chatMessage」を「last array」関数に接続します。
3. 「last array」の出力を「values object」関数に接続します。
4. 「values object」の出力を「array get」関数に接続します。
5. 「Constant」の「get_content_index」を「array get」関数のindexに接続します。
6. 「array get」の出力を「Output」の「meetingMinutes」に接続します。

配列操作関数について

この複雑なマッピングは、チャット応答から議事録テキストを正確に抽出するために必要です:

  1. last array: チャット応答配列から最後の要素(最新の応答)を取得
  2. values object: メッセージオブジェクトから値の配列を取得
  3. array get: 指定されたインデックス(get_content_index=0)で議事録内容を取得

この設定により、文字起こし結果と生成された議事録の両方が出力され、画面側で表示や保存に使用できます。

2. ロジックフローのルーティング定義を作成します。

作成した議事録生成フロー定義を画面から呼び出すために、ルーティング定義を設定します。
「サイトマップ」→「LogicDesigner」→「ルーティング定義一覧」→「新規作成」をクリックします。

ルーティング定義作成画面

対象ロジックフロー定義情報

  • 対象フロー: 作成した議事録生成フロー定義を選択します。
    • フロー定義ID: im_cookbook_267505_flow_meeting_minutes_generation
    • フロー定義名: [CookBook] Meeting Minutes Generation
  • バージョン番号: 「最新バージョンを利用する」を選択します。

ロジックフロールーティング定義情報

  • ルーティング: /imart/logic/api/im_cookbook/267505_meeting_minutes_generation
    • アプリケーションから議事録生成フローを呼び出すためのAPIパスです。
  • メソッド: POST を選択します。
  • 認証方法: IMAuthentication を選択します。
  • 認可URI: im-logic-rest://im_cookbook/267505_meeting_minutes_generation
  • レスポンス種別: JSONに変換して返却 を選択します。

設定が完了したら「登録」ボタンをクリックして、ルーティング定義を登録します。

3. BloomMakerで議事録生成用画面を作成します。

ユーザーが音声ファイルをアップロードして議事録生成を実行するための画面をBloomMakerで作成します。

  1. 「サイトマップ」→「BloomMaker」→「コンテンツ一覧」→「コンテンツ新規作成」をクリックします。
  2. 以下の画面構成でコンポーネントを配置します。

画面レイアウト

Container: Page
  └── Container (Headline Level 1: Meeting Minutes Generation)
      ├── Container (Box)
      │   ├── Paragraph (説明テキスト)
      │   ├── Upload File // ファイルアップロード:音声ファイル選択
      │   └── Paragraph (ファイルサイズ制限説明)
      ├── Paragraph
      ├── Field
      │   └── Field Content
      │       └── Button // ボタン:議事録生成アクション実行
      │           └── Button Element
      ├── Text Display // テキスト表示:「Transcription result」ラベル
      │   └── Text Display Element
      ├── Text Area // テキストエリア:文字起こし結果表示
      │   └── Text Area Element
      ├── Text Display // テキスト表示:「Meeting minutes generation result」ラベル
      │   └── Text Display Element
      └── Text Area // テキストエリア:議事録結果表示
          └── Text Area Element

※ファイルサイズ制限説明については、実際にご利用になる文字起こしモデルのファイルサイズ上限に合わせて記載してください。

変数の設定

「変数」→「変数」→「JSON形式で編集」で以下のように設定します。

変数設定JSON

{
  "request": {
    "fileKey": ""
  },
  "response": {
    "transcription": "",
    "meetingMinutes": ""
  }
}

JSON設定の詳細

  • request.fileKey: アップロードした音声ファイルのキーをLogicDesignerフローに送信します。
    • Upload Fileコンポーネントの値を変数として設定します。
    • ユーザーがアップロードした音声ファイルの識別子がAPI呼び出し時に渡されます。
  • response.transcription: LogicDesignerフローからの戻り値(文字起こし結果)を受け取ります。
    • 音声ファイルからAIが生成した文字起こしテキストを格納します。
    • この値を使用して文字起こし結果表示エリアに表示します。
  • response.meetingMinutes: LogicDesignerフローからの戻り値(議事録)を受け取ります。
    • AIが生成した構造化された議事録テキストを格納します。
    • この値を使用して議事録結果表示エリアに表示します。

Actionの設定

Action設定

Action: Call meeting minutes generation API
議事録生成フローを呼び出すためのアクション設定です。

  • アクションアイテム: IM-LogicDesigner フロールーティングにリクエストを送信する
  • ルーティング: im_cookbook/267505_meeting_minutes_generation
  • リクエストパラメータ: $variable.request
  • レスポンスデータ: $variable.response

アクションの実行内容
1. ユーザーがアップロードした音声ファイルのキー(fileKey)をAPI呼び出しで送信します。
2. LogicDesignerフローで文字起こしと議事録生成が実行されます。
3. 処理完了後、文字起こし結果(transcription)と議事録(meetingMinutes)を受け取ります。
4. 受け取った結果を各表示エリアに自動表示します。

コンポーネントの詳細設定

各コンポーネントのプロパティ設定を詳しく説明します。

ファイルアップロードの設定

Upload Fileプロパティ設定

  • エレメント固有:
    • value: 変数値 $variable.request.fileKey

ボタンの設定

ボタンイベント設定

  • イベント設定:
    • On Click: Call meeting minutes generation APIアクションを実行します。

ボタン設定のポイント
- 「Prevent from Submitting Twice」を有効にすることで、ユーザーが連続でボタンをクリックしても、API呼び出しが重複実行されることを防ぎます。
- 音声ファイルの文字起こしと議事録生成は時間がかかる処理のため、この設定により安全で確実な実行を保証します。

文字起こし結果表示エリアの設定

Text Areaプロパティ設定

  • エレメント固有:
    • value: 変数値 $variable.response.transcription
    • readonly: true(読み取り専用)

文字起こし結果エリア設定のポイント
- readonlytrueに設定することで、ユーザーが結果を直接編集できないようにし、AIによる文字起こし結果の整合性を保ちます。
- rowsを適切に設定して、文字起こし結果が見やすく表示されるようにします。
- fixedSizeにより、画面レイアウトが安定します。

議事録結果表示エリアの設定

Text Areaプロパティ設定

  • エレメント固有:
    • value: 変数値 $variable.response.meetingMinutes
    • readonly: true(読み取り専用)

以上で議事録生成画面の作成が完了です。画面左上の保存ボタンをクリックし、変更を保存してください。

4. 議事録生成用画面のルーティング定義を作成します。

作成したBloomMakerコンテンツを実際にアクセス可能にするため、ルーティング定義を作成します。
「サイトマップ」→「BloomMaker」→「ルーティング定義一覧」→「新規作成」をクリックします。

議事録生成画面ルーティング

以下の設定でルーティング定義を作成します。

コンテンツバージョン番号
- 最新バージョンを利用する: 選択します。

メソッド
- GET: 選択します

URL
- /imart/im_cookbook/267505_meeting_minutes_generation

認証URI
- im-bloommaker-contents://im_cookbook/267505_screen_meeting_minutes_generation

ルーティング名
- 標準: 【CookBook】議事録生成画面

設定が完了したら「登録」ボタンをクリックして、ルーティング定義を登録します。

5. 認可設定を行います。

テナント管理者操作ガイド - 認可を設定するを参考に、下記の認可リソースに対して適切な認可設定を行ってください。

議事録生成フロー用リソース定義
- リソースURI: im-logic-rest://im_cookbook/267505_meeting_minutes_generation

議事録生成画面用リソース定義
- リソースURI: im-bloommaker-contents://im_cookbook/267505_screen_meeting_minutes_generation

各リソースごとに、利用を許可したいユーザーやロールを選択し、権限を設定します。

議事録を生成してみます。

ここまでの手順で作成した画面を使い、実際に議事録生成を体験してみましょう。

  1. 作成した画面を開きます。
    • URL例: {base-url}/imart/im_cookbook/267505_screen_meeting_minutes_generation
    • {base-url}はご利用中のintra-mart Accel Platformの実際のBase URLに置き換えてください。
  2. 音声ファイルをアップロードします。
    • 「Upload file」ボタンをクリックし、議事録を作成したい音声ファイルを選択します。
  3. 「Generate the meeting minutes」ボタンをクリックします。
  4. しばらく待つと、以下の結果が画面に表示されます:

議事録生成画面動作確認

このように、IM-Copilotの文字起こしアクションとチャットアクションを組み合わせることで、音声ファイルから自動的に構造化された議事録を生成できる実用的なアプリケーションをローコードで構築できます。
生成された議事録はMarkdown形式で、見出しや箇条書きを使って読みやすく整理されています。
ぜひお試しください。