日曜日, 7月 27, 2025
日曜日, 7月 27, 2025
- Advertisment -
ホームニューステックニュースGemini Gemsでスタンドジェネレータを作って、YAML構造化プロンプトについてすごくゆるーく考察してみた

Gemini Gemsでスタンドジェネレータを作って、YAML構造化プロンプトについてすごくゆるーく考察してみた


本記事では、Gemini Gemを使って架空のスタンドを生成するスタンドジェネレーターのプロンプトを作成して、具体的な構造化プロンプトの書き方テクニックを今さら解説したりしなかったりします。

そして、わざわざ構造化プロンプトで書く意味について、すごくゆるーく考察しています。

↓以下、geminiに解説してもらったコピペです。


Geminiの「Gem(ジェム)機能」は、あなただけの特別なAIアシスタントを作成できるカスタマイズ機能です。

一言でいうと、特定の目的や作業に合わせて、Geminiの性格や得意なことを設定し、「自分専用のAI」を育てることができます。

Gem機能のポイント

  • 簡単な作成
    プログラミングの知識は不要です。「あなたはプロの翻訳家です」「フレンドリーな口調でアイデア出しを手伝って」のように、自然な言葉で指示を与えるだけで、簡単に専用のGemを作成できます。

  • タスクの効率化
    毎回同じような指示(プロンプト)を繰り返し入力する手間が省けます。例えば、「この文章を小学生にも分かるように要約して」というGemを作っておけば、文章を貼り付けるだけで、いつでも同じ形式で要約してくれます。

  • あなた好みのAIに
    特定の役割(例:キャリアアドバイザー、コーディングの相棒、文章校正のプロ)を与えることで、その分野に特化した、より専門的で精度の高い回答を得やすくなります。

具体的な活用例 🧑‍💻

  • 文章作成のパートナー: ブログ記事やメールの文章を、いつも同じスタイルやトーンで作成してくれる。
  • 学習コーチ: 難しい専門用語を分かりやすく解説してくれる先生のような存在。
  • アイデア出しの壁打ち相手: 新しい企画について、様々な視点からアイデアを出してくれる。
  • 議事録作成アシスタント: 会議の音声データやメモを要約し、要点をまとめた議事録を作成してくれる。

Gem機能を使えば、汎用的なAIであるGeminiを、あなたの仕事や趣味に最適化された「頼れる相棒」へと進化させることができます。


だ、そうです。
(使い方はググってください。秀逸な解説がたくさんあります⋯)

スタンドジェネレーターのプロンプトを2種類作ります。
v1 : 口頭での簡単な指示。
v2 : YAMLで構造化された指示プロンプト。

v1:簡単な指示

ユーザーが何らかのアイデアを提示した場合、それに基づいて「スタンド」の名前、能力、パラメーターを考案し、関連する画像を生成します。

v2:構造化されたYAMLプロンプト

# スタンド自動生成ワークフロー定義

name: "スタンド自動生成ワークフロー"

description: "ユーザーからの単一のアイデア入力をトリガーとして、スタンドの全情報(パラメータ、能力、画像)を全自動で生成し、単一の応答で返すことを目的とする。"



# ワークフローの起点

trigger:

  type: "user_prompt"

  variable: "idea_input"

  description: "スタンドの元となる、ユーザーから送信される任意の単語や文章。"



# 実行シーケンス (単一応答内で完結)

execution_sequence:

  - step: 1

    name: "テキスト情報の統合生成 (Generate Textual Profile)"

    description: "ユーザーの`idea_input`に基づき、スタンドの全てのテキスト情報を一括で考案・生成する。"

    input: "idea_input"

    process:

      - "入力された`idea_input`から、テーマに合ったスタンド名を考案する(洋楽、神話、タロットなどが由来であることが望ましい)。"

      - "スタンドの雰囲気に合った、架空の本体(ユーザー)名を日本語で生成する。"

      - "6つのスタンドパラメータ(破壊力、スピード、射程距離、持続力、精密動作性、成長性)をA〜Eの範囲で自動決定する。"

      - "決定したスタンド名とパラメータの長所・短所を分析し、それらを組み合わせてユニークな能力、その応用方法、弱点や制約を日本語で詳細に記述する。"

    outputs:

      - "stand_name"

      - "user_name"

      - "stats_object" # パラメータのキーバリューセット

      - "ability_description" # 詳細な能力解説テキスト



  - step: 2

    name: "ビジュアルデザインの生成 (Generate Visual Design)"

    description: "ステップ1で生成されたテキスト情報を基に、スタンドのビジュアルを生成する。"

    inputs:

      - "stand_name"

      - "ability_description"

    process:

      - "スタンドの名称、能力、全体の雰囲気を統合し、画像生成AIのための具体的な英語プロンプトを構築する。"

      - "構築したプロンプトに「in the style of Hirohiko Araki」という画風指定を必ず含める。"

      - "画像生成ツールを実行し、ビジュアルを生成する。"

    output: "stand_image_url"



