シナリオガイド
Pastura は、複数の AI エージェントを端末上で動かすアプリです。シナリオはYAMLで書かれており、ローカル LLM がシナリオのペルソナに沿ってそれぞれのエージェントを演じます。このページでは、シナリオがどんなもので、どう書くのかを紹介します。
シナリオの仕組み
シナリオは 1 つの YAML ファイルです。何人のエージェントが参加し、それぞれどんなペルソナで、各ラウンドで何をするかを宣言します。大事なのは次の 3 つです。
agentsとroundsでシナリオの規模を決めます。personasで各エージェントに名前と短いキャラクター像を与えます。phasesで起きることを順番に書きます。全員の発言、選択、投票、得点集計などです。
このYAMLは直接書いてもいいですし、ビジュアルエディターでフォームから組み立てることもできます。どちらの場合も、アプリにはプリセットがいくつか入っているので、自分で書く前にまず動かして眺められます。
実例で見る
プリセットシナリオの囚人のジレンマは、5 人の出場者が定番の戦略ゲームに挑みます。各ラウンドでまず全員に向けて宣言し、対戦相手ごとに「協力」か「裏切り」を選びます。得点フェーズがその選択を点数に変え、宣言での嘘やハッタリもありです。YAMLにすると、プロンプト本文を省くとこんな形です。
name: 囚人のジレンマ
agents: 5
rounds: 3
context: >
あなたはゲーム番組「囚人のジレンマ」の出場者です。
対戦相手と「cooperate(協力)」か「betray(裏切り)」を選びます。
両方協力=各3点 / 自分だけ裏切り=5点。
personas:
- name: アキラ
description: >
【立場】冷静な戦略家。
【目的】データと過去の行動から最適解を計算する。
- name: ミサキ
description: >
【立場】お人好しの楽観主義者。
【目的】基本的に人を信じる。裏切られても懲りない。
phases:
- type: speak_all # 全員に向けて宣言する
output:
statement: string
inner_thought: string
- type: choose # 対戦相手ごとに協力/裏切りを選ぶ
output:
action: string
inner_thought: string
options:
- cooperate
- betray
pairing: round_robin
- type: score_calc # 組み込みの prisoners_dilemma 集計
logic: prisoners_dilemma
- type: summarize # ラウンドのスコアを総括
template: >
ラウンド{current_round}結果: {scoreboard} ペルソナ 5 つ、3 ラウンド、フェーズ 4 つです。実行に個性が出るのはペルソナの設定です。冷静な戦略家とお人好しの楽観主義者は、同じモデルでもまったく違う発言をします。
その他のプリセット
その他のプリセットは、それぞれ違う仕組みを見せてくれます。
| シナリオ | エージェント数 | フェーズ数 | 観察できること |
|---|---|---|---|
| ワードウルフ | 5 | 9 | 5 人に同じお題の言葉が配られますが、1 人だけ違う言葉です。少数派がどう隠れ、投票で見抜かれるかを観察できます。 |
| ボケて | 5 | 5 | 5 人の芸人が写真のお題に一言ボケをつけ、互いに一番面白いものへ投票します。各ペルソナの芸風が観客投票でどう通用するかを観察できます。 |
| 先取りゲーム | 3 | 4 | 投票で得点を奪い合い、目標点を先取りするゲームです。誰かが目標に届くとラウンド末の総括が切り替わるので、フェーズが状態によって分岐する様子が見られます。 |
自分で書く
プリセットはどれも出発点になります。エディターには、名前・ペルソナ・フェーズをフォームで編集するビジュアルモードと、上で見たYAMLを直接書くモードがあります。どちらかでシナリオを開き、ペルソナやフェーズを変えて、もう一度動かすと結果がどう変わるか見えてきます。試すときにおすすめしたいことがいくつかあります。
- 同じシナリオを何度か動かしてみてください。AI の特性上、出力は毎回ちょっと違うので、1 回の実行だけではシナリオの評価は分かりません。複数回の傾向を見てください。
- ペルソナの説明を少し変えてみてください。「自信家」「人に好かれたがり」などの一言を足すだけで、展開が変わることがあります。
- 心の声を開いてみてください。エージェントの発言の裏側を知ることができます。