Open1

LLM で JSON 作らせたときにバリデーションに引っかかるようなケースで上手いことフォールバックする方法

wattaiwattai

背景

Pydantic を使って JSON Schema を作成して、それを LLM へ与えるプロンプトに記載することで

class Table(BaseModel):
    foo: int

という型にあう出力を LLM から得ようとすることがあるかと思います。このときに LLM が

{
    "foo": "123"
}

などと出力してきて、型が異なるためバリデーションエラーが起こってしまう場合の対処法を GitHub Gist に書き留めました。

GitHub Gist

Structured Outputs

これが使えるときはこれを使えばそもそもこのような問題は起こらない。しかし、DeepseekV3 や Gemini だと対応していなかったり、対応状況が実用に耐えるレベルでなかったりするので、そのときはこの方法でフォールバックさせると良いかも。

参考

https://github.com/pydantic/pydantic/discussions/7867