アシスタントで設計する
仕様モードは API を設計する場所です。AI チャットをライブの文書とプレビューと組み合わせ、自然言語で意図を説明しながら、実際に起きる変更を完全にコントロールできます。
承認ループ
モデルは文書を直接編集しません。このループは意図的に明示的に作られています。
you describe an intent
|
the model reads current state and proposes operations
|
the host validates the proposal
|
you review a patch card and Apply or Reject
|
the change is merged into the document
この分離は重要な設計判断です。モデルは意図を理解し構造を提案するのが得意で、ホストは確定的で各操作を検証し、あなたがすべての変更を承認します。あなたが確認するまで、提案が適用されたとみなされることはありません。
パッチカード
パッチカードは変更を要約し、パスを追加する場合のように正確な操作を列挙します。
{
"type": "patch",
"summary": "Add GET /products endpoint",
"ops": [
{ "op": "add", "path": ["paths", "/products"], "value": { "get": {} } }
],
"affects": { "paths": ["/paths/~1products"], "resources": ["Product"] }
}
パスセグメントは JSON Pointer 文字列ではなく配列要素です。全新のパスを追加するときのターゲットは ["paths", "/products"] で、親コンテナは自動的に作られます。
既存操作へのきめ細かい編集
既存の操作を編集するとき、アシスタントは操作全体を再送しません。それでは再表示しなかったすべてのフィールドが消えてしまいます。代わりに、変更した部分だけに触れる小さな操作を生成し、操作の内部に入ります。
- クエリパラメータを追加する:
{ "op": "add", "path": ["paths", "/products", "get", "parameters", "-"], "value": {} }
- レスポンススキーマを拡張する:
{ "op": "replace", "path": ["paths", "/products", "get", "responses", "200", "content", "application/json", "schema", "properties", "total"], "value": { "type": "integer" } }
- 単一フィールドを変更する:
{ "op": "replace", "path": ["paths", "/products", "get", "summary"], "value": "..." }
配列は全体を再送するのではなく "-" で追記します。パラメータは (in, name) をキーとするため、既存パラメータが重複することはありません。ホストは提案値を現在の操作にマージし、省略したすべてを保持します。
これこそ、反復的な refine を信頼できるものにする理由です。「ここに limit パラメータを足して」「name を必須にして」と言うと、そのフィールドだけが変わり、操作の残りは不変です。