LangChainで設計するエージェント型システム
Dilini K. Sumanapala, PhD
Founder & AI Engineer, Genverv, Ltd.







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
# 履歴から最後のメッセージを取得 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"])]}
workflow = StateGraph(MessagesState)
workflow = StateGraph(MessagesState)# チャットボットとツールのノードを追加 workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)

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

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 = 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")

# メモリを設定し、ワークフローをコンパイル memory = MemorySaver()app = workflow.compile( checkpointer=memory)display(Image(app.get_graph() .draw_mermaid_png()))
LangChainで設計するエージェント型システム