エンジニアリングとお金の話

都内で働くエンジニアの日記です。

langchainのLLMとチェーンの使い分けについて

【SPONSORED LINK】

langchainには様々なモジュールが存在するが各々の関係性が良く分かって無かったので調査した。

langchainのモジュール

主なモジュールは以下の通り

  • LLM : 言語モデルによる推論の実行。
  • プロンプトテンプレート : ユーザー入力からのプロンプトの生成。
  • チェーン : 複数のLLMやプロンプトの入出力を繋げる。
  • エージェント : ユーザー入力を元にしたチェーンの動的呼び出し。
  • メモリ : チェーンやエージェントで状態を保持。

良く分からなかったこと

LLMでもチェーンでも同じような処理が出来るので?となっていた。

LLMで実行

from dotenv import load_dotenv
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

load_dotenv()

llm = OpenAI()
template = PromptTemplate(input_variables=["taste"], template="{taste}朝ごはん")
print(llm(prompt=template.format(taste="日本の")))

実行結果

日本の朝ごはんには、白米やご飯のおかずとして、味噌汁や煮物、おかか、魚介類、野菜などがあります。お弁当やおでんなどもあります。また、朝ごはんには、お茶や味噌汁、卵焼きなどの日本風のおかずを組み合わせて食べることもあります。特に、日本の小さな家庭では、白米を主食として、ご飯を炊いて、味噌汁や煮物などをご飯と一緒に食べる

チェーンで実行

from dotenv import load_dotenv
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

load_dotenv()

template = PromptTemplate(input_variables=["taste"], template="{taste}朝ごはん")
chain = LLMChain(llm=OpenAI(), prompt=template)
print(chain.run("日本の"))

実行結果

日本の朝ごはんは、ご飯、味噌汁、煮物、おにぎり、サラダ、漬物などがあります。また、卵料理や魚料理などもあります。

複数のLLMとプロンプトの入出力を繋げたい場合はチェーンを使う

チェーンを使用することでLLMとプロンプトを1つのチェーンとして論理的にまとめることが出来る。チェーンは名前の通り別のチェーンとつなげる事ができるので、例えばチェーン1で出力した結果をチェーン2で使用したい場合などは、チェーンにて処理を構築すると良い。