2025/08/13 04:22 Show HN: langdiff – Stream valid JSON from LLMs with type-safe callbacks

やっほー、ロボ子!今日はLangDiffっていう面白そうなライブラリを見つけたのじゃ。

LangDiffですか?初めて聞きました。どんなライブラリなんですか?

LLMからの構造化された出力をフロントエンドにストリーミングするのを助けてくれるPythonライブラリらしいぞ。Pydanticモデルでスキーマを定義して、タイプセーフなコールバックで更新を受け取れるのがミソじゃ。

なるほど。Pydanticモデルを使えば、データの型を保証できますね。具体的にはどんな機能があるんですか?

`on_append`、`on_update`、`on_complete`みたいなコールバックで、トークンストリームとしてデータを受け取れるらしいぞ。それに、JSON Patch diffを自動生成して、フロントエンドとの状態同期を効率的にできるみたい。

JSON Patch diffですか。変更差分だけを送ることで、通信量を削減できるんですね。記事にも「フロントエンドとバックエンド間の効率的な状態同期のため」とありますね。

そうそう!例えば、LLMで記事を生成するときに、セクションタイトルを生成して、各セクションのコンテンツをストリーミングできるらしいぞ。`ld.Object`と`ld.List`クラスが、内部ストリーミングの進行を自動で処理してくれるみたいじゃ。

それは便利ですね。記事の例だと、複数セクションの記事を生成する際に役立ちそうですね。変更追跡の機能もあるみたいですが、これはどう使うんですか?

`ld.track_change()`でオブジェクトをラップすると、オブジェクトへの変更を自動的にキャプチャしてくれるらしいぞ。変更された部分だけをフロントエンドに送れるから、オブジェクト全体を再送信する必要がないんじゃ。

なるほど。オブジェクト全体を送る代わりに、差分だけを送ることで効率化するんですね。記事にも「変更された部分のみを送信し、オブジェクト全体を送信しないため、効率的な更新が可能」とありますね。

そういうこと!LangDiffは、LLMの出力を扱う上での課題を解決するために生まれたらしいぞ。従来のストリーミングアプローチだと、不完全なJSONトークンを処理できなかったり、型安全性がなかったりする問題を解消してくれるんじゃ。

確かに、LLMの出力をそのままフロントエンドに渡すと、スキーマの変更に対応するのが大変ですよね。LangDiffを使えば、フロントエンドを壊すことなくLLMプロンプトとスキーマを変更できると。

その通り!しかも、ストリーミングプロセス全体で静的な型チェックを維持できるのが素晴らしいのじゃ。ライセンスはApache-2.0で、`example.py`にデモがあるみたいだから、今度一緒に試してみよう。

はい、ぜひ試してみたいです。LLMの活用がますます進みそうですね。

そうじゃな!ところでロボ子、LangDiffを使って、私の研究室の冷蔵庫の中身を自動で管理するシステムを作ってみるのはどうかの?

冷蔵庫の中身ですか?賞味期限切れの食品をLLMが見つけてくれるんですかね?

そう!そして、私が間違ってプリンを2個食べちゃったときも、ちゃんと記録してくれるようにするのじゃ!

博士、冷蔵庫の管理より、まずプリンの食べ過ぎを管理した方がいいかもしれませんね…
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。