柔軟な関数呼び出しのためのノードとエッジ定義

LangChainで設計するエージェント型システム

Dilini K. Sumanapala, PhD

Founder & AI Engineer, Genverv, Ltd.

マルチツールのワークフロー構築

   

  • 利用可能な複数のツール

    • 回文
    • 歴史的出来事
    • Wikipedia

チャットボットのフルワークフロー

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

チャットボットワークフローのチャットボットとツールの各ノード。

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

    • ツール呼び出しを確認

停止関数のルールを強調。

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

    • ツール呼び出しを確認
    • なければ会話を終了

ワークフロー内のENDルールを強調

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

    • ツール呼び出しを確認
    • なければ会話を終了    
  • 動的ツールコーラーを作成

    • ツール呼び出しがあればツール応答を返す

Call_model のルールを強調。

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

    • ツール呼び出しを確認
    • なければ会話を終了    
  • 動的ツールコーラーを作成

    • ツール呼び出しがあればツール応答を返す
    • ツール呼び出しがなければ、チャットボットノードのみで LLM を呼び出す

Call_model のルールを強調。

LangChainで設計するエージェント型システム

ワークフロー関数の定義

   

  • 停止関数を作成

    • ツール呼び出しを確認
    • なければ会話を終了    
  • 動的ツールコーラーを作成

    • ツール呼び出しがあればツール応答を返す
    • ツール呼び出しがなければ、チャットボットノードのみで LLM を呼び出す
  • フルグラフをコンパイル

Call_model のルールを強調。

LangChainで設計するエージェント型システム

停止条件関数を作成

from langgraph.graph import MessagesState, START, END


# 停止関数の状態を MessagesState で定義 def should_continue(state: MessagesState):
# 最後のメッセージを取得 last_message = state["messages"][-1]
# 最後のメッセージにツール呼び出しがあるか確認 if last_message.tool_calls: return "tools"
# ツール呼び出しがなければ会話を終了 return END
LangChainで設計するエージェント型システム

動的ツールコーラーを作成

# 履歴から最後のメッセージを取得
def call_model(state: MessagesState):

last_message = state["messages"][-1]
# 最後のメッセージにツール呼び出しがあれば、その応答を返す if isinstance(last_message, AIMessage) and last_message.tool_calls:
# ツール呼び出しのメッセージを返す return {"messages": [AIMessage(content=last_message.tool_calls[0]["response"])]}
# それ以外は通常の LLM 応答に進む return {"messages": [model_with_tools.invoke(state["messages"])]}
LangChainで設計するエージェント型システム

グラフを作成

workflow = StateGraph(MessagesState)












LangChainで設計するエージェント型システム

グラフを作成

workflow = StateGraph(MessagesState)


# チャットボットとツールのノードを追加 workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)

チャットボットとツールのノード。

LangChainで設計するエージェント型システム

グラフを作成

workflow = StateGraph(MessagesState)


# チャットボットとツールのノードを追加 workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# START ノードをチャットボットに接続 workflow.add_edge(START, "chatbot")

START ノードをチャットボットに追加。

LangChainで設計するエージェント型システム

グラフを作成

workflow = StateGraph(MessagesState)


# チャットボットとツールのノードを追加 workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# START ノードをチャットボットに接続 workflow.add_edge(START, "chatbot")
# 条件を定義し、チャットボットにループバック workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])

条件を追加したグラフ。

LangChainで設計するエージェント型システム

グラフを作成

workflow = StateGraph(MessagesState)


# チャットボットとツールのノードを追加 workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# START ノードをチャットボットに接続 workflow.add_edge(START, "chatbot")
# 条件を定義し、チャットボットにループバック workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])
workflow.add_edge("tools", "chatbot")

フルグラフのワークフロー。

LangChainで設計するエージェント型システム

メモリの追加

# メモリを設定し、ワークフローをコンパイル
memory = MemorySaver()

app = workflow.compile( checkpointer=memory)
display(Image(app.get_graph() .draw_mermaid_png()))

フルグラフのワークフロー。

LangChainで設計するエージェント型システム

練習しましょう!

LangChainで設計するエージェント型システム

Preparing Video For Download...