如何讓編碼代理來寫你的標註配置
大模型編寫配置時最常見的失敗,是臆造出一個並不存在的選項。一份 JSON Schema 加一個校驗器,能把這種執行期意外變成編輯器裡的報錯。
大模型編寫標註配置時最常見的失敗,是臆造出一個並不存在的選項。 模型產出了看似合理的內容,伺服器要麼忽略這個未知的鍵、要麼拒絕整個檔案,而錯誤會在幾分鐘後以"沒人配置過的行為"這種形式浮現。一份機器可讀的模式,把這個失敗提前到了書寫的那一刻。
加上模式宣告行
在配置檔案頂部加一行:
# yaml-language-server: $schema=https://potatoannotator.readthedocs.io/en/latest/schemas/potato-config.schema.json這會在 VS Code、JetBrains 系列 IDE、Zed 與 Helix 中開啟即時校驗。一個臆造出來的 annotation_type 會在你輸入時被標下劃線,而補全會給出真實存在的那些。
Potato 在每一份示例配置中都帶上這一行,其配置構建器在每次下載時也會寫入。
在 CI 中校驗
check-jsonschema --schemafile \
https://potatoannotator.readthedocs.io/en/latest/schemas/potato-config.schema.json \
config.yaml這份 JSON Schema 對未知的鍵刻意保持寬鬆,因為伺服器對它們只給出警告,而更嚴格的模式會拒絕掉本可工作的配置。因此請把它與項目自帶的校驗器配合使用,後者會報告這些鍵:
python -m potato.validate_cli --strict config.yaml--strict 會把未知的鍵視為致命錯誤。正是它能抓出像 annotaton_type 這樣的拼寫錯誤,而寬鬆的模式會默默接受。
把規格交給代理
如果你要把 Claude Code、Codex 或 Cursor 指向某個工具,生成出來的規格比散文式文件更有價值,因為它們描述的是程式碼今天的實際行為,而不是某人記得的內容:
| 製品 | 覆蓋內容 |
|---|---|
| 配置 JSON Schema | 160 個配置鍵、61 種標註類型、24 種顯示類型,以及按類型的條件約束 |
| OpenAPI 3.1 | 449 條路徑、486 個操作 |
llms.txt | 經過整理的文件索引 |
按類型的條件約束比鍵列表更重要:正是它們能在伺服器之前,告訴代理一個 constant_sum 方案需要 labels。
讓規格由程式碼生成
如果你是這個工具的維護者而非使用者,那麼讓這一切成立的關鍵性質是:模式是由伺服器用於校驗的同一批註冊表生成的,並且一旦漂移,CI 就會失敗。
一份手工維護的模式比沒有更糟。它會被信任,而在有人新增了一種類型卻沒更新它的第一時間,它就是錯的。
我們在本站是怎麼做的
本站自己的配置構建器也是這樣構建的。它把 Potato 的登錄檔讀入一份提交進倉庫的規格檔案,按其對映每一個欄位,並丟棄登錄檔中不存在的任何內容。隨後有一套測試裝置,會把每一份生成的配置——每種標註類型一份,外加每一個起步模板——都送進 validate_cli --strict。
這套裝置抓出了真實存在的缺陷:一個並不存在的標註類型、三個缺少必填欄位的方案,以及一個重複的 YAML 鍵,後者會悄悄丟棄已授權使用者列表。僅靠閱讀輸出,這些都看不出來。