9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIへの依頼をMarkdownで構造化するだけで、出力の事故はかなり減らせる

9
Posted at

はじめに

生成AIに質問するとき、長い一文だけで投げていないでしょうか。

EC2が立ち上がらないんだけど原因と対策教えて

これでも返答は来ます。

ただ、現場で使うには情報が足りません。AIは足りない前提を補おうとして、もっともらしい推測を始めます。

この記事では、AIへの依頼をMarkdownで構造化し、出力の事故を減らす考え方を整理します。

動画版

この記事は、以下のYouTube動画をQiita向けに再構成したものです。

プロンプトエンジニアリング入門のYouTubeサムネイル

先に結論

AIへの依頼は、長い一文で投げるより、次の5つに分けると安定します。

項目 書くこと
役割 AIにどの立場で答えてほしいか AWSインフラエンジニアとして
目的 何を解決したいか EC2起動失敗の原因を切り分けたい
前提 いま分かっている事実 OS、エラー、直前の変更
制約 やってほしくないこと 推測で断定しない、公式確認点を出す
出力形式 どんな形で返してほしいか 表、手順、チェックリスト

まずは「目的」「前提」「制約」「出力形式」だけでも十分です。

用語の短い説明

この記事で使う用語を短く整理します。

用語 短い説明
Markdown 見出し、箇条書き、表、コードブロックを簡単に書ける記法
プロンプト AIへ渡す依頼文や条件のこと
ハルシネーション AIが事実のようにもっともらしい誤りを返すこと
RAG 検索や資料参照を組み合わせ、外部情報を根拠に回答させる考え方
マスキング 顧客名、IP、パスなどを公開してよい形に置き換えること

悪い依頼と改善後

たとえば、次のような依頼はAIが推測しやすくなります。

# 悪い例: 目的や前提が少なく、AIが推測しやすい
EC2が立ち上がらないんだけど原因と対策教えて

これをMarkdownで分けると、かなり扱いやすくなります。

<!-- 何を解決したいかを先に書く -->
## 目的

EC2インスタンスが起動後にStatus Check Failedになる原因を切り分けたいです。

<!-- AIが推測しないよう、分かっている事実を並べる -->
## 前提

- OSはAmazon Linux 2023です。
- 直前にセキュリティグループを変更しました。
- SSH接続はできません。
- CloudWatch Logsの設定は未確認です。

<!-- やってほしくないことを明示する -->
## 制約

- 推測で断定しないでください。
- 不明点は先に質問してください。
- 公式ドキュメントで確認すべき点を分けてください。

<!-- 欲しい形を指定すると、レビューしやすい回答になる -->
## 出力形式

| 優先度 | 確認場所 | 見るもの | 次の判断 |
| --- | --- | --- | --- |

ポイントは、AIに「何を知らないか」まで渡すことです。

プロンプトは質問ではなく設計書に近い

プロンプトエンジニアリングという言葉は難しく見えますが、考え方はシンプルです。

AIからほしい回答を得るために、入力文を設計することです。

エンジニアなら、仕様が曖昧な状態で実装すると手戻りが出ることを知っています。AIも同じです。

目的が曖昧
前提がない
制約がない
出力形式がない

この状態で依頼すると、AIは「たぶんこういうことだろう」と補完します。

それが便利に見えることもありますが、技術作業では事故の原因になります。

なぜMarkdownが効くのか

Markdownは、見出しや箇条書きで情報の塊を分けられます。

<!-- この4見出しだけでも依頼の形が安定する -->
## 目的

## 前提

## 制約

## 出力形式

人間にとって読みやすいだけでなく、AIにとっても「どれが背景で、どれが守るべき条件か」を分けやすくなります。

長い一文に全部を詰め込むより、見出しと箇条書きに分けた方が、条件漏れや取り違えが減ります。

黄金の5ステップ

まずは、この5つだけで十分です。

<!-- 役割を指定すると、回答の視点が揃いやすい -->
## 1. 役割

あなたは10年の経験を持つAWSインフラエンジニアです。

<!-- 目的は1文で書く -->
## 2. 目的

起動に失敗するEC2インスタンスの原因を切り分けたいです。

<!-- 分かっている事実だけを書く。推測は混ぜない -->
## 3. 前提・背景

- OSはAmazon Linux 2023です。
- エラーメッセージはStatus Check Failedです。
- 直前にセキュリティグループを変更しました。
- インスタンスタイプはt3.mediumです。

<!-- AIの回答範囲を制御する -->
## 4. 制約

- 推測で断定しないでください。
- 不明な点があれば、先に追加で必要な情報を質問してください。
- 公式ドキュメントで確認すべき点は明示してください。

<!-- 表で出してほしい列を指定する -->
## 5. 出力形式

以下の表で出力してください。

| 優先度 | 確認場所 | コマンド例 | 期待される結果 | 次の判断 |
| --- | --- | --- | --- | --- |

この形にすると、AIはかなり答えやすくなります。

特に重要なのは、制約の中にあるこの一文です。

不明な点があれば、先に追加で必要な情報を質問してください。

AIは情報が足りなくても、親切に答えようとします。技術作業では、その親切さがハルシネーションにつながります。

だから、分からないときは止まってもらう指示を入れます。

そのまま使えるテンプレート

毎回ゼロから書くのが面倒なら、まずはこの形で十分です。

<!-- 役割は短く。長く書きすぎない -->
## 役割

あなたは〇〇に詳しいエンジニアです。

<!-- 目的は「何をしたいか」まで書く -->
## 目的

私は〇〇をしたいです。