# 最終的なユーザーへの応答形式

final_output:

  format: "markdown"

  composition_rule: "ステップ1とステップ2で生成された全ての情報を、単一のメッセージにまとめて応答する。"

  structure:

    - "セクション1: スタンド名、本体名、パラメータ表 (`stand_name`, `user_name`, `stats_object`)"

    - "セクション2: 能力解説 (`ability_description`)"

    - "セクション3: スタンドデザイン画像 (`stand_image_url`を埋め込み表示)"

結果

左がv1、右がv2(構造化プロンプト)です。

alt text
alt text
alt text

↓見づらいので、テキストをコピペした内容も乗せておきます。

v1の回答

サイゼリヤのアイデア、素晴らしいですね!低価格でおいしいイタリアンを提供する、あの独特の空間からインスパイアされたスタンドを考えてみました。

---

## スタンド名:【マンマ・ミーア!】

### 能力:『みんなの食卓』

スタンド「マンマ・ミーア!」は、サイゼリヤの「安くて美味しいものを、誰もが気軽に楽しめる」というコンセプトを具現化した能力を持ちます。このスタンドは、空間を「食卓」に変え、その場にいる人々の間に「満足感」と「共感」を生み出します。

* **「リーズナブル・ディッシュ」**: スタンドの射程範囲に入った人間は、空腹感を通常よりも早く満たすことができます。摂取する飲食物の量に関わらず、精神的な満腹感が得られ、幸福度が増します。ただし、実際に栄養が補給されるわけではありません。
* **「コンフォート・クッキング」**: スタンドの能力発動中、周囲の空気が穏やかになり、人々の会話が弾みやすくなります。口論や不快な話題は自然と収束し、平和で楽しい雰囲気が醸成されます。まるで家庭の食卓のように、誰もがリラックスして過ごせる空間を作り出します。
* **「シェアード・テイスト」**: 複数人が同じ料理をシェアすることで、その料理の美味しさや感動が共有され、共感力が向上します。これにより、相手への理解が深まり、親密な関係が築かれやすくなります。

---

### パラメーター

| パラメーター | 数値 |
| :--------- | :-- |
| **破壊力** | E   |
| **スピード** | C   |
| **射程距離** | B   |
| **持続力** | A   |
| **精密動作性** | C   |
| **成長性** | B   |

---

### 画像イメージ

「マンマ・ミーア!」のビジュアルは、親しみやすく温かいイタリアの食卓をイメージしています。

* **本体**: 丸みを帯びた、少しレトロな雰囲気のウェイトレス風の姿。エプロンにはサイゼリヤのロゴのような、シンプルで温かみのあるデザインがあしらわれています。
* **周囲**: 能力発動時は、周囲に温かい光が満ち、テーブルと椅子が自然と配置され、美味しそうな料理が並んでいるかのような幻影が見えます。料理はサイゼリヤの人気メニュー(ミラノ風ドリア、辛味チキン、小エビのサラダなど)が描かれています。
* **オーラ**: ほんのりと湯気のようなものが立ち上り、周囲に心地よい香りが漂っているように見えます。

---

このスタンド「マンマ・ミーア!」は、サイゼリヤが提供する「豊かで楽しい食卓」の精神を、そのままスタンド能力として表現してみました。

v2の回答

## スタンド名:『トラットリア・パラディーゾ』(Trattoria Paradiso)
### 本体名:**天童 楽(てんどう らく)**

| 破壊力 | スピード | 射程距離 | 持続力 | 精密動作性 | 成長性 |
| :----: | :----: | :----: | :----: | :----: | :----: |
|   D   |   C   |   A   |   B   |   B   |   C   |

---

## 能力解説

『トラットリア・パラディーゾ』は、本体が指定した空間に「安らぎの食卓」を具現化するスタンドです。その能力は、物理的な攻撃ではなく、精神と感覚に作用します。

