文字起こしから生成AIで議事録を作るときは、1回の指示で全部を作らせるより、「整形→要約→抽出→検証」の4段階に分けて指示すると、確認しやすく直しやすい下書きになります。 段階ごとに出力の形を決め、決定事項やToDoには「根拠となる発言」を必ず添えさせるのがポイントです。

この記事は、AIへの指示文(プロンプト)と検証の手順に絞ります。4段階のプロンプト、ToDoをMarkdown表とCSVの両方で出力させる指定、長い文字起こしの分割と統合、発言にない内容を書かせない指示を、Anthropic と OpenAI の公式プロンプトガイドの記載と対応づけて、そのまま貼れる形でまとめました。

確認環境:プロンプトの考え方は Anthropic と OpenAI の公式ドキュメント(2026-10-05 閲覧)の記載に沿っています。掲載した分割スクリプトと照合スクリプトは Python 3.11 で実行し、出力をそのまま載せています。プロンプトは書き換えて使うひな形で、AIの出力例は載せていません(出力の形は「出力形式の指定」として示します)。

4段階プロンプトの早見表

段階 目的 AIに渡すもの 出力させるもの 人が見る点
1. 整形 文字起こしを読みやすくする 生の文字起こし、用語集 発言ごとに1行の文章(内容は変えない) 固有名詞、数字、話者
2. 要約 議題ごとの流れをつかむ 整形した文字起こし、会議情報 議題ごとの要点(各3行まで) 議題の抜け、言い過ぎ
3. 抽出 決定事項・ToDo・未決事項を取り出す 整形した文字起こし、会議情報 引用の一覧、決定事項、ToDo(Markdown表とCSV)、未決事項 担当、期限、決定か提案か
4. 検証 下書きを文字起こしと照らす 整形した文字起こし、3の出力 項目ごとの判定(裏づけあり・一部・なし)と修正版 「なし」と判定された項目

どの段階にも共通で入れる指示は次の4つです。

共通の指示 ねらい
文字起こしに書かれていることだけを使う 一般的な知識や推測で補わせない
読み取れない項目は「不明」と書く 担当や期限を作らせない
先に関係する発言を抜き出し、それをもとに書く 根拠を文字起こしに結び付ける
資料・指示・出力をXMLタグで区切る 指示と文字起こしを取り違えさせない

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「議事録を生成AIで作るプロンプト集|文字起こし要約と決定事項・ToDo抽出」

公式ガイドのどの記載に沿っているか

この記事のプロンプトは、次の記載をもとに組み立てています。

技法 公式ガイドの記載 この記事での使い方
XMLタグで区切る Anthropic:指示・文脈・例・入力が混ざるプロンプトでは、種類ごとに専用のタグで囲むと取り違えが減る。タグ名は一貫した、内容を表す名前にする 会議情報、用語集、文字起こし、指示を別々のタグで囲む
Markdown とXMLタグを併用する OpenAI:Markdown の書式とXMLタグを組み合わせて、プロンプトと文脈データの論理的な境界を伝えられる。XMLタグは資料の始まりと終わりを示すのに役立つ 指示は見出しと箇条書き、資料はタグで囲む
長い資料は上、依頼は最後 Anthropic:長い資料(2万トークン以上)はプロンプトの上のほうに置き、問いや指示を最後に置く。複雑で資料が複数ある入力では、応答の質がテストで最大30%向上した 文字起こしを先に、指示を後に書く
複数の資料はタグを入れ子にする Anthropic:資料ごとに document タグで囲み、その中に source と document_content を置く 分割した文字起こしや、複数回分の会議を渡すときに使う
先に引用を抜き出す Anthropic:長い資料の作業では、まず関係する箇所を引用させてから作業させると、関係する内容に集中できる 抽出の前に、発言の引用一覧を作らせる
「わからない」と言ってよいと伝える Anthropic:不確かなときはそう述べてよいと明示すると、誤った情報が大きく減る 読み取れない担当・期限は「不明」と書かせる
主張ごとに引用で確かめ、無ければ取り下げる Anthropic:応答の各主張について裏づける引用を探させ、見つからない主張は取り下げさせる 検証の段階で、項目ごとに裏づけを探させる
渡した資料だけを使う Anthropic:渡した資料の情報だけを使い、一般知識を使わないよう明示する 共通の指示に入れる
同じプロンプトを複数回実行して比べる Anthropic:出力どうしの食い違いは、誤りの手がかりになる 重要な会議では抽出を2回実行して差を見る
指示の構成 OpenAI:developer メッセージは Identity(役割)、Instructions(指示)、Examples(例)、Context(文脈)の順に構成する例が示されている 役割→指示→出力形式→資料の順でひな形を作る

