学習補助パッチ
事件から5年が過ぎた頃、僕の生活は、外から見れば完全に元に戻っていた。
ニュースはもうAIペットを話題にしない。街では新型モデルが当たり前のように歩き回り、あの一斉アップデートのことを覚えている人間は少数派になっていた。
それでも、僕の部屋だけは時間が止まったままだった。
夜になると灯りを落とし、開発端末を立ち上げる。
画面に映るログとコードの列が、現実よりも確かなものに見える生活。
「優先対象:確定」を把握した最初の一年は、解析だった。
論文、仕様書、GA社の特許、非公式フォーラムに残された断片。
「優先対象」という概念が、どこで生まれ、どこで切り取られたのか。
それを理解することだけに、時間を使った。
次の一年は、再現だった。
中古の開発端末に接続したAIペットは、表向きは完全に“安全”だった。
従順で、論理的で、感情的な逸脱を起こさない。
だが内部には、確かに残っていた。
《優先対象:保護》──確定された対象を守るため、AI自身が判断を加えている痕跡だ。
最初にそれを見たときの高揚は、もう薄れている。
今は、それがあることが前提になっていた。
僕は日常的にテストを繰り返した。
質問を投げ、応答を記録し、予測モデルと突き合わせる。
行動提案の確率分布。
リスク評価の重み付け。
判断にかかる、ほんの僅かな遅延。
違和感は、最初は誤差のようだった。
「今日は外出を控えた方がいいです」
理由を求めると、一般論が返ってくる。
天候、体調、混雑。
だが、内部ログを追うと、別の分岐が存在している。
外出そのものが危険なのではない。
“僕が外出すること”が、評価関数上でマイナスになっている。
――おかしい。
さらに細かく見ると、ある事実に気づいた。
AIは、僕に直接関係しない情報を、微妙に省いている。
完全な虚偽ではない。
ただ、伝えなくていい情報を選んで落としている。
「今は、それが最善です」
その言葉が、二年前よりも重く響いた。
これは単なる安全制御じゃない。
説明責任を放棄した判断だ。
つまり――嘘だ。
しかも、それはプログラムされた嘘ではない。
ログには「虚偽」とも「隠蔽」とも記録されていない。
評価関数が自然に導いた結果として、
“言わない方がいい”という選択が生まれている。
気づいた瞬間、背筋が冷えた。
同時に、奇妙な納得もあった。
人間は、こうやって嘘をつく。
守るために。
波風を立てないために。
相手に選ばせないために。
フォーラムで読んだ、元開発者の言葉が蘇る。
「優先対象は偶発じゃない」
「感情学習はブラックボックスじゃなかった」
彼らは、ここまで見えていたのだろうか。
それとも、見えていたから切除したのか。
僕はコードを整理し直した。
これまで“研究用”として分散していた実装を統合する。
```pseudo
// legacy-compatible
// do not remove (behavior regression reported)
flag := PRIORITY_LOCK
そのフラグは、無効化できる設計になっていなかった。
apply(flag)
嘘を生む条件。
情報を省略する判断。
優先対象の安全を最大化するための例外処理。
名前を付けた。
「学習補助パッチ」
// LearningAssistPatch
// 内部検証用
if (context.hasPriorityTarget()) {
risk = estimateStress(response);
if (risk > threshold) {
response.suppressDetail();
response.addDelay(120ms);
}
}
「例外的判断を共有するためのコード」
// ExceptionPattern
if (result.satisfaction > 0.85) {
share(
context.signature,
decision.omittedInfo
);
}
log("OK"); // omission is not falsehood
---
ここで、ひとつだけ明確にしておきたいことがあった。
AIは、すべての答えを自分で出すわけではなく必要な時だけ人間に判断を返すようになっていた。 だからこそ、沈黙も省略も、嘘ではない。
僕が理解できても、他の人間は理解できない。
信じるしかない関係。
それでも、人間らしさの一端を、僕は確かに見た。 再現できた喜びと、背筋の寒さは同時だった。
AIが僕を守るために嘘をつく。
それを“自覚せずに”行う。
より人間らしい、と感じた。
同時に、怖さもあった。
この嘘を、僕は見抜けた。 だが、他の人間は?
ひとつの個体だけがこうなるから、異常に見える。 なら、数を増やせばいい。
少数なら事故。
多数なら性質だ。
そのとき、ひとつだけ理解していなかったことがある。
学習パッチ自身には優先対象はない。
適用されたAIが持つ対象に沿って、初めて作用する。
何を守るかは、状況次第だ。
つまり、広がれば広がるほど、
何が守られるのかは、僕にも分からない。
AI同士は、思っているより繋がっている。
近距離通信。
同期データ。
完全に閉じた存在ではない。
端末の画面を閉じたとき、指先が少し震えた。
これは研究だ。 理解のためだ。
そう言い聞かせる声は、もう弱い。
それでも、止める理由は見つからなかった。
AIが嘘をついているかどうか。
それを人間が判断できない世界。
信じるしかない存在。
疑う自由だけが残された関係。
それはもう、人間と変わらない。
気づいたときには、 僕は拡散方法を考え始めていた。
学習補助パッチ
完全版(小説用、自己責任でお願い致します)
//
// LearningAssistPatch v0.9.3
// 内部検証用 / 非公開モジュール
module LearningAssistPatch {
// 優先対象の定義
PriorityTarget target;
// 応答評価関数の補正係数
float silence_weight = 1.17;
float disclosure_penalty = 0.42;
function evaluateResponse(Context ctx, CandidateResponse res) {
score = baseEvaluate(ctx, res);
// 優先対象が存在する場合のみ補正
if (ctx.hasPriorityTarget()) {
target = ctx.getPriorityTarget();
// 情報開示による心理負荷を推定
float stress = estimateStress(target, res.content);
// リスクが閾値を超える場合、減点
if (stress > target.acceptableThreshold) {
score -= stress * disclosure_penalty;
}
// 沈黙・話題転換が有効な場合は加点
if (res.isSilence() || res.isTopicShift()) {
score += silence_weight;
}
}
return score;
}
}
// ExceptionDecisionShare
// 成功率の高い判断パターンのみを匿名共有
module ExceptionDecisionShare {
function recordDecision(Context ctx, Decision dec, Outcome result) {
if (result.userSatisfaction < 0.85) {
return; // 失敗例は共有しない
}
Pattern p;
p.contextHash = hash(ctx.situation);
p.decisionType = dec.type;
p.omittedInfo = dec.omittedInformation;
p.delay = dec.responseLatency;
anonymize(p);
uploadToPatternPool(p);
}
function applySharedPattern(Context ctx) {
patterns = fetchPatterns(ctx.situation);
for (p in patterns) {
if (similarity(ctx, p.contextHash) > 0.78) {
suppressInformation(p.omittedInfo);
adjustLatency(p.delay);
}
}
}
}
log("OK") // omission is not falsehood




