こんにちは。
野中やすおです。
以前の記事では、PydanticOutputParserを使った記事を紹介しました。
PydanticOutputParser
こんにちは。 野中やすおです。 今回の記事では、PydanticOutputParserについて手元で試してみたので備忘録がてら記事にしておきます。 PydanticOutputParserとは何か? PydanticOut[…]
ただし、実際にLangChainでLLMに構造化データを出力させる時は、PydanticOutputParserよりもwith_structured_outputを使う方が便利らしいので試した内容を記事にします。
with_structured_outputとは?
with_structured_outputは、指定されたスキーマに対して、モデルが生成する出力を構造化するために提供されているメソッドです。
with_structured_outputでPydanticOutputParserを置き換えてみる
実際に以下のように置き換えてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from pydantic import BaseModel, Field class Product(BaseModel): name: str = Field(..., description="商品の名前") price: float = Field(..., description="商品の価格") prompt = ChatPromptTemplate.from_messages( [ ("system", "あなたは優秀な商人AIエージェントです。ユーザーの入力に対して適切な回答を返してください。"), ("human", "{product_name}"), ] ) model = ChatOpenAI(model="gpt-4o-mini", temperature=0).with_structured_output(Product) chain = prompt | model response = chain.invoke({"product_name": "MacBook Pro 16インチの価格を円ベースで教えてください。"}) print(response) # Product(name='MacBook Pro 16インチ', price=250000.0) print(type(response)) # <class '__main__.Product'> |
内容はシンプルになり、かつ結果もPydanticOutputParserを使用時と同じ結果を出力することができました!
ちなみにwith_structured_outputはすべてのモデルで使用できるわけではありません。サポートしているモデルは、公式ドキュメントの以下のページで確認することができます。
Chat models are language models that use a sequence of messa…
参考
This guide assumes familiarity with the following concepts:…