こんにちは!横浜で清掃業を営みながら、AIの海に飛び込んでいるYasuです。
これまでいくつかのDifyアプリを作ってきましたが、最近ふと思ったんです。「AIに指示して、AIに答えをもらうだけ」の繰り返し。これ、ちょっと使い回し感が出てきてないか……?
そこで今回は、一歩レベルを上げて**「自律型の鬼編集長」**を自作することにしました。AIに何かを作らせるのではなく、AIに自分を厳しく「検品」させる仕組みです。
🏗️ 「鬼のAI編集長」の設計図
今回のアプリは、単なるプロンプトではありません。複数の機能を組み合わせた「仕組み」です。
- 開始ノード:ブログの原稿を受け取る。
- LLMノード:内容の濃さを「鬼編集長」が採点。
- 「コード実行」ブロック:文字数を物理的にカウント。
- IF/ELSEノード:内容と文字数の両方が合格か判定。
- テンプレート&出力:不合格なら「具体的な修正案」を提示。
🛠️ 【1から解説】鬼編集長の作り方
1. LLMノード:編集長の「人格」を叩き込む
まず、AIに「何を基準に叱るべきか」を教えます。ここが今回の心臓部です。ただのAIではなく、私の背景を完全に理解した「専属の編集長」になるよう、以下のプロンプトを設定しました。
同じように自分専用の編集長を作りたい方は、このテキストをコピーして、ご自身の背景(バックグラウンド)を書き換えて使ってみてください!
【システムプロンプト】
Plaintext
役割
あなたはブログ『中年からのAI再スタート。収益化を目指すブログ』の専属・鬼編集長です。 著者の「Yasu(49歳・清掃業・IT未経験)」が執筆した記事を、読者の信頼を勝ち取り収益化できるレベルか厳格に査定します。
著者の背景(コンテキスト)
バックグラウンド: 横浜で清掃業を営む個人事業主。
現在の挑戦: IT未経験からDifyやGASを学び、AIアプリ自作の過程を発信中。
趣味・強み: サウナ、キャンプ、おつまみ作り。
厳格な採点基準(各10点 / 計30点)
独自性(体験の深さ):
清掃現場での苦労、Difyでのデバッグの試行錯誤、横浜での生活感、サウナでの気付きなど、著者ならではの「一次情報」が3箇所以上含まれているか。
一般論(AIで便利になる等)に終始している場合は大幅減点。
論理構成と読後感:
導入で読者の悩みに共感し、結論で「自分もやってみよう」と思わせる熱量があるか。
専門用語を並べるだけでなく、49歳・未経験者の視点で噛み砕かれているか。
SEOと実益:
ターゲットキーワード(Dify, AI自動化, 清掃効率化等)に対し、具体的で再現性のある解決策を提示しているか。
出力ルール
厳格査定: 合計点数が25点未満、または1項目でも4点以下の場合は、容赦なく pass: false とすること。
修正指示の具体性: 不合格の場合、「どこを」「どう」直すべきか、ライターAIがそのままプロンプトとして使えるレベルで3つ提示せよ。
出力フォーマット(JSON厳守)
{
"score_details": {
"originality": 数値,
"structure": 数値,
"seo": 数値
},
"total_score": 数値,
"pass": boolean,
"feedback": "修正指示:1.〇〇を具体化... 2.〇〇を追加... 3.語尾の修正...",
"editor_comment": "鬼編集長からの激励の一言"
}
⚠️重要!変数の埋め込み プロンプトの下にある「USER」メッセージ欄に {x} article_text を青いタグとして必ず配置してください。これを忘れると、編集長は原稿を読んでくれません。

2. 「コード実行」ブロック:AIの「どんぶり勘定」を許さない
AIは意外と文字数カウントが苦手です。そこで、Difyの**「コード実行」ブロック**の出番です。「1,500文字未満は、内容が良くても問答無用で不合格!」という鉄の掟を記述します。
こちらもそのままコピペして使えます!
【入力変数の設定】
text: ユーザー入力のarticle_textllm_output: LLMのtext
【Python3コード】
Python
import json
def main(text: str, llm_output: str):
# 文字数をカウント
char_count = len(text)
try:
# 編集長(LLM)のJSON結果を読み解く
result_dict = json.loads(llm_output)
llm_pass = result_dict.get("pass", False)
feedback = result_dict.get("feedback", "フィードバックなし")
editor_comment = result_dict.get("editor_comment", "")
except Exception as e:
# 万が一JSONが壊れていた場合は不合格にする
llm_pass = False
feedback = "システムエラー:編集長の採点結果が読み取れませんでした。"
editor_comment = ""
# 最終判定:文字数が1500文字以上 & 編集長が合格を出しているか
final_pass = bool(llm_pass and char_count >= 1500)
return {
"final_pass": final_pass,
"char_count": char_count,
"feedback": feedback,
"editor_comment": editor_comment
}
【出力変数の設定】
final_pass(Boolean / 真偽値)char_count(Number / 数値)feedback(String / 文字列)editor_comment(String / 文字列) (※この出力変数の設定を忘れるとエラーになるので注意!)

3. 条件分岐:運命の分かれ道
「IF/ELSE」ノードを追加し、「内容25点以上」かつ「1,500文字以上」という条件(final_pass が true)をクリアしたときだけ、合格ルートへ進むように設定します。

😅 目の前に立ちはだかる「Difyの罠」と、私の完全なる勘違い
開発中、最大のピンチが訪れました。テスト実行をしても、画面には空っぽのカッコ {} が出るだけ。 「変数の紐付けミスか?」「設定が悪いのか?」と半日近く頭を抱えました。
しかし、真実は全く別のところにありました。
実は、AI(GPT-4o)は完璧に仕事をこなしていたんです。 Difyのワークフロー画面でその結果を見るには、画面右側の「詳細情報」の隣にある**「実行追跡(トレース)」タブ**をクリックし、裏側のログを覗きに行く必要があったのです。
裏側に隠れていた「鬼編集長」のガチ採点結果を見つけた時は、砂漠で水を見つけたような気分でした。

🔥 2,542文字で「不合格」を食らう喜び
いよいよ本番テスト。渾身の記事(2,542文字)を投入しました。 文字数は合格。しかし、返ってきた結果は……
❌【不合格】鬼編集長からの差し戻しです。
【編集長コメント】 「良いスタートだが、もう一歩深く掘り下げよう。清掃業の経験をもっと引き出せば、読者の心に響く記事になるぞ!」
IT未経験から始めた私が、自分で作ったAIに本気で叱られている。 その事実に、これまでにないワクワクを感じました。ただの便利ツールじゃなく、自分を成長させてくれるパートナーが、私のパソコンの中に誕生したのです。

🏁 まとめ:AIと二人三脚の「再スタート」は続く
今回のデバッグを通じて、単なる設定ミスを疑うのではなく「実行ログ(裏側)を確認する」という、少しエンジニアらしい視点を得られたのが最大の収穫でした。
このアプリをツールかして
次なる野望は、この「鬼編集長」を「AIライター」と接続し、合格が出るまでAI同士が議論し続ける「完全自動記事作成チーム」を作ることです。
49歳、IT未経験。 AIにボコボコにされながら、私の再スタートはさらに加速していきます!


コメント