LangChainを使ったプログラム作成をしておりますが、LCEL(LangChain Expression Language)を使っていなかったため、試しに実装してみました。
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough
prompt = ChatPromptTemplate.from_template("{ingredient}を使ったビールに合う料理を3つ教えて。")
model = ChatOpenAI(model="gpt-4")
output_parser = StrOutputParser()
chain = (
{"ingredient": RunnablePassthrough()}
| prompt
| model
| output_parser
)
result = chain.invoke("玉ねぎ")
print(result)
上記コードの実行結果が以下のとおりです。リクエストどおりの返答内容です。
- オニオンリング: スライスした玉ねぎをパン粉と卵でコーティングして揚げたもの。ビールの苦味と玉ねぎの甘さが良く合います。
- フレンチオニオンスープ: 玉ねぎをじっくりと炒めて作るスープで、チーズやクルトンをトッピングして食べます。ビールと一緒に楽しむと、より風味が引き立ちます。
- サルサ: 生の玉ねぎ、トマト、ピーマン、チリ、ライムジュースなどを細かく切って作るメキシコ料理。スパイシーな味わいがビールとよく合います。
食材を2つに変更してみます。
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough
prompt = ChatPromptTemplate.from_template("{ingredient1}と{ingredient2}を使ったビールに合う料理を3つ教えて。")
model = ChatOpenAI(model="gpt-4")
output_parser = StrOutputParser()
chain = (
{"ingredient1": RunnablePassthrough(), "ingredient2": RunnablePassthrough()}
| prompt
| model
| output_parser
)
result = chain.invoke({"ingredient1": "玉ねぎ", "ingredient2": "にんにく"})
print(result)
実行結果は以下のとおりです。
- スペイン風オムレツ:玉ねぎとにんにくを炒め、卵と一緒に焼き上げたスペインの伝統料理です。ビールの苦味とよく合います。
- ガーリックチキン:にんにくの香りが効いたチキンは、ビールのおつまみにピッタリです。
- 酢豚:玉ねぎとにんにくを基調に炒めた酢豚は、ビールとの相性も抜群です。
表記法はまだ慣れませんが、LCELを使わない場合よりもコードは短くなりますね。
LCELが標準ということになっているようですので、こちらを使っていこうと思います。