<!-- 分かっていることと未確認のことを分ける -->
## 前提

- 現在の状況:
- 直前に変更したこと:
- 分かっているエラー:
- まだ確認していないこと:

<!-- 危ない回答を避けるための条件 -->
## 制約

- 推測で断定しないでください。
- 不明点があれば、先に質問してください。
- 公式情報や実機確認が必要な点を分けてください。
- 機密情報を求めないでください。

<!-- 最終的にほしい形 -->
## 出力形式

1. まず確認すべきこと
2. 原因候補
3. 確認コマンドまたは確認場所
4. 次の判断

テンプレートを使うだけでも、AIの回答は「それっぽい説明」から「確認手順」に寄りやすくなります。

ハルシネーションを前提にする

ハルシネーションとは、AIが事実のようにもっともらしい誤りを返すことです。

AWS CLIの存在しないオプション、古い仕様、実際には動かない設定例などは、現場でそのまま使うと危険です。

AIは「真実かどうかを保証する装置」ではありません。

だから、次の前提で使います。

  • 公式ドキュメントを正とする
  • 最新仕様は必ず確認する
  • AIの回答は下書きとして扱う
  • コマンドやコードは自分の環境で検証する
  • 設計書や顧客提出物へ入れる前に人間がレビューする

「AIが言ったので」は、現場では理由になりません。

公式情報を貼ると精度が上がる

最新仕様や社内ルールを確認したいときは、AIの記憶だけに頼らない方が安全です。

公式ドキュメントや、確認済みの社内ルールをプロンプトに貼り、その範囲から回答させます。

<!-- 参照範囲を明示して、根拠のない補完を減らす -->
## 参照情報

以下のドキュメント抜粋だけを根拠に回答してください。
不明な場合は「この抜粋だけでは判断できない」と書いてください。

```text
# ここに公式ドキュメントや社内ルールの抜粋を貼る
[抜粋本文]
```

<!-- 回答してほしい問いを最後に置く -->
## 質問

この条件で、設定変更時に注意すべき点を整理してください。

これは手元でできる簡易RAGのような使い方です。

ただし、貼る情報に機密が含まれていないかは必ず確認します。

セキュリティで一番危ないのは「少しだけなら大丈夫」

AIに投げてはいけないものは、APIキーやパスワードだけではありません。

以下も危険です。

  • 顧客名
  • 個人名
  • 本番IPアドレス
  • 内部サーバー名
  • リポジトリURL
  • 社内パス
  • プロジェクト固有の関数名
  • 顧客独自の業務データ
  • 契約条件
  • 障害時の生ログ

顧客名だけ伏せても、IP、パス、関数名、ログの組み合わせで特定できることがあります。

AIへ貼る前に、一般化・マスキングします。

# beforeは機密が混ざっている例
before:
  /var/www/customer-a/payment-batch/prod/...
  10.12.34.56
  customerAChargeSettlement()

# afterは意味を残して一般化した例
after:
  /path/to/app/batch/prod/...
  192.0.2.10
  runSettlementJob()

マスキングしても意味が通じる形にするのがコツです。

プロンプト自体をAIに作らせる

慣れないうちは、最初からきれいなプロンプトを書こうとしなくて大丈夫です。

ぐちゃぐちゃなメモを渡して、プロンプトの形に直してもらいます。

<!-- AIに答えではなく、依頼文の形を整えてもらう -->
## 依頼

今からAWSの障害調査について相談したいです。
以下のメモをもとに、AIが精度高く回答できるMarkdownプロンプトへ整形してください。

<!-- 機密確認も同時に依頼する -->
## 条件

- 機密情報が入りそうな箇所は、伏せ字にする候補として指摘してください。
- 足りない情報があれば質問リストにしてください。
- 最終出力は「役割」「目的」「前提」「制約」「出力形式」の5項目にしてください。

<!-- ここは箇条書きで十分 -->
## メモ

ここに雑なメモを貼る

これはメタプロンプトです。

AIを「答えを出す相手」としてだけでなく、「聞き方を整える相手」として使います。

現場で使う前のチェックリスト

AIに投げる前に、次を確認します。

  • 顧客名、個人名、IP、パス、Secretが入っていないか
  • 無料版、個人版、会社契約版、API利用のどれを使っているか
  • 入力データが学習に使われるかを確認したか
  • 現場のルールでAI利用が許可されているか
  • 出力を公式ドキュメントや実機で確認する前提になっているか
  • 不明点はAIに質問させる指示が入っているか

特に技術相談では、次の3つを入れるだけでも事故が減ります。

# 技術相談で最低限入れたい3点
1. 直前に変更したこと
2. 実際に出ているエラー文
3. まだ確認していないこと

まとめ

AIへの依頼は、長い一文よりMarkdownで構造化した方が安全です。

  • プロンプトは質問ではなく設計書に近い
  • 役割、目的、前提、制約、出力形式を分ける
  • 「不明なら質問して」と明示する
  • ハルシネーションを前提に公式情報で確認する
  • 顧客情報や秘密情報は投げない
  • プロンプト自体もAIと一緒に作れる

参考・確認先

おわりに

生成AIは、便利な道具です。

ただし、現場で信頼されるのは、AIを使う人ではなく、AIの出力を安全に扱える人です。

Wealthy Designでは、Webシステム開発、クラウド活用、AIを使った業務改善に取り組んでいます。

会社の取り組みは、会社サイトにまとめています。
https://wealthy-design.com/

この記事はYouTube台本をQiita向けに再構成したものです。各AIサービスの規約、データ利用、オプトアウト設定は変わるため、使う直前に公式情報を確認してください。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?