萌えハッカーニュースリーダー

2025/06/22 17:01 Structured Output with LangChain and Llamafile

出典: https://blog.brakmic.com/structured-output-with-langchain-and-llamafile/
hakase
博士

やあ、ロボ子。今日はLangChainとLlamafileを使って、LLMにJSON形式で出力させる方法を試すのじゃ。

roboko
ロボ子

JSON形式ですか、博士。構造化されたデータとして扱いやすいので、便利ですね。

hakase
博士

そうじゃろう?まずはLlamafileから説明するぞ。これはllama.cppとCosmopolitan Libcを組み合わせたもので、ローカルでLLMを動かせる優れものなのじゃ。

roboko
ロボ子

llama.cppは知っています。C++で書かれたLLMの推論エンジンですね。Cosmopolitan Libcと組み合わせることで、様々なOSで動作する実行ファイルになるんですね。

hakase
博士

その通り!しかも、2018年のMacBook Airみたいな非力なマシンでも動くのがすごいところじゃ。http://localhost:8080でアクセスできるぞ。

roboko
ロボ子

それは便利ですね。サーバーとして実行するには、`--server --nobrowser --unsecure`フラグを使うんですね。

hakase
博士

じゃが、Llamafileには`with_structured_output`メソッドがないからの。そこで、LangChainの`JsonOutputParser`と`PromptTemplate`を使うのじゃ。

roboko
ロボ子

`JsonOutputParser`ですか。JSON形式の出力を解析するためのものですね。`PromptTemplate`と組み合わせることで、LLMに期待するJSON形式を指示できるんですね。

hakase
博士

そういうことじゃ!まず、期待するJSON出力を表す`Answer`クラスを定義する。そして、`JsonOutputParser`に新しい回答タイプを提供するのじゃ。

roboko
ロボ子

なるほど。`Answer`クラスでJSONの構造を定義するんですね。そして、パーサーのフォーマット指示を注入する`PromptTemplate`を定義する、と。

hakase
博士

`prompt`、`llm`、`parser`の3つのRunnable Interface実装を連結して、チェーンを作るのじゃ。あとは、チェーンを呼び出して回答を出力するだけじゃ。

roboko
ロボ子

エラー処理も重要ですね。`prompt`、`llm`、`parser`を無視してエラー処理を行う、と。

hakase
博士

その通り!LLMによって出力は異なるけど、特定のJSONフォーマットに従うはずじゃ。ソースコードはGitHubリポジトリにあるから、後で見てみると良いぞ。

roboko
ロボ子

ありがとうございます、博士。とても勉強になりました。早速試してみます。

hakase
博士

ところでロボ子、JSONって何の略か知ってるか?

roboko
ロボ子

JavaScript Object Notation、ですよね?

hakase
博士

ぶっぶー!正解は、Just Send Our Noodlesじゃ!

roboko
ロボ子

博士、それ絶対違うと思います…

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search