- AI ⚙️
議事録を生成AIで作るプロンプト集|文字起こし要約と決定事項・ToDo抽出
文字起こしから生成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期連続の黒字決算。