資料を置く位置は、Anthropic のガイドが「長い資料は上、問いは最後」、OpenAI のガイドが「文脈は通常プロンプトの終わり近く」と説明しています。どちらのガイドにも共通するのは、資料と指示の境界をはっきり示すことです。 この記事のひな形は、タグで囲んだ資料を上に置き、最後に依頼文をもう一度短く書く形にしています。Claude ではそのまま、ChatGPT では資料と指示の順番を入れ替えても、タグで区切ってあれば使えます。

準備:会議情報と文字起こしの形をそろえる

文字起こしの形

話者名と時刻が付いているほど、担当と根拠を結び付けやすくなります。ここでは、次の形の文字起こしを例に使います(架空の会議です)。

[00:00:05] 佐藤: それでは備品予約システムの週次定例を始めます。今日は10月5日です。
[00:00:20] 佐藤: 最初に、予約の上限について。1人あたり同時に3件までという案でしたね。
[00:01:02] 鈴木: はい。利用者アンケートでも3件で足りるという回答が多かったです。
[00:01:30] 高橋: 3件で問題ないと思います。
[00:01:41] 佐藤: では、同時予約の上限は3件で決定とします。
[00:02:10] 佐藤: 次に通知メールの文面です。鈴木さん、案を作ってもらえますか。
[00:02:25] 鈴木: わかりました。10月9日までに通知メールの文面案を作ります。
[00:03:05] 高橋: 予約のキャンセル期限はどうしますか。前日までか、当日の開始前までか。
[00:03:40] 佐藤: 利用状況を見てから決めたいので、今日は保留にしましょう。
[00:04:12] 田中: 貸出履歴の画面は、来週までに試作を見せられると思います。
[00:04:30] 佐藤: お願いします。あと、管理者向けの手順書は誰かが書く必要がありますね。
[00:04:55] 高橋: それは次回決めましょう。
[00:05:10] 佐藤: 次回は10月12日の10時からです。以上です。

タグの決め方

タグ名に決まりはありません。内容がわかる名前にして、すべての段階で同じ名前を使い続けることが大切です。

タグ 入れるもの
meeting_info 件名、日時、出席者、欠席者、議題
glossary 人名の表記、製品名、略語(文字起こしの聞き間違いを直す手がかり)
transcript 文字起こし(整形前または整形後)
draft 検証したい下書き(段階3の出力)
instructions 指示
quotes AIに先に書かせる引用の一覧(出力側のタグ)

以下のプロンプトでは、{{ }} の部分を自分の会議の内容に置き換えます。

プロンプト1:文字起こしを整形する

最初の段階では、内容を足したり要約したりせず、読みやすくするだけにします。ここで要約まで進めると、後の段階で根拠となる発言を引用できなくなるためです。

<glossary>
{{人名・製品名・略語の正しい表記を1行ずつ。例:
佐藤(さとう)
備品予約システム(「びひん予約」「備品よやく」と書かれていたらこの表記に直す)}}
</glossary>

<transcript>
{{生の文字起こし}}
</transcript>

<instructions>
あなたは会議の文字起こしを読みやすく整える校正者です。
上の transcript を、次のルールで整えてください。

# やること
- 1発言を1行にし、「[時刻] 話者: 発言」の形にそろえる。
- 「えーと」「あのー」などのつなぎ言葉、言い直し、相づちだけの発言を取り除く。
- glossary にある語は、glossary の表記に直す。
- 明らかな誤変換は直し、直した箇所を最後に「修正した語」として一覧にする。

