LLM の応答を返す関数を作成する
あなたのチャットボットには、すでに多くのツールが用意されています。ただし、チャットボットに追加したツールと無関係な質問には、LLM 単体で応答させることも依然として有用です。ここでは、会話の最後のメッセージにツール呼び出しが含まれているかを確認する関数を定義します。もしツール呼び出しがなければ、チャットボットは単純に LLM を使って回答を返します。ユーザーからの問い合わせとチャットボットの応答の両方を扱えるように、次のモジュールがインポートされています。
from langchain_core.messages import AIMessage, HumanMessage
この演習はコースの一部です
LangChainで設計するエージェント型システム
演習の手順
"messages"を使ってstateから最後のメッセージにアクセスします。last_messageがAIMessageであり、かつそのメッセージがtool_callsを持つかどうかを確認する条件文を書きます。- 条件を満たす場合は、
last_messageのtool_callsから最初の"response"を取り出し、AIMessageのcontentフィールドに設定して返します。 - 条件を満たさない場合は、
model_with_toolsに.invoke()を適用し、state["messages"]から会話履歴全体を渡してレスポンスを生成します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Extract the last message from the history
def call_model(state: MessagesState):
____ = ____["____"][____]
# If the last message has tool calls, return the tool's response
if isinstance(____, ____) and ____.____:
# Return only the messages from the tool call
return {"messages": [____(content=____.____[0]["____"])]}
# Otherwise, proceed with a regular LLM response
return {"messages": [____.____(____["____"])]}