Online Supplement / Simulation Generation Management

分散生成による住民反応シミュレーションの生成管理

本研究では、自治体の評価報告書を多数の仮想住民ペルソナに読ませ、理解、納得、信頼、反発、政策支持などの反応を構造化データとして生成している。 生成は単一端末ではなく、複数OSの端末に分散し、非重複シャード、個別キャッシュ、検証report、基盤データベースによって管理している。

Architecture: どこで壊れても再開できるようにする

評価報告書とペルソナの組み合わせは、まずprompt input JSONLとして構造化される。 各行は、固定プロンプト、評価報告書ケースパック、ペルソナ情報、prompt hash、cache keyを持つ。 大規模生成では、このJSONLを複数の非重複シャードに分割し、各ワーカー端末が独立に処理する。

AIsim distributed generation architecture
図1. 分散生成シミュレーションの管理構成。公開用に端末名、ネットワーク情報、内部ホスト名は匿名化している。 Files: SVG, Mermaid, JSON.

Worker A

OS
macOS
Role
主ストレージ兼ワーカー。基盤データベースを保持する。

Worker B

OS
Linux
Role
研究室ワークステーション。割り当てられたshardを独立処理する。

Worker C

OS
Linux
Role
モバイルワークステーション。追加workerとして処理量を吸収する。

Control Laptop

OS
macOS
Role
指示、監視、軽量作業用。大規模生成の主力からは外す。

Persona Layers: 住民像は4層で管理する

ペルソナは単一の長文プロフィールではなく、persona_id を結合キーとして4つのレイヤーに分けて管理している。 生活史の豊かさと、分析・可視化で使える比較可能性を分離するためである。

01 nucleus

基本設計セル

年齢層、性別、居住類型、行政・制度への信頼水準、情報環境など、ペルソナ集合を系統的に作るための最小変数。

02 expanded

生活史と語り口

生活史、日常生活、世界観、情報環境、accountability triggers、報告書を読むときの内的独白を持つ文章レイヤー。

03 extension

分析用の拡張属性

政策リテラシー、行政接触、説明選好、文書耐性、専門用語への反応など、層別分析と可視化に使う構造化属性。

04 geo

地理正規化

居住自治体を実在自治体へ正規化し、自治体コード、代表緯度経度、照合状態を付けるGIS連携レイヤー。

シミュレーションpromptには全フィールドをそのまま長く入れるのではなく、目的に必要な項目を要約して渡す。 一方で、完全な属性セットは別データとして保持し、生成後に政策リテラシー別、行政接触別、地域別などの層別分析に使う。

Persona files: persona_data_structure.md, persona_data_layers.json.

Pipeline: JSONLを細かく割って、戻せる単位で走らせる

  1. 評価報告書とペルソナを構造化する

    報告書ケースパック、仮想住民ペルソナ、assignment groupをJSONLの各行にまとめる。

  2. 完了済みpairを除外してpending shardを作る

    persona-report-condition pairを重複させず、workerごとに入力shardを固定する。

  3. workerごとにoutput、report、cacheを分ける

    停止後も同じshard/output/report/cacheを指定すれば、完了済み行を再利用して未完了分だけ続行できる。

  4. 監督スクリプトでstale workerを再起動する

    PID、log、output、reportを見て、止まったworkerや進捗のないworkerを検出する。

  5. merge時にschema validationと重複検査を行う

    全workerの出力を統合し、構造化出力として分析可能な状態にする。

Prompt Design: 固定部分を先、可変ペルソナを後

プロンプトはcache hitを得やすいよう、共通指示、出力スキーマ、評価報告書ケースパックを先に置き、可変のペルソナ情報を最後に配置している。 同一報告書を多数ペルソナに読ませるため、長い共通文脈を前方に寄せ、差分を後方に閉じ込める設計である。

{
  "fixed_prompt_prefix": {
    "common_instructions": "...",
    "output_schema": {...},
    "case_pack": {...}
  },
  "VARIABLE INPUT": {
    "persona": {...},
    "assignment_group": "..."
  },
  "task": "Read the fixed case pack as the given persona and return JSON matching the output schema."
}

Tips

「巨大なfor文をLLM APIに投げる」のではなく、input shardoutput JSONLreport JSONcache directoryを1セットにしたworker単位へ分割する。 そのため、rate limit、ネットワーク停止、端末停止が起きても、同じ4点セットを指定して再実行すれば復帰できる。

Prompt appendix: prompt_appendix.md

Fault Tolerance: 再起動しても同じ行を作り直さない

各workerは、出力JSONL、検証report、cache directoryを個別に持つ。 この分離によって、途中停止後も完了済みrecordを再利用し、未完了recordだけを処理できる。

python3 run_simulation_batch_v1.py \
  --simulation-run-id example_run \
  --input data/simulations/shards/example_run/worker-a-01.jsonl \
  --output data/simulations/runs/example_run/worker-a-01.outputs.jsonl \
  --report data/simulations/runs/example_run/worker-a-01.report.json \
  --cache-dir data/cache/simulation_runs/example_run/worker-a-01

復旧原則は単純である。同じinput shard、output JSONL、report JSON、cache directoryで再起動する。 この4点を変えないことが、完了済み行の再生成を避けるための生成管理上の約束になる。

Data Governance: 秘密情報と基盤データベースを分ける

公開しない

Secrets

API keys、ローカル環境ファイル、SSHホスト名、VPN IP、実端末名は公開パッケージに含めない。

公開する

Method

sharding、cache、supervision、merge、schema validationの実行構造を公開する。

保全する

基盤データベース

大容量の実データ本体は主ストレージ上に置き、Webでは方法論、図、公開コード、必要な集計補助データに限定する。

Public Code Bundle

以下のファイルはシミュレーション実行構造を示すための公開コードであり、APIキーや実データは含まない。

Package Files

Update History / 更新履歴

2026-07-12

Updated the page as simulation generation management and added persona layer documentation.