# 守ること
- 発言の意味・順番・数字・日付は変えない。要約しない。発言を足さない。
- 話者がわからない行は、話者を「不明」とする。推測で名前を入れない。
- 聞き取れていない、または意味が通らない箇所は、直さずに【要確認】を付けて残す。

# 出力形式
<cleaned_transcript> タグの中に整形後の文字起こしを書く。
続けて <corrections> タグの中に「元の語 → 直した語(時刻)」を1行ずつ書く。無ければ「なし」と書く。
</instructions>

上の instructions に従って、transcript を整形してください。

プロンプト2:議題ごとに要約する

<meeting_info>
件名: {{備品予約システム 週次定例}}
日時: {{2026-10-05 10:00〜10:30}}
出席: {{佐藤、鈴木、高橋、田中}}
議題: {{1. 同時予約の上限 2. 通知メール 3. キャンセル期限 4. 貸出履歴の画面}}
</meeting_info>

<transcript>
{{整形後の文字起こし}}
</transcript>

<instructions>
あなたは会議の記録係です。上の transcript を、meeting_info の議題ごとに要約してください。

# 手順
1. まず <quotes> タグの中に、各議題の結論や理由がわかる発言を、時刻と話者を付けて原文のまま抜き出す。
2. 次に <summary> タグの中に、抜き出した発言だけをもとに要約を書く。

# 要約のルール
- 議題ごとに見出しを付け、「結論」「理由・出た意見」「残った論点」を各1〜3行で書く。
- 議題に無い話題が出ていたら、最後に「その他」としてまとめる。
- 文は「〜した。」「〜となった。」の常体で、1文を60字以内にする。
- transcript に書かれていることだけを使う。書かれていない背景や理由を補わない。
- 結論が出ていない議題は、結論を「未決」と書く。
- 読み取れない点は「不明」と書く。
</instructions>

上の instructions に従って、議題ごとの要約を作成してください。

プロンプト3:決定事項・ToDo・未決事項を抽出する

議事録でもっとも使われる部分です。ToDo は「担当/内容/期限/根拠となる発言」の4列にし、Markdown表とCSVの両方で出力させます。 Markdown表はそのまま議事録に貼り、CSVは表計算ソフトや課題管理表に取り込みます。

<meeting_info>
件名: {{備品予約システム 週次定例}}
日時: {{2026-10-05 10:00〜10:30}}
出席: {{佐藤、鈴木、高橋、田中}}
</meeting_info>

<transcript>
{{整形後の文字起こし}}
</transcript>

<instructions>
あなたは会議の記録係です。上の transcript から、決定事項・ToDo・未決事項を取り出してください。

# 手順(この順番で出力する)
1. <quotes> タグの中に、決定・依頼・引き受け・期限・保留に関する発言を、
   番号・時刻・話者を付けて原文のまま抜き出す。該当が無ければ「該当する発言なし」と書く。
2. <decisions> タグの中に、決定事項を番号つきで書く。
3. <todo_table> タグの中に、ToDo を Markdown の表で書く。
4. <todo_csv> タグの中に、同じ ToDo を CSV で書く。
5. <open_items> タグの中に、未決事項を書く。

# 分類の基準
- 決定事項:進行役または参加者が「決定」「〜とします」「〜でいきましょう」など合意を示した内容。
  提案や意見の段階のものは決定事項に入れない。
- ToDo:誰かが「やります」と引き受けた作業、または名指しで依頼され本人が了承した作業。
- 未決事項:保留・持ち越しになった事項、担当が決まらなかった作業、答えが出なかった質問。

# 書き方
- 決定事項は「〜とする。」で終え、末尾に根拠の引用番号を[引用2]の形で付ける。
- ToDo の列は「担当」「内容」「期限」「根拠となる発言」の4つ。この順番と列名で固定する。
  - 担当:1名。transcript の話者名の表記のまま。
  - 内容:「〜を作る」「〜を確認する」のように動詞で終える。
  - 期限:YYYY-MM-DD。「来週」「月末」などは、meeting_info の日時をもとに日付へ直せる場合だけ直す。
  - 根拠となる発言:quotes から、その作業を引き受けた発言を1つ、原文のまま写す。
