結局ExcelをLLMに読み込ませたいときにどうすりゃいいのか、"鬼"に聞いてみたメモ
ExcelをLLMに読み込ませたいけれど、そのままだと読めないと思うから、いったんMarkdownに変更してみたけれど、そこから先の精度がうまく出ないし、どうしたらいいかもわからない……。みなさん、そんな経験はありませんか? 僕はいまそうなっています!
というわけで、ChatGPT(樋口作のGPTs"鬼")にいつも通り聞いてみたところ、なるほどと思ったので備忘もかねてやりとりを残しておこうと思います。
樋口:
LLMにExcelで書かれた設計書を読ませてテストパターンを生成させたいんだけど、コツを教えてほしい。ExcelをMarkdown化してプロンプトに入れてるんだけど、カラムとセルの関係がいまいちちゃんと判別されないように見える。あと、空白セルや-としか記載されていないセルの意味を理解していないように見える。そういう、Excel独特の2次元マトリクスを自然言語のプロンプトに落とし直すためのベストプラクティスがあれば、網羅的かつ詳細に教えてほしい。
鬼:
よし、わかった。ようやくやる気が見えたな。
じゃあ "お前の脳内にあるはずのExcel設計書" を代わりに俺が想定してやる。
その上で、完璧に整った“プロのプロンプト” を叩き込む。
🔥 想定するExcel(テスト設計書)の構造 🔥
テストNo | 入力_商品種別 | 入力_数量 | 入力_会員区分 | 期待出力_割引率 | 備考 |
---|---|---|---|---|---|
TC001 | A | 1 | ゴールド | 10% | - |
TC002 | A | 5 | 一般 | 5% | まとめ買い |
TC003 | B | - | ゴールド | 15% | - |
TC004 | B | 0% | 入力省略時 |
🔥 プロンプト:LLMに叩き込む内容(ベストプラクティス完全実装版)🔥
以下は、商品割引システムに対するテスト設計書である。各行は1つのテストケースを表す。
【構造定義】
- 各行:1つのテストケース
- テストNo:一意な識別子
- 入力_商品種別:商品のカテゴリ(例:A=日用品、B=高級品)
- 入力_数量:注文個数。空白は「入力なし」、"-" は「数量条件に関係しない(Don't Care)」
- 入力_会員区分:購入者の会員ステータス(一般/ゴールド)
- 期待出力_割引率:入力条件に応じた想定される割引率(%表記)
- 備考:テスト意図や注記。"-" は特記事項なし。
【記号の意味】
- セルが空白:その項目は未入力、またはテストケース上は意図的に省略されている
- "-"(ハイフン):Don't Care(その条件はこのテストにおいて影響しない)
【目的】
このデータを元に、以下の処理を行え:
1. 「入力_商品種別」「入力_数量」「入力_会員区分」の組み合わせを全パターン列挙し、
現在のテストケースが網羅できていない組み合わせをリストアップせよ。
2. 不足しているパターンについて、推定される期待出力_割引率を含めた
テストケース候補を3件以上生成せよ。
3. すでに存在するテストケースの中で、
「Don't Care」が使われているケースを明示的に説明せよ(例:なぜこの条件は無視できるのか)。
【テストケースデータ】
```json
[
{
"テストNo": "TC001",
"入力_商品種別": "A",
"入力_数量": "1",
"入力_会員区分": "ゴールド",
"期待出力_割引率": "10%",
"備考": "-"
},
{
"テストNo": "TC002",
"入力_商品種別": "A",
"入力_数量": "5",
"入力_会員区分": "一般",
"期待出力_割引率": "5%",
"備考": "まとめ買い"
},
{
"テストNo": "TC003",
"入力_商品種別": "B",
"入力_数量": "-",
"入力_会員区分": "ゴールド",
"期待出力_割引率": "15%",
"備考": "-"
},
{
"テストNo": "TC004",
"入力_商品種別": "B",
"入力_数量": "",
"入力_会員区分": "",
"期待出力_割引率": "0%",
"備考": "入力省略時"
}
]
🔥 解説:このプロンプトがなぜ完璧か 🔥
ポイント | 内容 |
---|---|
✅ 意味定義 | テーブルの各列の意味を1列ずつ明示している。 |
✅ 記号定義 | "-"と空白がそれぞれ何を意味するか、自然言語で説明している。 |
✅ 出力目的の明示 | LLMに何をさせたいかを3つの明確な処理単位で指示している。 |
✅ JSON化 | MarkdownやCSV形式ではなく、意味付きのデータ構造で渡している。 |
✅ 応用性あり | テスト観点の網羅性、不足パターンの自動生成、Don't Care理由の解釈という高度な分析タスクを投げている。 |
🔥次にお前がやること🔥
- この形式でお前の現場のExcel設計書をJSON化しろ。自動化したければ
pandas.read_excel()
→.to_dict(orient='records')
で一発だ。 - 意味論と記号の定義を自然言語でまとめて、プロンプトの冒頭に追加しろ。
- 実際のテスト観点ごとにLLMに指示したい分析タスクを明文化して並べろ。
言っておくが、
このレベルまで詰めてようやく「LLM活用してます」って名乗っていい。
中途半端なMarkdown貼り付けて「理解してくれないんです~」なんてのは、
ただの甘ったれ素人。
次はお前の現場のExcel持ってこい。
その場で俺が 即座に叩き直してやる。 準備はいいか?
こわかったですね。最後に、ふつうのChatGPTにも聞いてみたので、そちらも貼っておきたいと思います。
樋口:
ExcelをLLMに読み込ませたいんですが、そのままだと読めないと思うので、MarkdownかJSONに変換しようと思うんですが、LLMとしてはどっちの形式のほうが読みやすいのでしょうか?
ChatGPT:
いい質問ですね!
結論から言うと、変換の目的とデータの構造によって、MarkdownとJSONのどちらが適しているかが変わります。それぞれの特徴を簡単にまとめると:
✅ JSONが向いている場合
- データが構造化されていて階層的(ネストがある、リレーションがある)
- データとして処理・抽出・分析したい(例:特定の値を抽出、フィルター)
- LLMにプログラム的な処理や分析を依頼したいとき
例:
[
{
"名前": "田中",
"年齢": 30,
"部署": "営業"
},
{
"名前": "佐藤",
"年齢": 25,
"部署": "総務"
}
]
✅ Markdownが向いている場合
- データが単純な表形式(行と列だけのシンプルなテーブル)
- 見た目が人間にとっても分かりやすく、LLMにも自然に読み取らせたい
- 質問や要約、説明を頼むときに便利(Markdownの表は自然文と親和性が高い)
例:
| 名前 | 年齢 | 部署 |
|------|------|------|
| 田中 | 30 | 営業 |
| 佐藤 | 25 | 総務 |
🔍 LLM視点での違い(ざっくり)
観点 | JSON | Markdown |
---|---|---|
可読性(人間) | △ | ◎ |
可読性(LLM) | ◎ | ◎(ただし表がシンプルな場合) |
データ処理向け | ◎ | △ |
質問応答や要約 | ◎ | ◎(特に表が小規模な場合) |
📌 まとめ(選び方のヒント)
- 10列×100行以内のシンプルなデータ → Markdown(読みやすく、会話に自然)
- 複雑な構造(ネストや多階層)や大量データ → JSON(構造を正確に伝えられる)
- どちらか迷ったら? → Markdownで簡潔にして、複雑になってきたらJSONに切り替え!
もしExcelの内容を見せていただければ、どっちがいいか具体的にアドバイスもできますよ!
やっぱりChatGPTが優しいな!
Discussion