LangGraph Supervisor¶
langgraph_supervisor.supervisor ¶
| 函数 | 描述 |
|---|---|
create_supervisor |
创建一个多代理主管。 |
create_supervisor ¶
create_supervisor(
agents: list[Pregel],
*,
model: LanguageModelLike,
tools: list[BaseTool | Callable] | ToolNode | None = None,
prompt: Prompt | None = None,
response_format: StructuredResponseSchema
| tuple[str, StructuredResponseSchema]
| None = None,
pre_model_hook: RunnableLike | None = None,
post_model_hook: RunnableLike | None = None,
parallel_tool_calls: bool = False,
state_schema: StateSchemaType | None = None,
context_schema: Type[Any] | None = None,
output_mode: OutputMode = "last_message",
add_handoff_messages: bool = True,
handoff_tool_prefix: str | None = None,
add_handoff_back_messages: bool | None = None,
supervisor_name: str = "supervisor",
include_agent_name: AgentNameMode | None = None,
**deprecated_kwargs: Unpack[DeprecatedKwargs],
) -> StateGraph
创建一个多代理主管。
| 参数 | 描述 |
|---|---|
agents
|
要管理的代理列表。一个代理可以是 LangGraph 的 |
model
|
用于主管的语言模型 |
工具
|
用于主管的工具 |
prompt
|
用于主管的可选提示。可以是以下之一
类型: |
response_format
|
一个可选的模式,用于最终的主管输出。 如果提供,输出将被格式化以匹配给定的模式,并返回在 如果不提供, 可以作为以下形式传入 重要
注意
类型: |
pre_model_hook
|
一个可选的节点,用于在主管代理中的 LLM 节点(即调用 LLM 的节点)之前添加。对于管理长消息历史(例如消息修剪、摘要等)很有用。模型前钩子必须是一个可调用对象或一个可运行对象,它接收当前图状态并以如下形式返回状态更新 重要 必须提供
类型: |
post_model_hook
|
一个可选的节点,用于在主管代理中的 LLM 节点(即调用 LLM 的节点)之后添加。对于实现人在环路、护栏、验证或其他后处理很有用。模型后钩子必须是一个可调用对象或一个可运行对象,它接收当前图状态并返回状态更新。
类型: |
parallel_tool_calls
|
是否允许主管 LLM 并行调用工具(仅限 OpenAI 和 Anthropic)。用此来控制主管是否可以同时将任务移交给多个代理。 如果为 如果为 重要 目前仅 OpenAI 和 Anthropic 模型支持此功能。要为其他提供商控制并行工具调用,请向系统提示中添加关于工具使用的明确说明。
类型: |
state_schema
|
用于主管图的状态模式。
类型: |
context_schema
|
指定将传递给工作流的上下文对象的模式。 |
output_mode
|
用于在多代理工作流中将受管理代理的输出添加到消息历史记录的模式。可以是以下之一
类型: |
add_handoff_messages
|
发生移交时,是否向消息历史中添加一对
类型: |
handoff_tool_prefix
|
移交工具的可选前缀(例如, 如果提供,移交工具将被命名为 如果不提供,移交工具将被命名为
类型: |
add_handoff_back_messages
|
当将控制权返回给主管时,是否向消息历史中添加一对
类型: |
supervisor_name
|
主管节点的名称。
类型: |
include_agent_name
|
用于指定如何向底层主管 LLM 公开代理名称。
类型: |
示例
from langchain_openai import ChatOpenAI
from langgraph_supervisor import create_supervisor
from langgraph.prebuilt import create_react_agent
# Create specialized agents
def add(a: float, b: float) -> float:
'''Add two numbers.'''
return a + b
def web_search(query: str) -> str:
'''Search the web for information.'''
return 'Here are the headcounts for each of the FAANG companies in 2024...'
math_agent = create_react_agent(
model="openai:gpt-4o",
tools=[add],
name="math_expert",
)
research_agent = create_react_agent(
model="openai:gpt-4o",
tools=[web_search],
name="research_expert",
)
# Create supervisor workflow
workflow = create_supervisor(
[research_agent, math_agent],
model=ChatOpenAI(model="gpt-4o"),
)
# Compile and run
app = workflow.compile()
result = app.invoke({
"messages": [
{
"role": "user",
"content": "what's the combined headcount of the FAANG companies in 2024?"
}
]
})
langgraph_supervisor.handoff ¶
| 函数 | 描述 |
|---|---|
create_handoff_tool |
创建一个可以将控制权移交给所请求代理的工具。 |
create_forward_message_tool |
创建一个主管可以用来按名称转发工作代理消息的工具。 |
create_handoff_tool ¶
create_handoff_tool(
*,
agent_name: str,
name: str | None = None,
description: str | None = None,
add_handoff_messages: bool = True,
) -> BaseTool
创建一个可以将控制权移交给所请求代理的工具。
| 参数 | 描述 |
|---|---|
agent_name
|
要移交控制权的代理的名称,即多代理图中的代理节点名称。代理名称应简单、清晰且唯一,最好使用蛇形命名法(snake_case),尽管您只受限于 LangGraph 节点接受的名称以及 LLM 提供商接受的工具名称(工具名称将类似于:
类型: |
name
|
用于移交的工具的可选名称。如果不提供,工具名称将是
类型: |
描述
|
移交工具的可选描述。如果不提供,描述将是
类型: |
add_handoff_messages
|
是否将移交消息添加到消息历史中。如果为
类型: |