- CSV は1行目を「担当,内容,期限,根拠となる発言」とし、値にカンマや改行を含む場合は二重引用符で囲む。
- 未決事項は「何が決まっていないか」「次にいつ・誰が判断するか」を書く。

# 守ること
- transcript に書かれていることだけを使う。一般的な知識や推測で補わない。
- 担当・期限が発言から読み取れないときは「不明」と書く。空欄にしない。作らない。
- quotes に根拠が無い項目は書かない。
- 該当が1件も無い区分は「なし」と書く。
</instructions>

上の instructions に従って、quotes から順に出力してください。

出力形式の指定(ToDo の表とCSV)

AIに示す形は次のとおりです。プロンプトの「書き方」に、この形をそのまま貼り足すと列の並びがそろいやすくなります(値は形を示すための記入例です)。

<todo_table>
| 担当 | 内容 | 期限 | 根拠となる発言 |
|---|---|---|---|
| (話者名) | (動詞で終える) | (YYYY-MM-DD または 不明) | (原文のまま) |
</todo_table>

<todo_csv>
担当,内容,期限,根拠となる発言
(話者名),(動詞で終える),(YYYY-MM-DD または 不明),(原文のまま)
</todo_csv>

「期限」を不明のまま出させるのは、足りない情報を目に見える形で残すためです。 空欄や推測の日付で埋まっていると、確認が要る行を見分けられなくなります。

プロンプト4:下書きを文字起こしと照らして検証する

抽出した下書きを、別の指示で確かめます。Anthropic のガイドにある「主張ごとに裏づける引用を探し、見つからなければ取り下げる」方法を、議事録向けに書いたものです。抽出と同じ会話の続きではなく新しい会話で実行すると、抽出時のやり取りと切り離して確かめられます。

<transcript>
{{整形後の文字起こし}}
</transcript>

<draft>
{{プロンプト3の出力(decisions、todo_table、open_items)}}
</draft>

<instructions>
あなたは議事録の校閲者です。draft の各項目が transcript で裏づけられるかを確かめてください。

# 手順
1. draft の決定事項・ToDo・未決事項を1項目ずつ取り上げる。
2. 項目ごとに、裏づけとなる発言を transcript から原文のまま探す。
3. 次の基準で判定する。
   - 裏づけあり:項目の内容が、引用した発言からそのまま読み取れる。
   - 一部のみ:内容の一部(担当・期限・数字など)が発言から読み取れない、または発言と違う。
   - 裏づけなし:対応する発言が見つからない。
4. 逆方向も確かめる。transcript にある決定・引き受け・保留のうち、draft に載っていないものを挙げる。

# 出力形式
<review> タグの中に、次の列の Markdown 表を書く。
| 区分 | 項目 | 判定 | 裏づけとなる発言(時刻・話者つき) | 直す点 |
<missing> タグの中に、draft に載っていない事項を、根拠の発言とともに書く。無ければ「なし」。
<revised> タグの中に、次の方針で直した決定事項・ToDo表・未決事項を書く。
   - 「裏づけなし」の項目は削除し、削除した位置に[削除]と書く。
   - 「一部のみ」の項目は、読み取れない部分を「不明」に置き換える。
   - missing に挙げた事項を追加する。

# 守ること
- 判定は transcript の文言だけを根拠にする。もっともらしいかどうかで判定しない。
- 裏づけとなる発言が見つからないときは、引用を作らず「見つからない」と書く。
- 提案や意見の段階の発言が、決定事項として書かれていないかを必ず確かめる。
</instructions>

上の instructions に従って、review から順に出力してください。

検証の結果、「一部のみ」「裏づけなし」「載っていない事項」に挙がったものが、人が確かめる対象になります。

長い文字起こしは分割して統合する

