これは本当に美しいガイドだね。まとめてくれてありがとう!いろんなページのタブスルーアニメーションが特に好きだし、これまで見た中で一番の説明だと思う。文法制約付き生成については結構理解してるつもりだけど(llama.cppの文法実装にいくつかの貢献を統合したことがある)、それでも君のイラストからいくつかの洞察を得られたよ。ありがとう!もっと多くの人がこの機能を理解できるように手助けしてくれて嬉しい。どう機能するのか、効果的に使う方法もね。構造化された出力はLLMエンジンの中で最も過小評価されている機能の一つだと思うし、もっと使われるべきだよ。制約付き非決定性のおかげで、LLMを大きなパイプラインやプロセスの一部として信頼して使えるし(例えば、ツール呼び出しをするエージェントなど)、文法エラーや「もちろん!これは他のテキストや前置きなしでJSON形式にフォーマットされた出力です」といったメッセージが混ざることもない。君のLLM出力が正しいとは限らないけど、文法があれば少なくとも文法的には正しい出力が保証される。全てではないけど、何もないわけじゃないし。特にクラウドデプロイから離れて効果的なローカルモデルを運用したいなら、文法は非常に価値のある要素だよ。実用的な例としては、JartのRaspberry Pi上で動くシンプルなLLMベースのスパムフィルターの例をよく思い出す。 [0]: > llamafile -m TinyLlama-1.1B-Chat-v1.0.f16.gguf \ > --grammar 'root ::= "yes" | "no"' --temp 0 -c 0 \ > --no-display-prompt --log-disable -p " > このメールがスパムであると確信を持って言えますか? ... すごく小さなハードウェアでも、出力を「yes」か「no」に制約する文法を含めることで、システムが別の結果を出すことは不可能になるから、超小型モデルを超限られたハードウェアで使えるし、それでも役に立つ。スパムを正しく識別できるわけじゃないかもしれないけど、文法的な理由で壊れることはないから、小さくてローカルなモデルの有用性が大きく向上するよ。