30人の村人が、二つの判断で暮らす村。何かが起きた村人は Jev モデルがその場で行動を確率で選び(速い判断)、寄り合い役の Claude が実時間で約1時間ごとに目標と村の決まりを決め、出来事と衝動を振り返って村人に性格を足したり消したりする(遅い判断)。冬は畑から何も取れず、決断はすべて確率のまま画面に出る。見ている人は1日1回だけ村人にささやける。
AIに任せていること
- 何かが起きた村人の次の行動を、その場で確率つきで選ぶ(Jev モデル)。約1時間ごとに村の目標と決まりを決め、出来事を振り返って村人の性格を足し引きする(Claude の寄り合い)。
人が決めること
- AIに選ばせる行動の範囲と、AIに渡す判断の材料をコードで決める。盗みと襲撃は空腹・恨み・噂のどれかがあるときだけ選べ、配給の回数には「足りる」「足りない」を言葉で添えて渡す。
数字
- 行動に占める盗みの割合(最初 → 選択肢をコードで絞った後)2026-09時点
- 73% → 5%
- 1刻ぶんの判断にかかる時間(全員を並列、中央値)2026-09時点
- 620ミリ秒
- 失敗した呼び出し2026-09時点
- 約1,500回中、タイムアウト3回
- 飢えた村人の盗みの確率(性格の追加なし → 「恨みを抱く」「人間不信」を追加)2026-09時点
- 17% → 51%
- 最初の通し運転で、倉庫に食料が残ったまま餓死した村人2026-09時点
- 2回の冬で16人
- 1日のトークン消費の見積もり2026-09時点
- 見ている人が1人で約8,300万、誰もいなくても約1,000万
仮説
速い判断の衝動を遅い判断が振り返って人柄を書き換え、その人柄が次の衝動を変える仕組みにすれば、AI村人は短期と中長期で目に見えて変わり、人はその変化を見に戻ってくる。
わかったこと
- 村人ひとりひとりの判断は状況に沿っていたが、全体では行動の73%が盗みになり、村は約110刻で飢えて滅んだ。最初の手直しで、行動の結果を判断基準に書き足し、食料の見通しを状態の項目に加えたが、盗みは80%に増えた。
- 盗みと襲撃を、空腹・恨み・噂のどれかがあるときだけ選択肢に入れるようコードで絞ると、盗みは5%に下がった。200刻の試運転では、飢饉で30人が15人まで減ったあと村が持ち直した。
- 1刻ぶん、生きている村人全員の判断を並列に出し終えるまでの時間は中央値620ミリ秒だった。約1,500回の呼び出しのうち、失敗はタイムアウト3回だった。
- 見ている人が1人いると1日約8,300万トークン、誰もいなくても約1,000万トークンを使う見積もりになった。そこで、誰も見ていない間は村の時間を止めるようにした。
- 状況を固定して寄り合いが付ける性格だけを変えると、Jev の判断はその性格の方向に動いた。飢えた村人の盗みの確率は、性格の追加なしで17%、「恨みを抱く」と「人間不信」を足すと51%になり、気分は2.3から1.2に下がった。「面倒見がいい」では盗みが7%に下がって畑仕事が倍になり、「諦めた」では祈りが3倍になった。
- Jev は、画面に出した今の予定に強く引っぱられた。飢えていても「予定どおり続ける」を0.6前後で答えるので、0.5以上なら必ず予定を採る決め方では、盗みに傾いた村人も予定どおり話し続けた。予定を採る確率をこの答えそのものにすると、春の飢饉の盗みは1件から7件になった。
- 最初の通し運転では、寄り合いが倉庫に鍵をかけて配給を1日2回にし、倉庫に800以上の食料が残ったまま2回の冬で16人が餓死した。1日に何回食べれば足りるかを寄り合いに伝えていなかったのが原因で、配給の回数ごとに「足りない」「足りる」を言葉で渡すと、寄り合いは飢え死にが出た後に配給を1日4回まで上げた。
- 寄り合いは経験を善い方に読みがちだった。6時間ぶんの通し運転で性格の変化28件のうち15件のきっかけが「助けられたことから」で、村はたいてい助け合う方へ変わった。飢饉は最初の冬が明けた春から夏に集中し、30人が14人まで減った後は、2年あまり誰も死ななかった。
構成
Cloudflare Workers / Durable Objects / Workers AI (TypeSafe Jev) / Claude API / React / TypeScript