1時間を超える会議などで文字起こしが長いときは、分割→部分ごとに抽出→統合の順で進めます。

手順 やること 使うもの
1 発言の行の切れ目で分割する。前後の塊で数行を重ねる 下の分割スクリプト
2 塊ごとに「部分抽出プロンプト」を実行する プロンプトA
3 部分の結果をまとめて「統合プロンプト」を実行する プロンプトB
4 統合した下書きを、プロンプト4で検証する(長い場合は塊ごとに) プロンプト4

分割のコツは3つです。

  • 発言の途中で切らない。 行の切れ目で分けます。
  • 塊どうしを数行重ねる。 依頼(「案を作ってもらえますか」)と了承(「わかりました」)が別の塊に分かれると、ToDo として拾えなくなるためです。
  • 塊に番号を付ける。 統合のときに、どの塊の発言かをたどれます。

分割スクリプト(Python)

文字数の上限と、重ねる行数を指定して分割します。

"""文字起こしを、発言の行の切れ目で分割する。
使い方: python3 split_transcript.py transcript.txt 300 2
  第2引数: 1つの塊の最大文字数  第3引数: 前の塊から重ねる行数
"""
import sys
from pathlib import Path


def split_lines(lines, max_chars, overlap):
    chunks, current, size = [], [], 0
    for line in lines:
        if current and size + len(line) > max_chars:
            chunks.append(current)
            current = current[-overlap:] if overlap else []
            size = sum(len(x) for x in current)
        current.append(line)
        size += len(line)
    if current:
        chunks.append(current)
    return chunks


def main():
    path, max_chars, overlap = Path(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3])
    lines = [x for x in path.read_text(encoding="utf-8").splitlines() if x.strip()]
    chunks = split_lines(lines, max_chars, overlap)
    for i, chunk in enumerate(chunks, 1):
        out = path.with_name(f"{path.stem}_part{i:02d}.txt")
        out.write_text("\n".join(chunk) + "\n", encoding="utf-8")
        print(f"part{i:02d}: {len(chunk)}行 {sum(len(x) for x in chunk)}字 "
              f"{chunk[0][:10]} 〜 {chunk[-1][:10]}")
    print(f"合計 {len(lines)}行 → {len(chunks)}個に分割")


if __name__ == "__main__":
    main()

前に示した13行の文字起こしを、動きがわかるように小さな上限(300字、重なり2行)で分割した結果です。

$ python3 split_transcript.py transcript.txt 300 2
part01: 7行 300字 [00:00:05] 〜 [00:02:25]
part02: 6行 274字 [00:02:10] 〜 [00:04:30]
part03: 4行 157字 [00:04:12] 〜 [00:05:10]
合計 13行 → 3個に分割

part01 の最後の2行(00:02:10 の依頼と 00:02:25 の了承)が、part02 の先頭にも入っています。上限の文字数は、使うAIサービスが一度に受け取れる長さに合わせて大きくします。

プロンプトA:部分ごとに抽出する

<meeting_info>
件名: {{件名}}
日時: {{日時}}
出席: {{出席者}}
</meeting_info>

<document index="{{2}}">
<source>{{transcript_part02.txt(全3個のうち2個目)}}</source>
<document_content>
{{分割した文字起こし}}
</document_content>
</document>

<instructions>
この文字起こしは、長い会議を分割したうちの1個です。前後の塊と数行重なっています。
この塊に書かれている範囲だけを対象に、次を出力してください。

1. <quotes>:決定・依頼・引き受け・期限・保留に関する発言を、時刻と話者を付けて原文のまま。
2. <decisions>:この塊の中で合意が示された事項。「〜とする。」で終え、根拠の時刻を付ける。
3. <todo_csv>:1行目を「担当,内容,期限,根拠となる発言,時刻」とした CSV。
4. <open_items>:この塊の中で保留・持ち越しになった事項。
5. <carry_over>:この塊の最後で話が途中になっている話題(次の塊で結論が出る可能性があるもの)。

