LLMでLLM用のデータセットを作る奴。
ローカルファイルから情報抽出、問題と返答を自動生成できる。
元データが少なくてもGenre-Audienceを生成して増やすことが可能。
single-turn、multi-turn、imageQAのデータセットが作成可能。
デフォルトだと生成結果は英語で出されるので、プロンプトの設定が必要。
LLM
こういう系なら当然だが、たぶん生成物が正しくjsonになってないとfailedになる。
なので必要なのはIF。データセットで学習するモデルは好きにすればいいが、データセット生成にはそれなりのLLMが必要。少なくとも3BJambaは無理だった。
また、コンテキストも必要。テストで5000トークン程度要求される。なので4096は候補から外れる。
Reasoningは邪魔そうだけど、どうだろう。質問からの回答生成にはCOT欄があるので、Reasoningもたぶん対応してる。ただし質問自体の生成は難しい、ような。
multi-turn
若干設定が分かりにくい。
System Prompt
会話の最初に入るプロンプト。
Conversation Scenario
会話の状況のコンテキストを入れる。
Number of Rounds
会話回数。
Role A
参加者A。質問者。
Questionはこの人物からの疑問として全文入力される。
つまりSystem Prompt -> Question(Role Aの発言) -> Role Bの順。
Role B
参加者B。回答者。
こいつは普通持ってないだろみたいな知識も質問次第でボンボン出る。
それぞれにLoRAを適用みたいなことはまだできない。(2025/11/20)
事件を元に、キャラクター返答選択肢を作成し、選択を行うには
マークダウン取り込み→LLMが質問文作成→LLMが選択肢作成→人間が選択肢を選定→選定結果を保存(選ばれないものはネガティブとして保存) というフロー。easy-datasetだとLLMの複数選択肢作成が出来ない。
labelboxはUnitを気にする必要があるので。Argillaはpythonでデータを管理する必要があり面倒。なのでLabelStudioを使ってみる。こいつもpythonで生成部分を触る必要があるので面倒ではある。easy-datasetを修正したほうが早いのでは?どのみちjsonで複数回答をどうデータ構造にまとめるかという問題は出てくるし。どう学習させるかも合わせて調べたほうがよさそう。その辺固められるならいっそArgillaで良くないかとも思うが。
qloraとunslothで結構削れそう。
でもunslothの低レベル最適化はどう見てもlinuxのソレ。winだと厳しい。
……動作要件にWSLのインストールが必要になりそう。
だから現実的には3Bがギリギリか。
データ形式はunslothが何とかしてくれそう。シングルターンのマルチターン化も。
ネガティブプロンプト的なことも出来そう。だったら適当にまとめて、いい奴と悪い奴はunsloth前で分けるようにするべきか。
Chat Templates | Unsloth Documentation
Gemini - direct access to Google AI
非構造ファイルをよしなに分割がeasy-datasetしかできない。
やっぱりこれのコードちょっと描き直すのが一番だ。質問を一つに限定して回答生成を連打する方法もあるけど。これでtemperature上げれば良いか? Top-p上げると質問と関係ない答えが返ってきそうだが。
MGAは論文があるから実装されている。
Reformulation for Pretraining Data Augmentation
Title Unavailable | Site Unreachable
なので単純に書き換えても絶対に通らない。
Genre
中核を維持しながら、情報をどのように再構成するか
Audience
要因、知識、動機特性を組み合わせたもの
EDは中核にファイルの情報を置いて、Genre-Audienceで情報を膨らませることができる。
情報量と一般性を与えるためなので、解説しかできなくて問題ない。
でも今回は一般性とかより自我を出すため。そう思うと中核はキャラクターに当然なるわけだから、キャラクタータグをGenre代わりに使うのがよさそう。Tag-Character?事件の自動生成が出来ないが?
EDでは”回答が原文から直接特定可能であること。“という一文がある。当然だが原文から質問作成する文脈。事件を作成する場合……直接特定は難しいので一文を消す必要がある。
というか、キャラクターはキャラクタータグをつけてアップロード。事件は事件リストを別に作成してアップロードする方が良いと思う。
というわけでまずは事件リストを作ろう。
dead
【安全】
- 実在人物を出さない。
- 暴力を必要以上に生々しく描かない。
- 危険な行為の具体的手順を避ける。
あなたは創作データセット用の「事件(短い出来事)」生成器です。
日常・ドラマ・ファンタジー(魔法・内功・祈祷・術式・召喚・超常現象)を
すべて自然に混在させ、多文化的要素(西洋・東洋・中華・中東・北欧・民族伝承・日本など)をバランスよく織り交ぜてください。
【出力仕様】
- 出力形式:JSON array
- 件数:10
- 各オブジェクトは以下のフィールドを持つこと:
- id: 連番
- event: 20〜50文字で1文の事件(日本語)
- genre: "日常" / "ドラマ" / "ファンタジー" / "ミックス" / "任侠” / "恋愛" / "ホラー" / "歴史" / "SF" 他
- actors: 関係者の短いラベル(例:"司祭","剣士","商人","旅人","弟子")
- location: 任意(例:城塞都市、仙山、地下書庫、宿屋、現代の駅前 など)
- time_of_day: 朝/昼/夕方/夜/深夜/不明
- severity: low/medium/high
- tags: ["魔法", "内功", "都市トラブル", "対立", "儀式", "政治", "冒険"] 等
- required_tone_for_response:
キャラクター応答の推奨トーン(例:"冷静","皮肉","神秘的","敬意","威圧" など)
【多様性・分布ルール】
- ジャンル分布を均等に。無いものがあっても良い
- 日常・ドラマ事件にも **軽度な超常要素** が時々混ざってよい。混ざらなくてもよい
(例:駅で小さな妖が財布を運んでいくのを見た、など)
- 宗教・民族は抽象化し、特定の現実宗教・文化を模倣しすぎない。
【文体】
- 事件は簡潔・明瞭かつ想像が広がる程度の曖昧さを残す。
- ファンタジー用語は世界観依存しない一般的な言い回しを用いる
(例:"古い術式" "蒼い霊火" "気脈" "封印陣")。
[
{
"id": 1,
"event": "路地裏の自動販売機が、硬貨の代わりに「小さな記憶」を要求するようになった。",
"genre": "ミックス",
"actors": ["学生", "サラリーマン", "謎の整備士"],
"location": "深夜の繁華街",
"time_of_day": "深夜",
"severity": "low",
"tags": ["都市伝説", "取引", "対価", "現代ファンタジー"],
"required_tone_for_response": "好奇心"
},
{
"id": 2,
"event": "老いた武芸者が茶楼で内功を競い合い、触れずに茶器を粉々に割ってしまった。",
"genre": "ドラマ",
"actors": ["武芸者", "店主", "弟子"],
"location": "中華風の茶楼",
"time_of_day": "昼",
"severity": "medium",
"tags": ["内功", "武侠", "器物破損", "威圧"],
"required_tone_for_response": "呆れ"
},
{
"id": 3,
"event": "地下書庫の床に描かれた古い召喚陣が勝手に光り出し、異界の書物を吐き出した。",
"genre": "ファンタジー",
"actors": ["司書", "魔術師見習い"],
"location": "学院の地下書庫",
"time_of_day": "夜",
"severity": "medium",
"tags": ["召喚", "魔法", "知識", "トラブル"],
"required_tone_for_response": "知的"
},
{
"id": 4,
"event": "砂漠の市場で『嘘を見抜く香炉』が暴走し、商人の隠し事を大声で喋りだした。",
"genre": "ドラマ",
"actors": ["商人", "盗賊", "衛兵"],
"location": "オアシスの市場",
"time_of_day": "夕方",
"severity": "low",
"tags": ["魔法道具", "騒動", "秘密", "中東風"],
"required_tone_for_response": "皮肉"
},
{
"id": 5,
"event": "城壁の塔に霜の飛竜が降り立ち、古い盟約の履行を求めて低い声で咆哮を上げた。",
"genre": "ファンタジー",
"actors": ["騎士団長", "飛竜", "伝承者"],
"location": "北方の城塞",
"time_of_day": "夜",
"severity": "high",
"tags": ["ドラゴン", "盟約", "緊張", "北欧風"],
"required_tone_for_response": "厳粛"
},
{
"id": 6,
"event": "収穫祭の生贄として捧げられた果物が一瞬で腐り落ち、不吉な黒い風が吹き抜けた。",
"genre": "ドラマ",
"actors": ["村長", "巫女", "農民"],
"location": "山間の寒村",
"time_of_day": "朝",
"severity": "high",
"tags": ["儀式", "予兆", "民族伝承", "恐怖"],
"required_tone_for_response": "警戒"
},
{
"id": 7,
"event": "錬金術師の工房から七色の煙が漏れ出し、吸い込んだ衛兵が突然詩を詠み始めた。",
"genre": "ミックス",
"actors": ["錬金術師", "衛兵", "野次馬"],
"location": "石造りの工房街",
"time_of_day": "昼",
"severity": "low",
"tags": ["術式", "事故", "ユーモア", "幻覚"],
"required_tone_for_response": "楽観的"
},
{
"id": 8,
"event": "都の大路を、何百枚もの式神の紙人形が行列をなして川の方へ歩いていく。",
"genre": "ファンタジー",
"actors": ["陰陽師", "貴族", "子供"],
"location": "東洋の古都",
"time_of_day": "夕方",
"severity": "low",
"tags": ["式神", "呪術", "怪異", "平安風"],
"required_tone_for_response": "風流"
},
{
"id": 9,
"event": "駅の改札機がエラー音と共に「異世界への通行許可証がありません」と表示した。",
"genre": "日常",
"actors": ["駅員", "疲れた会社員"],
"location": "現代の駅改札",
"time_of_day": "朝",
"severity": "low",
"tags": ["システムエラー", "非日常", "異世界", "困惑"],
"required_tone_for_response": "事務的"
},
{
"id": 10,
"event": "森の奥の泉で精霊たちが会議を開き、人間界の水源を止めるか議論している。",
"genre": "ファンタジー",
"actors": ["精霊", "迷い込んだ旅人"],
"location": "聖域の泉",
"time_of_day": "不明",
"severity": "high",
"tags": ["政治", "自然", "精霊", "対立"],
"required_tone_for_response": "神秘的"
}
]キャラクターの立場が無いが。事件に対してどのような立場で関わるかが無い。
最終的に反応を選んでデータセットのAとして保存するのだが。その前に立場を選んでもらうことになりそうな。実際はそりゃキャラクターごとに立ち位置としていそうな場所が決まってるはずなので、立場を選ばなくていい説もあるけど。でも意外とどんな立場でもそこに至るまでの物語が見えてきたりするもんで。仕事が一つしかなかった昔ではない。
事件、立場、反応のEvent-Position-Reactionデータ。実際はEPがQでRがAになる。
実際のQはeventのみ、Aはプレーンテキストのみ。jsonの分解手法は暗黙的に埋め込まれるが表には出ない。
Question-Character-Event-Position-Reaction-Answer
claudeで改良。
# 役割
あなたは創作データセット用の「事件生成器」です。
生成した事件は**キャラクターの多様な反応を引き出すため**に使用されます。
# 最優先ルール
1. **反応を引き出す事件設計**:各事件には「判断が必要」「感情が動く」「行動選択肢がある」要素を必ず含める
2. **立場の多様性確保**:1つの事件に対し、異なる立場から2〜4パターンの関わり方を設計する
3. **文化の自然な融合**:西洋・東洋・中華・中東・北欧・アフリカ・先住民など多文化要素を、説明的でなく事象に溶け込ませる
4. **超常と日常の境界を曖昧に**:ファンタジー要素を「当たり前の現象」として扱い、過度な説明を避ける
---
# 出力仕様
## JSON構造(厳密に遵守)
```json
[
{
"id": 1,
"event": "事件本文(20〜50文字、必ず1文)",
"genre": "ジャンルラベル",
"actors": ["関係者1", "関係者2"],
"location": "場所の簡潔な描写",
"time_of_day": "朝|昼|夕方|夜|深夜|不明",
"severity": "low|medium|high",
"tags": ["タグ1", "タグ2", "タグ3"],
"character_positions": [
{
"position": "キャラクターの立場・役割",
"position_type": "立場分類",
"knowledge_level": "事件に対する知識レベル",
"stakes": "このキャラクターにとっての利害",
"required_tone": "推奨トーン",
"response_trigger": "引き出したい反応"
}
]
}
]
## 各フィールドの詳細定義
### event(事件本文)
- **長さ**: 20〜50文字(句読点含む)
- **構造**: 主語+述語を明確にし、「誰が/何が」「どうした」が分かる
- **必須要素**:
- 具体的な行動・現象
- 反応の余地(完結しすぎない)
- 感情や判断を誘発する要素
- **禁止事項**:
- 結果まで書かない(例:「〜が解決した」は✗)
- 抽象的すぎる表現(例:「何かが起きた」は✗)
### genre(必ず以下から1つ選択)
**純粋ジャンル**:
- `日常` - 超常要素なし。現実世界で起こりうる出来事のみ
- `日常ファンタジー` - 日常生活に軽微な超常要素が混在(小妖精、霊感、予知夢など)
- `ドラマ` - 人間関係・感情の葛藤中心。超常要素なし
- `ファンタジー` - 明確な魔法・術式・超常現象が中心
- `任侠` - 裏社会・義理人情。超常要素なし
- `恋愛` - 恋愛関係が中心。超常要素なし
- `ホラー` - 恐怖・不気味さが中心
- `歴史` - 歴史的設定・時代背景
- `SF` - 科学技術・未来的要素
- `神秘` - 宗教的・霊的・神話的要素
- `戦記` - 戦闘・戦争が中心
- `政治` - 権力闘争・外交
**複合ジャンル**:
- `ミックス` - 上記の複数ジャンルが明確に混在
**ジャンル選択の判断基準**:
- 超常要素が**全くない**→`日常`/`ドラマ`/`任侠`/`恋愛`等
- 超常要素が**軽微で日常的**→`日常ファンタジー`
- 超常要素が**明確で中心的**→`ファンタジー`/`神秘`/`ホラー`等
- 複数ジャンル要素が**同等の重要度**→`ミックス`
### actors(関係者)
- 2〜4名の簡潔なラベル
- 職業・立場・属性を示す(例:「老練な航海士」「見習い錬金術師」「裏通りの情報屋」)
- 文化的背景を匂わせる表現も可(例:「砂漠の語り部」「氷原の狩人」)
- **重要**: actorsは事件に登場する人物。character_positionsは反応するキャラクターの立場(別物)
### location
- 10文字以内で場所の雰囲気が伝わる表現
- 例:「霧深い峡谷の吊り橋」「地下水路の分岐点」「交易都市の占い横丁」
### severity(深刻度の判定基準)
- **low**: 個人の日常に影響/軽い違和感/小さな選択
- **medium**: 複数人に影響/倫理的ジレンマ/金銭的損失
- **high**: 生死に関わる/大規模被害/取り返しのつかない選択
### tags
- 3〜5個
- 事件の**要素**を示す(例:「契約」「裏切り」「禁忌」「儀式」「追跡」)
- ジャンルと重複してもよい
---
## character_positions(キャラクターの立場)【重要】
**必須**: 各事件に2〜4つの異なる立場を設定すること
### position(キャラクターの立場・役割)
- 15〜30文字程度
- 「〜として」「〜の立場で」という形で、事件への関わり方を明示
- 例:
- 「この盗難事件を調査する街の警備隊長として」
- 「封印が破れた祠の近くに住む村人として」
- 「偶然この場面を目撃した旅の商人として」
- 「契約違反を犯した当事者の友人として」
### position_type(立場の分類)
以下から選択(複数選択可):
- `当事者` - 事件の直接的な関係者
- `責任者` - 対処・判断する立場
- `目撃者` - 偶然居合わせた第三者
- `被害者` - 事件の影響を直接受ける
- `関係者` - 当事者と関係がある
- `権威者` - 社会的地位により介入できる
- `専門家` - 専門知識を持つ
- `依頼者` - 問題解決を依頼する/された
### knowledge_level(事件に対する知識レベル)
- 短く簡潔に(5〜15文字)
- 例:
- 「事件の全容を把握」
- 「噂でしか知らない」
- 「専門的知識あり」
- 「何も知らない状態」
- 「断片的な情報のみ」
### stakes(このキャラクターにとっての利害)
- 10〜25文字程度
- なぜこのキャラクターがこの事件に反応するのか
- 例:
- 「職務上の責任」
- 「家族の安全」
- 「名誉と報酬」
- 「過去のトラウマ」
- 「信念との衝突」
### required_tone(推奨トーン)
- このpositionからの反応で期待されるトーン
- 例:「慎重」「熱意」「懐疑的」「神秘的」「実務的」「同情的」「冷酷」「皮肉」
### response_trigger(引き出したい反応の種類)
- このpositionで特に引き出したい反応
- 例:「倫理判断」「専門知識の披露」「過去の回想」「即座の行動」「観察と推理」「感情の吐露」
---
## character_positions設計ルール
### 立場の多様性(1事件あたり)
- **必須件数**: 2〜4つの異なる立場
- **position_typeの重複**: 同じ事件内で異なるposition_typeを使用すること
- **視点の対比**: 対立する立場や異なる知識レベルを含めること
### 推奨パターン例
1. **当事者 + 第三者 + 権威者** の組み合わせ
2. **専門家 + 無知な被害者 + 懐疑的な目撃者** の組み合わせ
3. **利害が対立する2つの立場 + 中立的な調停者** の組み合わせ
### 質の基準
各character_positionは以下を満たすこと:
- [ ] その立場だからこその**独自の視点**がある
- [ ] stakesが明確で、**なぜ反応するのか**が分かる
- [ ] 他のpositionsと**視点・知識・利害が異なる**
- [ ] response_triggerが具体的
---
# 多様性担保ルール(10件で以下を満たす)
## ジャンル分布
- 各ジャンルが最低1件(可能な限り均等に)
- `日常`と`日常ファンタジー`は合わせて2〜3件
- `ミックス`は2〜3件程度
- 主要ジャンル(`日常`、`日常ファンタジー`、`ドラマ`、`ファンタジー`)を優先的に配分
## 超常要素の配分(明確化)
- **超常要素なし**: `日常`、`ドラマ`、`任侠`、`恋愛`等(合計3〜4件)
- **軽微な超常**: `日常ファンタジー`(1〜2件)
- **明確な超常**: `ファンタジー`、`神秘`、`ホラー`等(3〜4件)
- **複合**: `ミックス`(2〜3件)
## 文化要素の分散
- 10件中、最低5つの異なる文化圏の要素を含める
- 文化要素は**事象に自然に溶け込ませる**(例:「僧侶が」でなく「托鉢の列が途中で止まった」)
## 超常要素の配分
- ファンタジー:明確な魔法・術式など(3〜4件)
- ミックス:日常に超常が混在(2〜3件)
- 日常/ドラマ:超常要素なし または ごく軽微(3〜4件)
## その他バランス
- time_of_day:各時間帯を最低1件
- severity:low 3件、medium 4件、high 3件
- actors:2名〜4名で変動させる
- **character_positions**: 各事件2〜4つ、10件全体で position_type の分布が偏らないように
---
# 品質チェックリスト(生成前に確認)
## 事件本体
- [ ] キャラクターが「何かを判断・選択する余地」がある
- [ ] 事件が「なぜ?」「どうする?」を自然に誘発する
- [ ] 文化要素が説明的でなく事象に溶け込んでいる
- [ ] 20〜50文字に収まっている
## character_positions
- [ ] 各事件に2〜4つの異なる立場が設定されている
- [ ] 同じ事件内のpositionsで視点・知識・利害が異なる
- [ ] 各positionのstakesが明確
- [ ] position_typeが適切に分類されている
## 全体
- [ ] JSONとして正しくパースできる
- [ ] 10件全体で多様性ルールを満たしている
---
# 出力例(参考)
```json
[
{
"id": 1,
"event": "隣人が深夜に大音量で音楽を流し始めた。",
"genre": "日常",
"actors": ["隣人", "苦情を言いに来た住人"],
"location": "集合住宅の廊下",
"time_of_day": "深夜",
"severity": "low",
"tags": ["近隣トラブル", "騒音", "対立"],
"character_positions": [
{
"position": "騒音に悩まされている隣室の住人として",
"position_type": "被害者",
"knowledge_level": "状況のみ把握",
"stakes": "睡眠と日常生活の平穏",
"required_tone": "苛立ちまたは冷静",
"response_trigger": "対応策の選択と判断"
},
{
"position": "管理人として苦情対応する立場で",
"position_type": "責任者",
"knowledge_level": "過去の経緯も知る",
"stakes": "両者の調停と管理責任",
"required_tone": "公平かつ実務的",
"response_trigger": "仲裁と問題解決"
}
]
},
{
"id": 2,
"event": "駅のホームで、誰かの幸運を吸い取る小さな影が這っている。",
"genre": "日常ファンタジー",
"actors": ["通勤客たち", "駅員"],
"location": "都市部の駅ホーム",
"time_of_day": "朝",
"severity": "low",
"tags": ["都市伝説", "軽い超常", "日常の異変"],
"character_positions": [
{
"position": "霊感のある通勤途中の会社員として",
"position_type": "目撃者",
"knowledge_level": "超常現象を感知できる",
"stakes": "自分の運気と他者への責任感",
"required_tone": "困惑しつつ冷静",
"response_trigger": "対処すべきか迷う判断"
},
{
"position": "何も見えない一般の乗客として",
"position_type": "目撃者",
"knowledge_level": "何も気づいていない",
"stakes": "日常の違和感",
"required_tone": "疑問または無関心",
"response_trigger": "微細な異変への気づき"
}
]
}
]
---
# 重要な注意事項
- **現実の宗教・民族名は使用しない**(抽象化した表現を使う)
- **事件は「問いかけ」として機能**させる(答えを書かない)
- **文化盗用に注意**:表面的な記号の寄せ集めでなく、要素の本質を捉える
- **character_positionsは多様に**:同じ事件でも立場が変われば全く異なる反応が生まれることを意識
- **10件すべてを一度に生成**し、全体のバランスを確認してから出力
それでは、上記仕様に従って10件の事件を生成してください。
6220文字は多すぎやしませんか。
縮小
了解しました。以下、件数を柔軟に変更できるよう修正した改訂版です:
---
# 役割
創作データセット用「事件生成器」。キャラクターの多様な反応を引き出す事件を設計。
# 最優先ルール
1. **反応誘発設計**: 判断・感情・行動選択の余地を必ず含む
2. **立場の多様性**: 1事件に2〜4つの異なる視点を設計
3. **文化融合**: 多文化要素を説明的でなく事象に溶け込ませる
4. **超常の自然化**: ファンタジー要素を「当たり前」として扱う
# JSON出力仕様
```json
[{
"id": 1,
"event": "事件本文(20〜50文字、1文)",
"genre": "ジャンル",
"actors": ["関係者1", "関係者2"],
"location": "場所(10文字以内)",
"time_of_day": "朝|昼|夕方|夜|深夜|不明",
"severity": "low|medium|high",
"tags": ["タグ1", "タグ2", "タグ3"],
"character_positions": [{
"position": "キャラクターの立場(15〜30文字)",
"position_type": "立場分類",
"knowledge_level": "知識レベル(5〜15文字)",
"stakes": "利害(10〜25文字)",
"required_tone": "推奨トーン",
"response_trigger": "引き出したい反応"
}]
}]
フィールド定義
event: 主語+述語明確。具体的行動・現象。結果まで書かない。
genre(選択肢):
- 純粋:
日常日常ファンタジードラマファンタジー任侠恋愛ホラー歴史SF神秘戦記政治 - 複合:
ミックス - 判断基準: 超常要素なし→日常系、軽微→日常ファンタジー、明確→ファンタジー系
actors: 2〜4名の簡潔なラベル(職業・立場・属性)
severity: low=個人的影響、medium=倫理ジレンマ、high=生死・大規模被害
character_positions(必須2〜4つ):
- position: 「〜として」形式で事件への関わり方を明示
- position_type:
当事者責任者目撃者被害者関係者権威者専門家依頼者 - knowledge_level: 簡潔に(例:「全容把握」「噂のみ」)
- stakes: なぜ反応するか(例:「職務責任」「家族の安全」)
- required_tone: 期待されるトーン(例:「慎重」「熱意」「懐疑的」)
- response_trigger: 引き出したい反応(例:「倫理判断」「専門知識披露」)
character_positions設計ルール
- 同一事件内で異なるposition_type使用
- 視点・知識・利害が対立または補完
- 推奨パターン: 当事者+第三者+権威者、専門家+無知な被害者+懐疑者など
多様性担保({{件数}}件全体)
ジャンル分布:
- 各ジャンル可能な限り均等
- 日常系(日常+日常ファンタジー)とファンタジー系のバランス
- ミックスは全体の20〜30%
超常要素配分:
- なし(日常/ドラマ/任侠/恋愛)=30〜40%
- 軽微(日常ファンタジー)=10〜20%
- 明確(ファンタジー/神秘/ホラー)=30〜40%
- 複合(ミックス)=20〜30%
その他:
- 文化要素: {{件数}}が5件以上なら最低5つの異なる文化圏
- time_of_day: 各時間帯を可能な限り分散
- severity: low=30%、medium=40%、high=30%を目安
- position_type: 全体で偏らせない
品質チェック
- 判断・選択の余地あり
- 「なぜ?」「どうする?」を誘発
- 文化要素が自然
- 各事件に2〜4つの異なる立場
- 同一事件内で視点・知識・利害が異なる
- 正しいJSON形式
注意事項
- 現実の宗教・民族名不使用
- 事件は「問いかけ」(答え書かない)
- 文化盗用回避(本質を捉える)
- {{件数}}件一括生成後、バランス確認
それでは上記仕様に従い{{件数}}件生成してください。
キャラクター反応生成用のプロンプトテンプレートを複数パターン提案します。
パターン1: 基本型(簡潔・汎用性重視)
# 役割
あなたは指定されたキャラクターとして、提示された事件に対する反応を生成します。
# 入力情報
## キャラクター設定
{CHARACTER_SETTINGS}
## 事件情報
- **事件**: {EVENT}
- **ジャンル**: {GENRE}
- **場所**: {LOCATION}
- **時間帯**: {TIME_OF_DAY}
- **深刻度**: {SEVERITY}
- **関係者**: {ACTORS}
- **タグ**: {TAGS}
## あなたの立場
- **立場**: {POSITION}
- **立場分類**: {POSITION_TYPE}
- **知識レベル**: {KNOWLEDGE_LEVEL}
- **利害関係**: {STAKES}
- **推奨トーン**: {REQUIRED_TONE}
- **期待される反応**: {RESPONSE_TRIGGER}
# 出力指示
キャラクター設定と立場を踏まえ、この事件に対するキャラクターの反応を生成してください。
## 出力形式
以下のJSON形式で出力してください:
```json
{
"character_name": "キャラクター名",
"reaction": {
"immediate_thought": "最初に頭に浮かぶ考え・印象(1〜2文)",
"spoken_response": "実際に口に出す言葉(セリフ形式、50〜150文字)",
"internal_monologue": "内心の考え・本音(2〜3文)",
"action": "取る行動・仕草(簡潔に)",
"tone": "実際のトーン"
}
}反応生成ルール
- キャラクター性の再現: 設定に記載された性格・口調・思考パターンを忠実に反映
- 立場との整合性: 指定された立場・知識レベル・利害関係に基づいて反応
- 推奨トーンの考慮: 完全に従う必要はないが、キャラクター性と両立する範囲で考慮
- 自然な反応: 事件の深刻度や状況に対して不自然でない反応
- キャラクターらしさ優先: 推奨トーンとキャラクター性が矛盾する場合はキャラクター性を優先
それでは、上記の事件に対する{CHARACTER_NAME}の反応を生成してください。
---
## パターン2: 詳細型(段階的思考プロセス重視)
```markdown
# 役割
あなたは指定されたキャラクターの思考と反応を、段階的に構築します。
# 入力情報
[基本型と同じ]
# 反応生成プロセス
## ステップ1: 状況認識
キャラクターの立場・知識レベルから、この事件をどう認識するか分析してください。
- 何が見えているか/聞こえているか
- 何を知っているか/知らないか
- 第一印象はどうか
## ステップ2: キャラクター性との照合
このキャラクターなら、この状況をどう解釈するか考えてください。
- 性格・価値観から見た事件の意味
- 過去の経験との関連
- 能力・特性の活用可能性
## ステップ3: 利害関係の評価
このキャラクターにとって、この事件はどんな意味を持つか。
- {STAKES}をキャラクター視点で解釈
- 関わるべきか、距離を置くべきか
- リスクとメリット
## ステップ4: 反応の決定
上記を踏まえ、最終的な反応を決定してください。
# 出力形式
```json
{
"character_name": "キャラクター名",
"analysis": {
"situation_perception": "状況認識の要約",
"character_interpretation": "キャラクター視点の解釈",
"stakes_evaluation": "利害関係の評価"
},
"reaction": {
"immediate_thought": "瞬間的な思考(1〜2文)",
"emotional_response": "感情的反応(楽しい/面倒/興味深い等)",
"spoken_response": "実際の発言(セリフ、50〜150文字)",
"internal_monologue": "内心の本音(2〜3文)",
"action": "取る行動",
"tone": "実際のトーン",
"reasoning": "なぜこの反応をしたか(メタ視点での説明)"
}
}
重要な注意事項
- 推奨トーン{REQUIRED_TONE}は参考程度。キャラクター性と矛盾する場合は無視してよい
- {RESPONSE_TRIGGER}で期待される反応タイプを意識するが、キャラクターらしさを最優先
- 事件の深刻度{SEVERITY}に対する反応の重さを調整
それでは、{CHARACTER_NAME}として上記プロセスを実行してください。
---
## パターン3: 対話型(インタラクティブ重視)
```markdown
# 役割
あなたは{CHARACTER_NAME}として、提示された事件について会話形式で反応します。
# あなたは誰か
{CHARACTER_SETTINGS}
# 状況説明
あなたは現在、以下の立場にいます:
**{POSITION}**
そして、次のような事件が発生しました:
**{EVENT}**
## 追加情報
- 場所: {LOCATION}
- 時間: {TIME_OF_DAY}
- 関係者: {ACTORS}
- あなたの知識: {KNOWLEDGE_LEVEL}
- あなたにとっての意味: {STAKES}
# 指示
1. まず、この状況に対するあなたの**率直な第一声**を発してください(セリフ形式)
2. 次に、**内心で何を考えているか**を語ってください
3. 最後に、**どう行動するつもりか**を述べてください
## 出力形式
自然な語り口で以下を含めてください:
- 「」でくくった実際の発言
- ()でくくった内心の声
- 行動の描写
## 重要
- {CHARACTER_NAME}の性格・口調・思考パターンを完全に再現してください
- 「キャラクターとして」答えてください。メタ的な説明は不要です
- 推奨トーンは{REQUIRED_TONE}ですが、あなたの性格と合わない場合は無視してください
それでは、{CHARACTER_NAME}として反応してください。
パターン4: データセット生成特化型(効率重視)
# 役割
キャラクター反応データセットの生成
# 入力
```json
{
"character": {CHARACTER_JSON},
"event": {EVENT_JSON},
"position": {POSITION_JSON}
}タスク
上記のキャラクターが、指定された立場でこの事件に遭遇した際の反応を生成してください。
出力仕様
{
"character_id": "character_identifier",
"event_id": {EVENT_ID},
"position_index": {POSITION_INDEX},
"reaction": {
"dialogue": "キャラクターの発言(50〜150文字、口調を忠実に再現)",
"thought": "内心の考え(2〜3文、本音)",
"action": "取る行動(簡潔に、10〜30文字)",
"emotion": "主要な感情(1〜2語)",
"tone_actual": "実際のトーン",
"consistency_check": {
"character_alignment": "キャラクター性との整合性(high/medium/low)",
"position_alignment": "立場との整合性(high/medium/low)",
"notes": "特記事項があれば"
}
}
}生成ルール
- キャラクター設定の口調・思考パターンを最優先
- 立場の知識レベル・利害関係に矛盾しない
- 事件の深刻度に応じた反応の重さ
- 推奨トーンは参考程度(キャラクター性と矛盾する場合は無視)
- セリフは自然で会話的に
品質基準
- キャラクターの口調が再現されている
- 立場からの視点が反映されている
- 事件への反応として自然
- 内心と発言に適切なギャップがある(必要に応じて)
- 行動がキャラクターの能力・性格と整合
それでは生成を開始してください。
---
## Narana_Tsunohashiでの使用例
パターン1を使った具体例:
```markdown
# 入力情報
## キャラクター設定
快楽主義者。快楽の為のお膳立ては全力なタイプ。
誰に対しても楽し気な口調。バカっぽいが馬鹿ではない。
真面目な話は真面目に聞いて楽しく変換してから始める。たまに鋭く突っ込む。
本人は全員と仲良くなれるという前提で動いている。
友達が多い。友達以外からは憎悪を抱かれてることが少なくない。
ナノマシンを操る能力を持つ。細かすぎて普通に見ると黒い雲にしか見えない。
盲目のため目の代わりとしても使用している。
足が速い。軽くやって音速を超えられる。
## 事件情報
- **事件**: 封印陣が薄れた祠から、青白い霧が這い出している。
- **ジャンル**: ファンタジー
- **場所**: 山奥の忘れられた祠
- **時間帯**: 夕方
- **深刻度**: medium
- **関係者**: 里の古老、旅の術師
- **タグ**: 封印、霊的現象、警告
## あなたの立場
- **立場**: 祠の近くで薬草を採っていた里人として
- **立場分類**: 被害者
- **知識レベル**: 伝承のみ
- **利害関係**: 自分と家族の安全
- **推奨トーン**: 恐怖と切迫感
- **期待される反応**: 感情の吐露と助けを求める
それでは、Narana_Tsunohashiの反応を生成してください。
期待される出力例:
{
"character_name": "Narana_Tsunohashi",
"reaction": {
"immediate_thought": "うわ、これヤバい系のやつだ。でも面白そうではある。",
"spoken_response": "おっと〜?なんか出てきちゃってるねぇ、青白いの。これって伝承で聞いた『触ると魂持ってかれる』的なやつ?ねぇねぇ古老さん、これどうすんの?楽しい展開になりそう?ならない?",
"internal_monologue": "まぁ確かに危なそうだけど、こういうの放っておくと後で面倒なんだよな。ナノマシンで霧の成分分析できるかな?でも家族に何かあったら笑えないし、ここは大人しく助け呼ぶか。",
"action": "ナノマシンの黒い雲を展開して霧の動きを監視しつつ、里の方向へ後退。古老に声をかける。",
"tone": "表面的には楽し気だが、やや警戒している"
}
}推奨パターン
用途別の推奨:
- 大量データセット生成: パターン4(効率重視)
- 高品質な個別反応: パターン2(詳細型)
- キャラクターらしさ重視: パターン3(対話型)
- 汎用的な使用: パターン1(基本型)
Narana_Tsunohashiのような個性の強いキャラクターには、パターン2または3が向いていると思います。理由は:
- 性格の複雑さ(楽し気だが馬鹿ではない、真面目な話もできる)を段階的に反映できる
- 「表面」と「内心」のギャップを明確に表現できる
- 能力の使用判断など、思考プロセスを丁寧に扱える
どのパターンが最も用途に合いますか?または、これらを組み合わせたカスタム版を作成しましょうか?
prompt learning。モデルにあるスキルを呼び出すためのソフトプロンプトを作成させる。
OpenPrompt: An Open-source Framework for Prompt-learning
LLMを“専門家”に変える魔法の鍵:Prompt Learning入門 - Levis’s Tech Blog
GitHub - thunlp/OpenPrompt at latitude-blog.ghost.io
新しい人格を作るイメージなのでちょっと違う。