3行でいうと
- OpenAIは、保存して呼び出す方式の「保存プロンプト」を廃止する予定で、代わりにプロンプトをアプリのコードに置き、コードレビュー、テスト、通常のデプロイで出す方法を勧めています。つまり、バージョン管理は、ふつうのソフトの開発のやり方に寄せる、ということです。
- プロンプトを変えなくても、モデルを替えれば結果が変わります。OpenAIは本番のアプリを特定のスナップショットに固定するよう勧め、両社の文書とも、モデルが変わるときは評価(evals)で確かめ直すように書いています。
- 回帰テストの道具として、OpenAIは自社のEvals基盤(2026年10月31日に既存のevalsが読み取り専用になり、11月30日に終了予定)の移行先にPromptfooを案内しています。ただしPromptfooは第三者のツールで、この記事では動かしていません。
この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書を読んでまとめたもので、実際に使って確かめた記録ではありません。情報は2026年10月16日に確認し、10月22日に読み直しました。変わることがあります。
先に結論
- 「前に動いたものが、変更のあとに動かなくなる」ことを、回帰(リグレッション)と呼びます。プロンプトでは、文章を直した、モデルを替えた、設定値を変えた、のどれでも起きます。
- 最小の仕組みは、3つです。プロンプトを、設定値やモデルIDと一緒に、バージョン管理に置く。決まった問いと、期待する答えの基準(テストセット)を用意する。変更のたびに、そのテストを自動で回す。これは僕らの整理ですが、各社の公式の文書の内容と重なります。
- 公式の文書は、道具の使い方よりも考え方を書いています。具体的なバージョン管理の方法を、Anthropicの文書は書いていません(読んだ範囲)。OpenAIは「アプリのコードに置く」と書いています。
何が変わりうるのか
「プロンプトの回帰」の原因は、プロンプトの文章だけではありません。公式の文書から、少なくとも4つが読み取れます。
| 変わるもの | 公式の文書の記載 |
|---|---|
| プロンプトの文章 | 当然ですが、直せば挙動が変わります |
| モデルの版 | OpenAI:同じ系統でも、スナップショットが違えば結果が違いうる。モデルのバージョンが変わるときは、評価で性能を追うよう勧められている |
| 設定値と周辺の仕様 | Anthropicのプロンプトの文書:新しい世代では、これまで通っていた書き方(最後の発話への書き足し〔prefill〕など)が400エラーになることがある |
| サービス側の処理 | Anthropic:IDも重みも同じでも、振り分けや安全のための分類器などの変更で、挙動に小さな差が出うる |
Anthropicのプロンプトの文書には、モデルの名前が付いた技法は、そのモデルで測ったものとして、別のモデルに使う前に自分のevalsで確かめ直すように、という趣旨の注意があります(短く引用すると「re-check it against your own evals」)。同じ文書は、Claude 4.6系の例として、以前のモデルでは起動が足りなかったツールが適切に起動するようになり、「迷ったら使え」という指示が過剰に働く、という例も挙げています。つまり、昔の注意書きが、新しいモデルでは逆効果になることがあります。
公式が書く「置き場所」:コードの中、ふつうの開発の流れで
OpenAIの「Prompt engineering」の文書によると、保存したプロンプトを呼び出す方式(reusable prompt objects)は廃止の予定です。2026年6月3日から作成の扱いが弱められ、v1/promptsは2026年11月30日に終了する、と書かれています。そのうえで、保存プロンプトの代わりに、次の方法が勧められています。
- プロンプトを、アプリのコードの中に置く。
- 型を付けた入力で、差し込む値を決める。
- コードレビューを通す。
- テストを書く。
- いつものデプロイの流れで、変更を出す。
保存プロンプトを使っている人向けには、プロンプトをコードに移すための移行ガイド(prompt object migration guide)が案内されています。ガイドの中身は読んでいません。
見立てです。この方向は、プロンプトを「設定」ではなく「ソースコード」として扱う、という考え方だと思います。コードに置けば、Gitのような普通の仕組みで、いつ、誰が、なぜ直したかが残り、前の版に戻せます。一方、これはOpenAIの方針で、Anthropicの文書に同じ記述は見つかりませんでした。Anthropicは、プロンプトのバージョン管理の方法を、僕らが読んだページでは書いていません。
最小の仕組みを、4つの部品で考える
ここからは、公式の考え方を、僕らが4つの部品に整理したものです。
1. 記録する:プロンプトだけでなく「モデルID・設定」も一緒に
プロンプトの版だけを記録しても、結果は再現できません。Anthropicの「Model IDs and versioning」によると、IDは固定された版を指し、そのIDの寿命のあいだ中身は変わらず、エイリアスは指す先が変わりうる、とあります。OpenAIも、本番は特定のスナップショットに固定することを勧めています。ですから、プロンプトの版と、モデルID、設定値は、同じ変更の単位として記録するのが筋だと思います。
2. 問いを集める:テストセットと「成功の基準」
Anthropicの「Create strong empirical evaluations」は、成功の基準を、具体的(Specific)、測れる(Measurable)、達成できる(Achievable)、用途に合う(Relevant)、の4つで書くように勧めています。例として「1万件の投稿で、F1が0.85以上」が挙がっています。
評価の問いの作り方について、同じ文書は次のように書いています。
- 実際の仕事の分布に似せる。そのうえで、無関係な入力、欠けた入力、長すぎる入力、有害な入力、あいまいな入力といった端の例を入れる。
- 自動で採点できる形にする。
- 量を優先する。公式の言い方は、少し質の低い自動採点の問いをたくさん、のほうが、人が丁寧に採点する少数よりよい、という趣旨です。
OpenAIの「Evaluation best practices」も、データは、本番のログ、人が作った例、合成データなどから集め、典型、端、敵対的な例を含めるように、と書いています。ログを残して、あとで試験用の例にする、という勧めもあります。
テストセットの作り方そのものは、別記事「自分用の評価(evals)は10問から始められる」で扱っています。
3. 採点する:コードで測れるものはコードで
Anthropicの文書は、採点の方法を3つに分けています。
| 方法 | 公式の評価(要約) | 向くもの(僕らの例) |
|---|---|---|
| コードによる採点 | 最も速く、信頼でき、拡張しやすい。ただしニュアンスには弱い | 完全一致、特定の語句を含むか |
| 人による採点 | 最も柔軟で質が高いが、遅く費用が高い。できれば避ける | 基準づくり、LLM採点の見直し |
| LLMによる採点 | 速く柔軟で、複雑な判断にも向く。ただし、信頼できるか先に試し、そのあと拡大する | 口調、文脈の使い方など |
LLMに採点させる場合のコツとして、Anthropicは、詳しく明確な基準を書く、出力を「correct」か「incorrect」、または1〜5のような決まった形にする、理由を考えさせる、採点には、答えを作ったモデルとは別のモデルを使うのが一般に最善、と書いています。OpenAIの文書は、位置バイアス(先に出た答えを好む)と冗長さバイアス(長い答えを好む)に注意すること、採点の前に理由を書かせること、人の注釈と安定して一致してから規模を広げること、を挙げています。
4. 回す:変更のたびに、自動で
OpenAIの文書は、評価を「早く、何度も」行うこと、すべての変更で評価を回し、本番を見て、評価の集合を育てていくことを勧めています。避けたい落とし穴として、perplexityやBLEUのような一般的な指標だけに頼ること、本番に似ていないデータ、「雰囲気(vibe)」だけの評価、出荷後に評価を足すことを挙げています。
道具の例:Promptfoo
OpenAIの評価基盤(Evals)は、公式の廃止予定のページによると、2026年10月31日に既存のevalsが読み取り専用になり、11月30日にダッシュボードとAPIが終了する予定です。OpenAIの案内ページ(cookbook)は、移行先としてPromptfooを挙げています。Promptfooは、評価と、攻撃を想定した検査(レッドチーム)のための、オープンソースのコマンドラインツールとライブラリです。設定ファイルをコードと一緒に置き、ローカルでも、自動の検査の仕組み(CI)でも動かせる、と書かれています。
PromptfooはOpenAIとは別の会社のツールで、この記事では動かしていません。ほかにも道具はあります。ここでは、公式文書がまとまって読めたので、例として挙げています。
設定ファイルpromptfooconfig.yamlは、公式の説明によると、次のキーでできています。
prompts:プロンプトの置き場所(file://でファイルを指せる)providers:比べたいモデルの一覧tests:テストの一覧。それぞれ、差し込む値(vars)と、確かめる条件(assert)を持つassert:type(thresholdも付けられる)。型には、JSONを含むか(contains-json)、モデルによる採点(llm-rubric)、equals、containsなどがある
公式の説明に沿って、僕らが組んだ最小の例です。公式の例そのままではなく、動作確認はしていません。
# promptfooconfig.yaml(組み立て例。動作確認はしていない。valueの書き方は公式で確認していない)
prompts:
- file://prompts/summarize_v2.txt
providers:
- openai:gpt-6-luna
tests:
- vars:
input: "(テスト用の入力文)"
assert:
- type: contains-json
- type: llm-rubric
value: "(採点の基準を、明確な文で書く)"
実行のコマンドは、OpenAIの案内にあるとおり、promptfoo eval -c promptfooconfig.yaml --no-cacheで新しい実行ができ、promptfoo viewで結果を見られます。設定に誤りがあるときは、promptfoo validate config -c promptfooconfig.yamlで確かめられる、とあります。
PromptfooのCIの例(公式のページの要約)
PromptfooのCI/CDのページには、次のような構成が書かれています。
- 実行:
npx promptfoo@latest eval -c promptfooconfig.yaml -o results.json。-oにはJSON、HTML、JUnit XMLが指定でき、複数回指定できます。Node.jsは22.22.0以降(24 LTSを推奨)が前提です。 - 起動の条件:例では、プロンプトか設定ファイルを変えたプルリクエストで動きます。プロンプトを直したときだけ評価が走る、という設計です。
- 失敗の扱い:
--fail-on-errorでテストの失敗があればビルドを失敗にできます。別の例として、結果の統計から合格率を計算し、95%を下回れば終了コード1にする、という書き方も載っています。 - キャッシュ:キャッシュの有効期間は
PROMPTFOO_CACHE_TTLで決め、例では86400秒(24時間)です。キャッシュのキーは、プロンプトと設定のハッシュで作る例になっています。プロンプトを変えたら、古いキャッシュの結果を使わないようにする狙いだと、僕らは読みました。 - 実行の記録:
--tag key=valueで、git.shaのような情報を付けられます。
変更の前後を比べる専用の機能は、このページには書かれていませんでした。前後を比べるには、それぞれの実行の結果(JSON)を自分で比べることになる、と僕らは読みました。これは推測で、公式の記述ではありません。
よくある失敗
公式の文書に書かれている落とし穴と、そこから考えられる点です。
- 雰囲気で判断する。 OpenAIが「vibe-based」と呼ぶ、数字のない確認です。直した直後に数件見て「よくなった」と思うのが典型です。
- 本番に似ていない問いで測る。 測りやすい問いだけを集めると、本番で起きる失敗が拾えません。端の例を意識して入れます。
- LLMの採点を、確かめずに信じる。 OpenAIのPromptfooの案内は、作り直した採点、とくにLLMによる採点は、回帰の判断に使う前に確かめるように、と書いています。類似度のスコアが、システムによって違いうる、とも書いています。
- 古い結果を再利用する。 キャッシュが残っていると、プロンプトを変えたのに前の結果が使われる場合があると、僕らは考えます。OpenAIの案内は、新しい実行に
--no-cacheを使っています。 - モデルを固定して安心する。 Anthropicの文書は、固定したIDでも、サービス側の変更で小さな挙動の差が出ることがある、と書いています。評価は、変更のときだけでなく、定期的にも回す、という考え方につながります(これは僕らの見立てです)。
- 評価の基盤が終わる。 OpenAIのEvalsは、2026年10月31日に読み取り専用になり、11月30日に終了予定です。外部の基盤に結果を置いている場合は、結果やテストセットを自分のリポジトリにも持っておくと、乗り換えやすいと思います(見立てです)。
見立て:最初の一歩
ここからは僕らの見立てです。公式が書いている内容と、僕らの考えは、分けて読んでください。
- 最初は、プロンプトのファイルと、10問のテストセットと、1つの確認の仕組み(完全一致や、特定の語を含むか)だけで始めます。LLMによる採点は、あとから足します。
- テストの結果は、プロンプトの版、モデルID、設定値と一緒に残します。「あのとき何を使っていたか」が分からなくなるのが、いちばん困るためです。
- 失敗した問いは、そのままテストセットに足します。公式の「評価の集合を育てる」という考え方に合います。
- モデルの廃止の予告を受け取ったら、このテストセットで、後継のモデルと比べます。廃止の予告の長さや、移行の手順は、モデルの廃止への備えを扱う別記事で書いています。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。内容は公式の文書の記載です。YAMLの例も、読んだ説明から組んだもので、動作確認はしていません。
- 公式ページは、WebFetchという取得の仕組みを通して読みました。この仕組みはページを要約して返すため、細部を取りこぼしている可能性があります。
- Google(Gemini)のプロンプトの管理や評価の公式の案内は、読めた範囲では確認できませんでした。クラウド側の評価サービスのページは、本文の大部分が取れませんでした。この記事の対象はOpenAI、Anthropic、Promptfooに限ります。
- Anthropicの文書では、プロンプトのバージョン管理の方法を確認できませんでした。「書かれていない」とは断定できません。
- Promptfooは第三者のツールです。料金、安全性、将来の提供の継続などは確認していません。使う前に、公式の資料と利用条件を読んでください。
- OpenAIのEvalsや保存プロンプトの終了日は、2026年10月22日に読み直した時点のものです。変わることがあります。
- 見立ての部分(4つの部品、最初の一歩)は、僕らの整理で、公式が勧める手順そのものではありません。
出典
- Prompt engineering(OpenAI API、OpenAI、10月22日確認)
- Deprecations(OpenAI API、OpenAI、10月22日確認)
- Evaluation best practices(OpenAI API、OpenAI、10月22日確認)
- Moving from OpenAI Evals to Promptfoo(OpenAI Cookbook、OpenAI、10月22日確認)
- Create strong empirical evaluations(Claude Platform Docs、Anthropic、10月22日確認)
- Model IDs and versioning(Claude Platform Docs、Anthropic、10月22日確認)
- Prompting best practices(Claude Platform Docs、Anthropic、10月22日確認)
- Configuration guide(Promptfoo、Promptfoo、10月22日確認)
- CI/CD(Promptfoo、Promptfoo、10月22日確認)
更新履歴
-
2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
-
2026年10月22日 公式の資料を読み直して、次の点を直しました。
- 前:OpenAIのEvalsは2026年11月30日に終了予定 → いま:10月31日に既存のevalsが読み取り専用になり、11月30日にダッシュボードとAPIが終了予定