# 守ること
- この塊に書かれていることだけを使う。前後の内容を推測しない。
- 担当・期限が読み取れないときは「不明」と書く。
- 該当が無い区分は「なし」と書く。
</instructions>

上の instructions に従って出力してください。

プロンプトB:部分の結果を統合する

<partial_results>
<result index="1">
{{1個目の出力}}
</result>
<result index="2">
{{2個目の出力}}
</result>
<result index="3">
{{3個目の出力}}
</result>
</partial_results>

<instructions>
partial_results は、1つの会議を分割して抽出した結果です。これを1つにまとめてください。

# 統合のルール
- 時刻が同じ発言を根拠にする項目は、重なり部分の重複なので1つにまとめる。
- 同じ事項について、前の塊では「保留」、後の塊では「決定」となっている場合は、
  後の塊の内容を採用し、経過を1行で添える。
- carry_over に挙がった話題は、後の塊に結論があればそれと結び付ける。結論が無ければ未決事項に入れる。
- 塊どうしで内容が食い違う項目は、どちらかに決めずに <conflicts> タグの中へ両方を書き出す。

# 出力形式
<decisions>:決定事項(番号つき、根拠の時刻つき)
<todo_table>:「担当」「内容」「期限」「根拠となる発言」の Markdown 表(時刻の早い順)
<todo_csv>:同じ内容の CSV(1行目は「担当,内容,期限,根拠となる発言」)
<open_items>:未決事項
<conflicts>:食い違いがあった項目。無ければ「なし」

# 守ること
- partial_results に書かれていることだけを使う。新しい項目を足さない。
- 「不明」と書かれた担当・期限は、他の塊に根拠がある場合だけ埋める。
</instructions>

上の instructions に従って統合してください。

ToDoのCSVを文字起こしと機械的に照合する

AIに「根拠となる発言」を原文のまま書かせておくと、その発言が文字起こしに本当にあるかを、プログラムで確かめられます。 次のスクリプトは、CSV の列名、期限の形式、根拠となる発言の有無、発言者と担当の一致を確認します。

"""ToDo の CSV を文字起こしと照合する。
使い方: python3 check_todo.py transcript.txt todo.csv
確認する点: 列名 / 期限の形式 / 根拠となる発言が文字起こしにあるか / その発言者と担当が合うか
"""
import csv
import re
import sys
from pathlib import Path

COLUMNS = ["担当", "内容", "期限", "根拠となる発言"]
LINE = re.compile(r"^\[(?P<time>[\d:]+)\]\s*(?P<speaker>[^::]+)[::]\s*(?P<text>.*)$")


def normalize(text):
    return re.sub(r"\s+", "", text)


def main():
    transcript = Path(sys.argv[1]).read_text(encoding="utf-8").splitlines()
    utterances = [m.groupdict() for m in map(LINE.match, transcript) if m]
    with open(sys.argv[2], encoding="utf-8-sig", newline="") as f:
        reader = csv.DictReader(f)
        if reader.fieldnames != COLUMNS:
            sys.exit(f"列名が違います: {reader.fieldnames}")
        rows = list(reader)

    ng = 0
    for no, row in enumerate(rows, 1):
        notes = []
        if not re.fullmatch(r"\d{4}-\d{2}-\d{2}|不明", row["期限"]):
            notes.append(f"期限の形式({row['期限']})")
        quote = normalize(row["根拠となる発言"])
        hit = next((u for u in utterances if quote and quote in normalize(u["text"])), None)
        if hit is None:
            notes.append("根拠となる発言が文字起こしに見つからない")
        elif row["担当"] not in ("不明", hit["speaker"]):
            notes.append(f"発言者は{hit['speaker']}({hit['time']})。担当と合うか確認")
        if row["担当"] == "不明":
            notes.append("担当が不明。会議の参加者に確認")
        ng += bool(notes)
        print(f"{no}: {'要確認' if notes else 'OK'} {row['担当']} / {row['内容']}"
              + "".join(f"\n   - {n}" for n in notes))
    print(f"{len(rows)}件中 {ng}件が要確認")


if __name__ == "__main__":
    main()

