seed 固定の経緯を読むと、これは「厳密な deterministic pipeline を設計した結果」ではなく、出力の揺れに対する実務的不満に押されて入った安定化策 と見るのが適切である。seed-reproducibility-historyより

1. 固定の出発点は、統計的厳密性より「同じものがもう一度出てほしい」

2025-05 の Slack / issue 群では、「同じ入力でも結果が毎回違う」「前に良かった結果を再現できない」という不満が主で、問題設定はかなりユーザ実務寄りである。
ここで欲されていたのは、数学的に厳密な再現性というより、人間が見て“同じレポートだ”と感じられる程度の安定性 だった。seed-reproducibility-historyより

そのため UMAP(random_state=42)KMeans(..., random_state=42) は、「揺れそうなところはとりあえず固定する」という自然な応答になっている。

2. ただし導入当時から、後段固定だけでは不十分だと理解されていた

重要なのは、2025-05 の時点で既に「OpenAI の seed を固定しても決定的ではない」「extraction 結果そのものが変わりうる」という認識が出ていることだ。
つまり開発側は、seed 固定が再現性問題の完全解ではない と分かったうえで、それでも局所的な改善として採用していた。seed-reproducibility-historyより

この意味で、後の PR #810 は昔の判断を単純に否定したのではなく、当時から残っていた留保を前景化したものと言える。

3. 本当に欲しかったのは seed 固定より「比較可能性」だった

同じ時期に「UMAP を固定したい」「一度作った UMAP を使い回したい」という話が出ている。これは seed 固定の別表現であり、開発側が求めていたのは単なる乱数固定ではなく、

  • 前回のレポートと今回のレポートを比較したい
  • 散布図の見た目が大きく飛ばないでほしい
  • 良かった配置を再利用したい

という 座標系の継続性 だった。seed-reproducibility-historyより

したがって、この経緯を「再現性か並列化か」という二択だけで読むと少し浅い。裏には「レポートの比較可能性をどう作るか」という別の要求がある。

4. PR #810 は固定撤廃ではなく、再現性要求の位置づけ変更

2025-07 以降は、「前段が非決定的なのに後段だけ seed 固定しても得るものが薄い」「そのわりに UMAP の並列性を失っている」という見方が強くなる。
PR #810 の案は、この再評価を受けて 再現性を default から opt-in に落とす ものだった。seed-reproducibility-historyより

ここで重要なのは、再現性要求そのものを消したわけではない点である。embedding 再利用など比較可能性が重要なケースでは、なお再現性フラグが必要だとされている。
つまり判断は「再現性は不要」ではなく、一般ケースの default に置くほど強い要件ではない へ変わった。

5. 新規コントリビュータ向けには、「seed 固定はアルゴリズムの正しさの証拠ではない」と理解した方がよい

現行コードや歴史を読むと、random_state=42 は「このパイプラインは再現性設計が完成している」という印ではない。
むしろ、

  • upstream の LLM / extraction は非決定的
  • downstream の UMAP / k-means は見た目の揺れを少しでも抑えるため固定されていた
  • しかしその固定は並列性と衝突する

という 現実的な折衷の痕跡 である。source-code / seed-reproducibility-historyより

この理解を持つと、gotchas にある UMAP warning や、PR #810 の方向転換も自然に読める。

Open Questions

  • 比較可能性を本当に欲しいなら、seed 固定より UMAP モデル再利用や別の座標安定化手法の方が本筋ではないか
  • 再現性オプションと並列性オプションを UI / API 上でどう表現するのが利用者に誤解を与えにくいか

Updates

  • 2026-05-18: seed 固定の経緯を「再現性要求の発生 → 限界認識 → 並列性との再評価」という流れで整理