AIに渡す商品企画を「悩み1件」へ絞る。2件で止めた小さな検査

「平日の献立が決まらない」と「買い物リストを作れない」を、同じテンプレートで解決する企画を考えます。近い悩みに見えますが、AIへ渡す依頼としては2件です。出力の優先順位が決まらず、どちらにも浅い説明になりそうでした。
個人でデジタル商品を作るとき、AIは企画文、見出し、利用手順の下書きを速く出せます。でも、最初の依頼が広いままでは、生成を何度やり直しても商品がぼやけます。そこで、モデルへ渡す前の企画をJSONに分け、扱う悩みが1件でなければ止める見本を作りました。
10月21日の記事では、プロンプト集の本文、入力例、変更履歴の版をそろえる確認をしました。今回はその前段です。版を管理する前に、AIへ何を作らせるかを小さく決めます。
先に「誰の何を変えるか」を決めます
ここで扱うのは、実在の商品や販売実績ではありません。週末の献立テンプレートを想定した合成見本です。AIへリクエストは送っていません。
企画に必要な要素を4つだけ置きます。
product: 渡す商品の名前です。target_user: 使う人です。problems: 解決したい悩みの一覧です。outcome: 使った後にできる状態です。
problemsを複数にすると、商品が必ず悪くなるわけではありません。ただ、最初の1商品で何を確かめるかは曖昧になります。献立案を作る機能と、買い物を最適化する機能では、必要な入力も評価方法も違います。
私は、AIに「献立テンプレートを作って」とだけ渡す案をやめました。購入者、悩み、終わった状態を先に短く決めたほうが、出力に足りない前提を見つけやすいためです。
[商品企画 JSON]
|
v
[悩みが1件かを確認] -- 2件以上 --> [HOLD: 人が企画を絞る]
|
v
[AIへの依頼文と商品下書き]
2つの悩みを入れたら、下書きの前で止まりました
Python 3.13.5で、空の一時ディレクトリにcheck_brief.pyとbrief.jsonを置きました。検査は企画を自動で書き換えません。足りない項目か、複数の悩みを表示して終了コード2で止まるだけです。
import json
from pathlib import Path
brief = json.loads(Path("brief.json").read_text(encoding="utf-8"))
required = ("product", "target_user", "problems", "outcome")
missing = [key for key in required if not brief.get(key)]
if missing:
print("HOLD missing=" + ",".join(missing))
raise SystemExit(2)
problems = brief["problems"]
if not isinstance(problems, list):
print("HOLD problems_type=list_required")
raise SystemExit(2)
print("product=" + brief["product"])
print("target_user=" + brief["target_user"])
print("problems=" + str(len(problems)))
if len(problems) != 1:
print("HOLD one_problem_required")
raise SystemExit(2)
print("OK outcome=" + brief["outcome"])
最初のbrief.jsonには、関連する2件を入れました。
{
"product": "週末の献立テンプレート",
"target_user": "平日に夕食を決める時間がない人",
"problems": [
"平日の献立を決められない",
"買い物リストを作れない"
],
"outcome": "週末に5日分の献立候補を決められる"
}
mkdir -p "$TMPDIR/hibanas-brief-single-problem"
cd "$TMPDIR/hibanas-brief-single-problem"
python3 --version
python3 check_brief.py
Python 3.13.5
product=週末の献立テンプレート
target_user=平日に夕食を決める時間がない人
problems=2
HOLD one_problem_required
この実行は終了コード2でした。ここでAIに出力させず、どちらの悩みを最初に扱うかへ戻ります。検査が「買い物リストを削る」と決めるべきではありません。商品の範囲、価格、次に作る商品は、作り手が決めることです。
機械の役目はここまでです。
この検査が出す表示
| 状態 | 表示 | 人が決めること |
|---|---|---|
| 悩みが2件 | HOLD one_problem_required | 最初の商品で扱う悩みを1件に選びます |
| 必須項目が空 | HOLD missing=... | 商品名、対象者、悩み、到達点を埋めます |
problemsが配列でない | HOLD problems_type=list_required | 複数候補を区別できる形へ直します |
1件へ直して、次の依頼へ渡せる形にしました
今回は「買い物リストを作れない」を別の企画へ残し、最初の悩みを「平日の献立を決められない」にします。同じ検査をもう一度実行しました。
python3 - <<'PY'
import json
from pathlib import Path
p = Path("brief.json")
brief = json.loads(p.read_text(encoding="utf-8"))
brief["problems"] = ["平日の献立を決められない"]
p.write_text(json.dumps(brief, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
PY
python3 check_brief.py
printf 'exit=%s\n' "$?"
product=週末の献立テンプレート
target_user=平日に夕食を決める時間がない人
problems=1
OK outcome=週末に5日分の献立候補を決められる
exit=0
OKは、商品が売れることや、AIの出力が正しいことを示しません。今回決めた4項目があり、悩みが1件であることだけを示します。それでも、商品説明、プロンプト、テンプレートのどれを書くとしても、最初の依頼が同じ企画を指す状態になります。
AIの出力形式や制約を明示すると、意図した形の出力を得やすくなります。企画の悩みを1件にするのは、その前に依頼の目的を狭くする作業です。モデルへ渡す文を長くする前に、何を解く商品かを1行で言えるかを見ます。
1商品目で守る境界
この検査は、対象者の困り方が本当に存在すること、価格が妥当なこと、テンプレートが役に立つことまでは判定しません。購入者インタビュー、公開後の問い合わせ、返金条件は別に確認が必要です。
また、1件に絞ることが、商品を小さくし続けるルールではありません。最初のテンプレートで使い方が伝わったあとに、買い物リストを別商品や次の版として足す判断もできます。ここで止めたいのは、初稿の時点で2つの価値を混ぜ、どちらを確認したいのか分からなくなる状態です。
AIで個人向けの商品を作るとき、生成結果の出来だけを比べがちです。その前に、企画を1件の悩みまで書ける形にします。人が決める範囲を残し、AIには決まった範囲の下書きを頼みます。この順番なら、やり直す場所も短くなります。
用語
| 用語 | この見本での意味 |
|---|---|
| 商品企画 | 商品名、対象者、悩み、到達点をまとめた小さなJSONです |
| 悩み | 商品が最初に扱う、購入者側の具体的な困りごとです |
| 到達点 | 商品を使った後に、対象者ができる状態です |
| HOLD | 自動で先へ進めず、人が企画を見直す表示です |
出典
- OpenAI API: Prompt engineering(GPTモデルでは、具体的な出力を得るために明示的な指示が有効だという説明)
- Anthropic: Prompting best practices(出力形式と制約を具体的に指定する考え方)
- Python Documentation: json(JSONの読み書き)