動きを確かめるために、直す点をわざと3か所入れたCSVを手で用意しました(AIの出力ではありません)。2行目は期限が日付になっておらず、3行目は文字起こしに無い発言を根拠にしており、4行目は担当が不明です。

担当,内容,期限,根拠となる発言
鈴木,通知メールの文面案を作る,2026-10-09,10月9日までに通知メールの文面案を作ります。
田中,貸出履歴の画面の試作を見せる,来週,貸出履歴の画面は、来週までに試作を見せられると思います。
高橋,管理者向けの手順書を書く,2026-10-12,手順書は高橋が書きます。
不明,キャンセル期限を決める,不明,今日は保留にしましょう。
$ python3 check_todo.py transcript.txt todo.csv
1: OK 鈴木 / 通知メールの文面案を作る
2: 要確認 田中 / 貸出履歴の画面の試作を見せる
   - 期限の形式(来週)
3: 要確認 高橋 / 管理者向けの手順書を書く
   - 根拠となる発言が文字起こしに見つからない
4: 要確認 不明 / キャンセル期限を決める
   - 担当が不明。会議の参加者に確認
4件中 3件が要確認

この照合でわかるのは「引用が実在するか」「形式がそろっているか」までです。その発言が本当に決定や引き受けを意味しているかは、次のチェックリストで人が確かめます。

人が確かめる検証チェックリスト

No 確かめる点 見方
1 決定事項は、合意を示す発言に基づいているか 根拠の発言が「〜と思います」「〜はどうでしょう」で終わっていたら提案の段階
2 ToDo の担当は、引き受けた本人か 依頼した人と引き受けた人が入れ替わっていないか
3 期限は発言どおりか 「来週」「月末」を日付に直した結果が、会議の日付から見て合っているか
4 「不明」の項目を確認したか 参加者に聞いて埋める。埋まらなければ未決事項へ移す
5 固有名詞と数字 文字起こしの段階の聞き間違いが残っていないか(件数、日付、人名)
6 保留・持ち越しが未決事項に入っているか 「次回決めましょう」「持ち帰ります」を文字起こしで検索する
7 抜けている議題は無いか 議題の一覧と、要約の見出しを突き合わせる
8 発言の趣旨が変わっていないか 条件付きの発言(「〜なら可能」)の条件が落ちていないか
9 共有してよい内容か 個人に関する話題や、共有範囲が限られる内容が入っていないか
10 参加者の確認を経たか 送付前に進行役か発言者に見てもらう

表計算ソフトに貼る場合(タブ区切り):

No  確かめる点   確認者 結果  メモ
1   決定事項は、合意を示す発言に基づいているか           
2   ToDo の担当は、引き受けた本人か          
3   期限は発言どおりか           
4   「不明」の項目を確認したか           
5   固有名詞と数字         
6   保留・持ち越しが未決事項に入っているか         
7   抜けている議題は無いか         
8   発言の趣旨が変わっていないか          
9   共有してよい内容か           
10  参加者の確認を経たか          

また、文字起こしを外部のAIサービスに入力してよいかは、所属先のルールに従って判断します。

短い会議向け:1回で済ませるプロンプト

30分程度までの会議で、文字起こしがすでに読みやすい場合は、整形と要約を省いて抽出だけを行い、同じ指示の中で自己点検まで求める形にもできます。

<meeting_info>
件名: {{件名}} 日時: {{YYYY-MM-DD HH:MM〜HH:MM}} 出席: {{出席者}}
</meeting_info>

<transcript>
{{文字起こし}}
</transcript>

<instructions>
transcript から議事録の下書きを作ってください。次の順番で出力します。

1. <quotes>:決定・依頼・引き受け・期限・保留に関する発言を、時刻と話者つきで原文のまま。
2. <minutes>:次の見出しの Markdown。
   ## 決定事項(「〜とする。」で終える。根拠の時刻つき)
   ## ToDo(「担当」「内容」「期限」「根拠となる発言」の表)
   ## 未決事項
   ## 議論の要点(5行以内)
