如何让编码代理来写你的标注配置
大模型编写配置时最常见的失败,是臆造出一个并不存在的选项。一份 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 | 159 个配置键、61 种标注类型、24 种显示类型,以及按类型的条件约束 |
| OpenAPI 3.1 | 419 条路径、456 个操作 |
llms.txt | 经过整理的文档索引 |
按类型的条件约束比键列表更重要:正是它们能在服务器之前,告诉代理一个 constant_sum 方案需要 labels。
让规格由代码生成
如果你是这个工具的维护者而非使用者,那么让这一切成立的关键性质是:模式是由服务器用于校验的同一批注册表生成的,并且一旦漂移,CI 就会失败。
一份手工维护的模式比没有更糟。它会被信任,而在有人新增了一种类型却没更新它的第一时间,它就是错的。
我们在本站是怎么做的
本站自己的配置构建器也是这样构建的。它把 Potato 的注册表读入一份提交进仓库的规格文件,按其映射每一个字段,并丢弃注册表中不存在的任何内容。随后有一套测试装置,会把每一份生成的配置——每种标注类型一份,外加每一个起步模板——都送进 validate_cli --strict。
这套装置抓出了真实存在的缺陷:一个并不存在的标注类型、三个缺少必填字段的方案,以及一个重复的 YAML 键,后者会悄悄丢弃已授权用户列表。仅靠阅读输出,这些都看不出来。