LLM診断精度を上げるためにプロンプトを「コード化」した話

はじめに

LLMを使った「診断系プロダクト」を作っていると、こんな問題に必ず当たります。

  • 出力がそれっぽいけど浅い
  • 毎回言うことが微妙に違う
  • ユーザーの行動につながらない

本記事では、AIユーザー診断SaaSを個人開発する中で、診断精度を上げるために行った「プロンプト設計の実装パターン」を紹介します。

ポイントはプロンプトを文章ではなく「コードとして扱う」ことです。


初期実装の問題点

最初のプロンプト(失敗例)

plain text
このLPの内容を分析し、想定ユーザーと改善点を教えてください。

起きたこと

  • 毎回違う観点で評価される
  • 抽象的なアドバイスが多い
  • 「で、何すればいいの?」状態

👉 AIが何を基準に診断すればいいのか分からない


改善方針

診断精度を上げるために、次の3点を固定しました。

  1. 評価軸を明示する
  2. 出力フォーマットを固定する
  3. AIの役割(ロール)を定義する

① 評価軸を固定する

曖昧な「診断」ではなく、以下の軸で必ず評価させます。

typescript
const evaluationAxes = [
  "想定ユーザータイプ",
  "ユーザーの主な課題",
  "訴求のズレ",
  "改善すべきポイント"
];

これにより

  • 毎回同じ観点で診断される
  • 結果の比較ができる

② 出力フォーマットを固定する

JSONスキーマを強制

typescript
const outputFormat = `
以下のJSON形式で必ず出力してください。

{
  "userType": "",
  "reason": "",
  "problems": [],
  "improvements": []
}
`;

効果

  • フロントでそのまま扱える
  • 「文章が長すぎる」問題が消える
  • 出力のブレが激減

③ ロール(人格)を明示する

plain text
あなたはSaaSレビュー経験が豊富なプロダクトコンサルタントです。
感情ではなく、構造と根拠を重視して診断してください。

これだけで👇

  • お気持ち表明が減る
  • 指摘が具体的になる

実際のプロンプト構成(完成形)

typescript
const prompt = `
あなたはSaaSプロダクト診断の専門家です。

【評価軸】
- 想定ユーザータイプ
- ユーザーの課題
- 訴求のズレ
- 改善提案

【入力テキスト】
${inputText}

【出力形式】
${outputFormat}
`;

👉 プロンプト = ロジック + 定数


改善結果

  • 診断の一貫性が向上
  • 改善提案が具体化
  • ユーザーの納得感が上がった

特に**「なぜその診断になったか」を説明できるようになった**のが大きいです。


まとめ

  • プロンプトは文章ではなく「設計」
  • 評価軸・出力形式・ロールを固定する
  • LLMの精度はモデルより設計で決まる

LLM診断系を作っている人の参考になれば幸いです。