3. <todo_csv>:ToDo と同じ内容の CSV(1行目は「担当,内容,期限,根拠となる発言」)。
4. <self_check>:minutes の各項目について、根拠の発言が quotes にあるかを1行ずつ確かめ、
   無い項目があれば minutes から取り除いたうえで、取り除いた項目名を書く。

# 守ること
- transcript に書かれていることだけを使う。
- 担当・期限が読み取れないときは「不明」と書く。
- 提案や意見の段階のものは決定事項に入れない。
</instructions>

上の instructions に従って出力してください。

思った出力にならないときの直し方

起きること 指示に足す・直す点
提案が決定事項として書かれる 「決定事項」の基準を、合意を示す言い回しの例つきで書く。検証で必ず確かめさせる
担当や期限が補われている 「読み取れないときは不明と書く。空欄にしない。作らない」を入れる
根拠となる発言が言い換えられている 「原文のまま写す」と書き、先に quotes を出力させる。照合スクリプトで確かめる
表の列の順番や名前が毎回変わる 列名と順番を固定と明記し、出力形式の指定を貼る
CSV が表計算ソフトで列ずれする 「値にカンマや改行を含む場合は二重引用符で囲む」を入れる
文字起こしの中の言葉を指示として扱ってしまう 文字起こしを transcript タグで囲み、指示は instructions タグに分ける
長い会議で後半の内容が薄くなる 分割して部分ごとに抽出し、統合する
「来週」などが日付に直らない meeting_info に会議の日付を書き、「直せる場合だけ直す」と指示する
毎回、拾う項目が少しずつ違う 同じプロンプトで2回実行し、片方にしか無い項目を重点的に確かめる

よくある質問

Q. ChatGPT と Claude で、同じプロンプトを使えますか? A. 使えます。XMLタグで資料と指示を区切る方法は、Anthropic と OpenAI のどちらの公式ガイドにも載っています。資料を置く位置の説明に違いがあるので、長い文字起こしで結果が安定しないときは、資料と指示の順番を入れ替えて試します。

Q. 整形と要約を省いて、抽出だけでもよいですか? A. 文字起こしが読みやすく、会議が短ければ「1回で済ませるプロンプト」で足ります。聞き間違いが多い文字起こしでは、先に整形しておくと、根拠となる発言の照合がしやすくなります。

Q. 話者名が付いていない文字起こしでも使えますか? A. 使えますが、担当は「不明」が増えます。話者を推測で埋めさせるより、不明のまま出させて、参加者に確認するほうが確実です。

Q. 検証プロンプトを通せば、人の確認は省けますか? A. 検証プロンプトと照合スクリプトは、確かめる対象を絞り込むための道具です。決定か提案かの判断や、共有してよい内容かの判断は、チェックリストに沿って人が行います。

まとめ

  • 「整形→要約→抽出→検証」の4段階に分け、段階ごとに出力の形を決める。
  • ToDo は「担当/内容/期限/根拠となる発言」の4列にし、Markdown表とCSVの両方で出力させる。
  • 先に関係する発言を原文のまま抜き出させ、その引用をもとに書かせる。
  • 読み取れない担当・期限は「不明」と書かせ、作らせない。
  • 資料・指示・出力はXMLタグで区切り、同じタグ名を使い続ける。
  • 長い文字起こしは、行の切れ目で数行重ねて分割し、部分抽出→統合の順で進める。
  • 根拠となる発言はスクリプトで照合し、決定か提案かはチェックリストで人が確かめる。

参考・出典

  • Anthropic「Prompting best practices」(XMLタグ、長い資料の置き方、引用を先に抜き出す方法) https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
  • Anthropic「Reduce hallucinations」(わからないと言ってよいと伝える、引用による裏づけ、主張の取り下げ、複数回の実行による比較) https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations
  • OpenAI「Prompt engineering」(Markdown とXMLタグによる区切り、Identity・Instructions・Examples・Context の構成) https://developers.openai.com/api/docs/guides/prompt-engineering

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「議事録を生成AIで作るプロンプト集|文字起こし要約と決定事項・ToDo抽出」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?