from langchain.tools import toolfrom langchain.agents import create_agent# Create a subagentsubagent = create_agent(model="anthropic:claude-sonnet-4-20250514", tools=[...])# Wrap it as a tool@tool("research", description="Research a topic and return findings")def call_research_agent(query: str): result = subagent.invoke({"messages": [{"role": "user", "content": query}]}) return result["messages"][-1].content# Main agent with subagent as a toolmain_agent = create_agent(model="anthropic:claude-sonnet-4-20250514", tools=[call_research_agent])
from langchain.tools import toolfrom langchain.agents import create_agent# Create a sub-agentsubagent = create_agent(model="...", tools=[...])# Wrap it as a tool #@tool("subagent_name", description="subagent_description")def call_subagent(query: str): result = subagent.invoke({"messages": [{"role": "user", "content": query}]}) return result["messages"][-1].content# Main agent with subagent as a tool #main_agent = create_agent(model="...", tools=[call_subagent])
from langchain.tools import toolfrom langchain.agents import create_agent# Sub-agents developed by different teamsresearch_agent = create_agent( model="gpt-4.1", prompt="You are a research specialist...")writer_agent = create_agent( model="gpt-4.1", prompt="You are a writing specialist...")# Registry of available sub-agentsSUBAGENTS = { "research": research_agent, "writer": writer_agent,}@tooldef task( agent_name: str, description: str) -> str: """Launch an ephemeral subagent for a task. Available agents: - research: Research and fact-finding - writer: Content creation and editing """ agent = SUBAGENTS[agent_name] result = agent.invoke({ "messages": [ {"role": "user", "content": description} ] }) return result["messages"][-1].content# Main coordinator agentmain_agent = create_agent( model="gpt-4.1", tools=[task], system_prompt=( "You coordinate specialized sub-agents. " "Available: research (fact-finding), " "writer (content creation). " "Use the task tool to delegate work." ),)
from langchain.agents import AgentStatefrom langchain.tools import tool, ToolRuntimeclass CustomState(AgentState): example_state_key: str@tool( "subagent1_name", description="subagent1_description")def call_subagent1(query: str, runtime: ToolRuntime[None, CustomState]): # Apply any logic needed to transform the messages into a suitable input subagent_input = some_logic(query, runtime.state["messages"]) result = subagent1.invoke({ "messages": subagent_input, # You could also pass other state keys here as needed. # Make sure to define these in both the main and subagent's # state schemas. "example_state_key": runtime.state["example_state_key"] }) return result["messages"][-1].content