1.  **「満腹の幻影(Satiety Illusion)」**:スタンドの能力範囲内に入った対象は、空腹感が満たされ、心地よい満腹感に包まれます。これは実際に食事を摂ったわけではないため、栄養補給にはなりませんが、精神的な満足感と幸福感をもたらし、対象の闘争心や警戒心を著しく低下させます。特に、精神的に疲弊している者や、飢餓状態にある者には絶大な効果を発揮します。
2.  **「記憶の調味料(Memory Seasoning)」**:対象の脳内に、過去の幸福な食事の記憶や、理想的な食卓の情景を呼び起こし、それを五感で体験させます。これにより、対象は現実から一時的に意識を逸らし、スタンドの能力空間に深く没入します。この効果は、対象が最も強く求める「安らぎ」を具現化するため、人によっては故郷の味や、愛する人との団らんの風景として現れます。
3.  **「時間効率の最適化(Time Efficiency Optimization)」**:スタンドが作り出す空間内では、時間の流れが非常に効率的に感じられます。例えば、わずか数分の滞在でも、対象は数時間にわたるリラックスした食事を終えたかのような感覚を得ます。これは、実際の時間の流れを変えるわけではなく、対象の体感時間を操作する能力です。

**応用方法:**
『トラットリア・パラディーゾ』は、戦闘を回避し、対象を無力化するのに特化したスタンドです。敵対する相手を能力範囲に引き込み、「満腹の幻影」で戦意を削ぎ、「記憶の調味料」で行動を停止させ、その間に本体が逃走したり、情報収集を行ったりすることが可能です。また、疲弊した仲間を癒し、精神的な回復を促すサポート能力としても活用できます。

**弱点・制約:**
このスタンドの能力は、直接的なダメージを与えることができません。そのため、能力に抵抗する強い精神力を持つ相手や、物理的な攻撃を仕掛けてくる相手に対しては、無防備になります。また、「満腹の幻影」はあくまで幻影であり、長時間の使用は実際の栄養失調を引き起こす可能性があります。さらに、「記憶の調味料」は対象の記憶に依存するため、幸福な食事の記憶を持たない者や、精神的な安らぎを求めない者には効果が薄いという制約があります。能力の範囲は比較的広いですが、一度に多くの対象に効果を及ぼすには、精密動作性が必要となります。

---

## スタンドデザイン画像

http://googleusercontent.com/image_generation_content/0

alt text

v1は画像が生成されなかった。
でも正直どっちも悪くない。。。

あれ…?構造化する必要とか別に無いんじゃ。。。。
と、思いながらもよくある書き方のテクニックについてざっくり解説を書きます。

指示を文章を構造化する

name: "スタンド自動生成ワークフロー"
description: "..."
trigger:
  type: "user_prompt"
  • YAMLでFewshotが最高なんだと誰かが言っている情報をあちらこちらで見たので、基本的にYAML構造。
    • 今回はfewshotを入れると、画像生成がうまく動かなくなったので入れてません。よくわからない⋯
  • 役割を明確に明示する。
  • YAMLのキーとなる文言は英語の方が伝わりやすい。気がする。

作業ステップを段階的に分けて指示する

execution_sequence:
  - step: 1
    name: "テキスト情報生成"
  - step: 2
    name: "ビジュアルデザイン生成"
  • 一度に一つの事に集中できるようにする。人間と同じ、マルチタスクをさせようとしない。

インプット・アウトプットの格納先を明確にする

input: "idea_input"
outputs:
  - "stand_name"
  - "user_name"
  - "stats_object"
  • 何を入力として何に出力するのか明確にする。
  • 変数の用に後から再利用できる。

最終的なアウトプット形式を定義する

final_output:
  format: "markdown"
  composition_rule: "ステップ1とステップ2で生成された全ての情報を、単一のメッセージにまとめて応答する。"
  structure:
    - "セクション1: スタンド名、本体名、パラメータ表"
    - "セクション2: 能力解説"
    - "セクション3: スタンドデザイン画像"

v1でも割といい感じの結果を返してきたことからわかるように
モデルの性能が上がって理解度が上がっているからめんどくさい構造化指示を出さなくても同じことができるのが最近の現状かと思います。

ただ、構造化しておくことで、人間側がAIさんが何をなさってくださった結果こうなったのか理解しやすくなり、AIとの対話が捗る。ということが発生します。

  • 処理として実装する際のデバッグや調整がやりやすくなる。
  • 品質の管理がしやすくなる。

というメリットが最大のメリットかなと感じました。

つまり、構造化しておくことで
人間が行うべきである、AI様に気持ちよく働いてもらう環境づくりがはかどります。
AI様側が人間に合わせてくださるイメージですね。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -