精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Multi-Agent 架構之 Supervisor

人工智能
本文基于開源的 langgraph-supervisor-py 項目,分析 supervisor 架構下的多 Agent 設計,supervisor 架構是有一個 supervisor 和多個 Agent,supervisor 負責管理多個 Agent,Agent 負責具體的工作,開始執行時,從 supervisor 開始,然后根據大模型的返回不斷調各個 Agent,每個 Agent 執行完再次回

從單 Agent 到 Workflow,現在已經進入了多 Agent 時代,多 Agent 本質上是在大模型的指導下,多個 Agent 共同協作完成用戶的任務。在這個背景下衍生出了多種 Agent 架構,比如中心化、去中心化、層次化等。本文基于開源的 langgraph-supervisor-py 項目,分析 supervisor 架構下的多 Agent 設計,supervisor 架構是有一個 supervisor 和多個 Agent,supervisor 負責管理多個 Agent,Agent 負責具體的工作,開始執行時,從 supervisor 開始,然后根據大模型的返回不斷調各個 Agent,每個 Agent 執行完再次回到 supervisor,supervisor 再次調大模型,如此反復,直到得到結果。

使用例子

下面從官方的一個例子開始。

from langchain_openai import ChatOpenAI
from langgraph_supervisor import create_supervisor
from langgraph.prebuilt import create_react_agent
from langchain_core.runnables.graph import MermaidDrawMethod


# 工具
def add(a: float, b: float) -> float:
    """Add two numbers."""
    return a + b


def multiply(a: float, b: float) -> float:
    """Multiply 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:\n"
        "1. **Facebook (Meta)**: 67,317 employees.\n"
        "2. **Apple**: 164,000 employees.\n"
        "3. **Amazon**: 1,551,000 employees.\n"
        "4. **Netflix**: 14,000 employees.\n"
        "5. **Google (Alphabet)**: 181,269 employees."
    )


# 數學計算 Agent
math_agent = create_react_agent(
    model=model,
    tools=[add, multiply],
    name="math_expert",
    prompt="You are a math expert. Always use one tool at a time."
)


# 搜索 Agent
research_agent = create_react_agent(
    model=model,
    tools=[web_search],
    name="research_expert",
    prompt="You are a world class researcher with access to web search. Do not do any math."
)


workflow = create_supervisor(
    [research_agent, math_agent],
    model=model,
    prompt=(
        "You are a team supervisor managing a research expert and a math expert. "
        "For current events, use research_agent. "
        "For math problems, use math_agent."
    )
)


app = workflow.compile()


# 畫圖
img = app.get_graph().draw_mermaid_png(
            draw_method=MermaidDrawMethod.API,
        )
with open("graph.png", "wb") as f:
    f.write(img)
    f.close()


# 執行
result = app.invoke({
    "messages": [
        {
            "role": "user",
            "content": "what's the combined headcount of the FAANG companies in 2024?"
        }
    ]
})

上面的例子中創建了一個 supervisor 和兩個 Agent(supervisor 其實也是一個 Agent),一個是用于搜索的 Agent,一個是用于做數學計算的 Agent,每個 Agent 擁有自己的工具集。三個節點形成以下結構的圖。

圖片

接著詳細分析上面的例子。

create_react_agent

create_react_agent 可以創建一個 react Agent,其工作原理

  1. Agent 調用大模型獲取工具調用情況。
  2. 大模型返回調用哪個工具。
  3. Agent 調用工具,拿到結果,回到 1,除非返回不需要再調工具。 其實現如下。
def create_react_agent(
    model: Union[str, LanguageModelLike],
    tools: Union[Sequence[Union[BaseTool, Callable]], ToolNode],
    *,
    prompt: Optional[Prompt] = None,
    ...
) -> CompiledGraph:


    # 創建一個 Tool 節點統一處理 tool
    tool_node = ToolNode(tools)
    tool_classes = list(tool_node.tools_by_name.values())
    tool_calling_enabled = len(tool_classes) > 0
    # 綁定到 model,調用大模型時把工具信息傳過去
    if _should_bind_tools(model, tool_classes) and tool_calling_enabled:
        model = cast(BaseChatModel, model).bind_tools(tool_classes)


    model_runnable = _get_prompt_runnable(prompt) | model


    # Agent 節點的處理函數
    def call_model(state: StateSchema, config: RunnableConfig) -> StateSchema:
        state = _get_model_input_state(state)
        response = cast(AIMessage, model_runnable.invoke(state, config))
        # add agent name to the AIMessage
        response.name = name
        return ...


    # 執行完 Agent 后執行該判斷函數
    def should_continue(state: StateSchema) -> Union[str, list]:
        messages = _get_state_value(state, "messages")
        last_message = messages[-1]


        # 不需要執行工具調用則返回結束
        if not isinstance(last_message, AIMessage) or not last_message.tool_calls:
            return END if response_format is None else "generate_structured_response"
        # 跳到 Tool 節點處理
        else:
            if version == "v1":
                return "tools"
            elif version == "v2":
                tool_calls = [
                    tool_node.inject_tool_args(call, state, store)  # type: ignore[arg-type]
                    for call in last_message.tool_calls
                ]
                return [Send("tools", [tool_call]) for tool_call in tool_calls]


    # 開始構建執行流程圖
    workflow = StateGraph(state_schema or AgentState, config_schema=config_schema)


    # 添加 Agent 節點
    workflow.add_node(
        "agent", RunnableCallable(call_model, acall_model), input=input_schema
    )
    # 添加 Tool 節點
    workflow.add_node("tools", tool_node)


    # 設置開始執行節點
    entrypoint = "agent"
    workflow.set_entry_point(entrypoint)


    # 設置條件判斷節點
    workflow.add_conditional_edges(
        "agent",
        should_continue,
        path_map=should_continue_destinations,
    )


    # 設置 Tool 節點到 Agent 的表,Tool 執行完后自動跳到 Agent 節點
    workflow.add_edge("tools", entrypoint)


    return workflow.compile(
        checkpointer=checkpointer,
        store=store,
        interrupt_before=interrupt_before,
        interrupt_after=interrupt_after,
        debug=debug,
        name=name,
    )

create_react_agent 內部是使用 langgraph 構建了一個執行圖,并封裝了大模型和工具的調用邏輯。當開始執行 Agent 時,會從圖起點開始執行,也就是調用大模型拿到需要調用的工具(也可能不需要執行工具,這里需要動態判斷),然后執行到 ToolNode 節點,ToolNode 節點內部會根據大模型的返回信息調用具體的工具,調用完工具后回到 Agent,Agent 再次調大模型,如此反復,工具的處理函數如下。

def _run_one(
        self,
        call: ToolCall,
        input_type: Literal["list", "dict", "tool_calls"],
        config: RunnableConfig,
    ) -> ToolMessage:


    input = {**call, **{"type": "tool_call"}}
    response = self.tools_by_name[call["name"]].invoke(input, config)


    if isinstance(response, Command):
        return self._validate_tool_command(response, call, input_type)
    elif isinstance(response, ToolMessage):
        response.content = cast(
            Union[str, list], msg_content_output(response.content)
        )
        return response
    else:
        raise TypeError(
            f"Tool {call['name']} returned unexpected type: {type(response)}"
        )

可以看到 ToolNode 內部會根據工具名稱調用具體的工具,拿到結果后再跳回 Agent。結構圖如下。

圖片


create_supervisor

接著從 create_supervisor 開始分析 supervisor 內部的架構。

def create_supervisor(
    agents: list[Pregel],
    *,
    model: LanguageModelLike,
    tools: list[BaseTool | Callable] | None = None,
    prompt: Prompt | None = None,
    state_schema: StateSchemaType = AgentState,
    config_schema: Type[Any] | None = None,
    add_handoff_messages: bool = True,
    handoff_tool_prefix: Optional[str] = None,
    add_handoff_back_messages: Optional[bool] = None,
    supervisor_name: str = "supervisor",
) -> StateGraph:
    # 默認把 handoff 信息記錄到 messages 中
    if add_handoff_back_messages is None:
        add_handoff_back_messages = add_handoff_messages


    # 創建 handoff 工具,用于轉移處理權
    all_tools = [
        create_handoff_tool(
            agent_name=agent.name,
            name=(None),
            add_handoff_messages=add_handoff_messages,
        )
        for agent in agents
    ]


    # 綁定工具,調用大模型時會傳過去
    model = model.bind_tools(all_tools)


    # 創建一個角色為 supervisor 的 Agent
    supervisor_agent = create_react_agent(
        name=supervisor_name,
        model=model,
        tools=all_tools,
        prompt=prompt,
        state_schema=state_schema, # AgentState, reducer 為 add_messages
        response_format=response_format,
    )


    builder = StateGraph(state_schema, config_schema=config_schema)
    # 添加 supervisor 到圖中,下游是各個 Agent 和 END
    builder.add_node(supervisor_agent, destinatinotallow=tuple(agent_names) + (END,))
    # 設置執行起點是 supervisor
    builder.add_edge(START, supervisor_agent.name)
    for agent in agents:
        # 把每個 Agent 加入圖中
        builder.add_node(
            agent.name,
            _make_call_agent(
                agent,
                output_mode,
                add_handoff_back_messages=add_handoff_back_messages,
                supervisor_name=supervisor_name,
            ),
        )
        # 每個 Agent 都有一條指向 supervisor 的邊
        builder.add_edge(agent.name, supervisor_agent.name)


    return builder

create_supervisor 的大概邏輯是創建了一個 supervisor Agent,然后構造一個執行圖。有兩個地方需要分析。分別是 create_handoff_tool 和 _make_call_agent。先看 create_handoff_tool。

def create_handoff_tool(
    *,
    agent_name: str,
    name: str | None = None,
    description: str | None = None,
    add_handoff_messages: bool = True,
) -> BaseTool:
    # 工具的名稱和描述
    if name is None:
        name = f"transfer_to_{_normalize_agent_name(agent_name)}"


    if description is None:
        description = f"Ask agent '{agent_name}' for help"


    @tool(name, descriptinotallow=description)
    def handoff_to_agent(
        state: Annotated[dict, InjectedState],
        tool_call_id: Annotated[str, InjectedToolCallId],
    ):
        tool_message = ToolMessage(
            cnotallow=f"Successfully transferred to {agent_name}",
            name=name,
            tool_call_id=tool_call_id,
            response_metadata={METADATA_KEY_HANDOFF_DESTINATION: agent_name},
        )
        # 追加 handoff message
        handoff_messages = state["messages"] + [tool_message]
        # 跳到具體的 Agent
        return Command(
            goto=agent_name,
            graph=Command.PARENT,
            update={**state, "messages": handoff_messages},
        )


    handoff_to_agent.metadata = {METADATA_KEY_HANDOFF_DESTINATION: agent_name}
    return handoff_to_agent

create_handoff_tool 用于創建一個工具,這些工具信息會發送給大模型,大模型會根據用戶的問題和工具信息(名稱和描述),并告訴 supervisor 應該執行哪一個工具,supervisor 拿到大模型的響應后,會執行 create_handoff_tool 函數,并最終跳轉到具體的 Agent。Agent 的執行由 _make_call_agent 進行了封裝。

def _make_call_agent(
    agent: Pregel,
    output_mode: OutputMode,
    add_handoff_back_messages: bool,
    supervisor_name: str,
) -> Callable[[dict], dict] | RunnableCallable:


    def _process_output(output: dict) -> dict:
        messages = output["messages"]
        # 追加 handoff message,這里是追加 handoff 到 supervisor 的信息
        if add_handoff_back_messages:
            messages.extend(create_handoff_back_messages(agent.name, supervisor_name))
        # Agent 有指向 supervisor 的邊,執行完后會自動跳到 supervisor
        return {
            **output,
            "messages": messages,
        }


    def call_agent(state: dict, config: RunnableConfig) -> dict:
        # 調大模型
        output = agent.invoke(state, config)
        return _process_output(output)


    return RunnableCallable(call_agent, ...)

_make_call_agent 里做了一些處理并追加 handleoff message 后最終跳轉到 supervisor,因為 Agent 有指向 supervisor 的邊,所以會自動跳轉,而不像 supervisor 跳到 Agent 時需要手動控制。從上面的分析可以知道,supervisor 架構中,處理流程如下。

  1. supervisor 傳入 messages 和工具列表,然后調用大模型,大模型返回調用哪個工具。
  2. handoff 到具體的 Agent。
  3. Agent 傳入 messages 和自己的工具列表,然后調用大模型,大模型返回調用哪個工具。
  4. Agent 調用工具,拿到工具的返回,再次調用大模型,拿到最終結果。
  5. handoff 到 supervisor,回到 1,直到調用大模型時,直到返回最終結果。

調用日志

下面是前面例子調用大模型的日志。

  1. supervisor
# supervisor 調用大模型,并傳入工具列表,即有哪些 Agent
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "transfer_to_research_expert",
        "description": "Ask agent 'research_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "transfer_to_math_expert",
        "description": "Ask agent 'math_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    }
  ],
  "parallel_tool_calls": false,
  "messages": [
    {
      "content": "You are a team supervisor managing a research expert and a math expert. For current events, use research_agent. For math problems, use math_agent.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    }
  ]
}
# 大模型返回調用 transfer_to_research_expert Agent
response: {
  "id": "02174685630333191645265e627e21d5dcc187f9552fedf6fda0b",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_fyew4c06vn9ide7nhk6sijws",
            "function": {
              "arguments": " {}",
              "name": "transfer_to_research_expert"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
  }
}

2.handoff 到搜索 Agent

# 搜索 Agent 調用大模型,并傳入工具列表
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "web_search",
        "description": "Search the web for information.",
        "parameters": {
          "properties": {
            "query": {
              "type": "string"
            }
          },
          "required": [
            "query"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a world class researcher with access to web search. Do not do any math.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    }
  ]
}
# 大模型返回調用搜索工具,并提供了參數
response: {
  "id": "02174685630508391645265e627e21d5dcc187f9552fedf724cf2",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_t52sv5g0zm4x1tft5hcnwjjs",
            "function": {
              "arguments": " {\n        \"query\": \"Combined headcount of FAANG companies in 2024\"\n    }\n",
              "name": "web_search"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}
# 搜索 Agent 拿到了搜索工具的結果,并再次調用大模型
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "web_search",
        "description": "Search the web for information.",
        "parameters": {
          "properties": {
            "query": {
              "type": "string"
            }
          },
          "required": [
            "query"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a world class researcher with access to web search. Do not do any math.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": null,
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_t52sv5g0zm4x1tft5hcnwjjs",
          "function": {
            "name": "web_search",
            "arguments": "{\"query\": \"Combined headcount of FAANG companies in 2024\"}"
          }
        }
      ]
    },
    {
      "content": "Here are the headcounts for each of the FAANG companies in 2024:\n1. **Facebook (Meta)**: 67,317 employees.\n2. **Apple**: 164,000 employees.\n3. **Amazon**: 1,551,000 employees.\n4. **Netflix**: 14,000 employees.\n5. **Google (Alphabet)**: 181,269 employees.",
      "role": "tool",
      "tool_call_id": "call_t52sv5g0zm4x1tft5hcnwjjs"
    }
  ]
}
# 大模型覺得這個信息夠了,不需要再搜索
response: {
  "id": "02174685630701191645265e627e21d5dcc187f9552fedf6f3f21",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
        "role": "assistant"
      }
    }
  ],
}

3.handoff 到 supervisor

# handoff 回 supervisor,supervisor 再次調用大模型
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "transfer_to_research_expert",
        "description": "Ask agent 'research_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "transfer_to_math_expert",
        "description": "Ask agent 'math_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    }
  ],
  "parallel_tool_calls": false,
  "messages": [
    {
      "content": "You are a team supervisor managing a research expert and a math expert. For current events, use research_agent. For math problems, use math_agent.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    }
  ]
}
# 大模型返回調用數學計算 Agent
response: {
  "id": "02174685631050391645265e627e21d5dcc187f9552fedf85877e",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_z9x3nnqjvnp9hxuehejkivgn",
            "function": {
              "arguments": " {}",
              "name": "transfer_to_math_expert"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}

4.handoff 到數學計算 Agent

# 數學計算 Agent 調用大模型,并傳入工具列表
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Add two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiply two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a math expert. Always use one tool at a time.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    }
  ]
}
# 大模型返回調用數學計算工具
response: {
  "id": "02174685631226191645265e627e21d5dcc187f9552fedf93e39a",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_jd5esfvy2qsh9tdz23361pha",
            "function": {
              "arguments": " {\n        \"a\": 67317, \n        \"b\": 164000\n    }\n",
              "name": "add"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}
# 數學計算 Agent 調用大模型,并傳入工具列表
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Add two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiply two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a math expert. Always use one tool at a time.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_jd5esfvy2qsh9tdz23361pha",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 67317, \"b\": 164000}"
          }
        }
      ]
    },
    {
      "content": "231317.0",
      "role": "tool",
      "tool_call_id": "call_jd5esfvy2qsh9tdz23361pha"
    }
  ]
}
# 大模型返回了調用加法工具,并提供了參數
response: {
  "id": "02174685631455691645265e627e21d5dcc187f9552fedf732682",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_owov4sx70lmdpz7zooldnue3",
            "function": {
              "arguments": " {\"a\": 231317, \"b\": 1551000}",
              "name": "add"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}
# 數學計算 Agent 拿到加法工具的調用結果后,再次調大模型
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Add two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiply two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a math expert. Always use one tool at a time.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_jd5esfvy2qsh9tdz23361pha",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 67317, \"b\": 164000}"
          }
        }
      ]
    },
    {
      "content": "231317.0",
      "role": "tool",
      "tool_call_id": "call_jd5esfvy2qsh9tdz23361pha"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_owov4sx70lmdpz7zooldnue3",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 231317, \"b\": 1551000}"
          }
        }
      ]
    },
    {
      "content": "1782317.0",
      "role": "tool",
      "tool_call_id": "call_owov4sx70lmdpz7zooldnue3"
    }
  ]
}
# 大模型再次返回了調用加法工具,并提供了參數,如此循環多次
response: {
  "id": "02174685631635591645265e627e21d5dcc187f9552fedf2db39e",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_w2tp827rhg290ekal228ei1c",
            "function": {
              "arguments": " {\"a\": 1782317, \"b\": 14000}",
              "name": "add"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Add two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiply two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a math expert. Always use one tool at a time.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_jd5esfvy2qsh9tdz23361pha",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 67317, \"b\": 164000}"
          }
        }
      ]
    },
    {
      "content": "231317.0",
      "role": "tool",
      "tool_call_id": "call_jd5esfvy2qsh9tdz23361pha"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_owov4sx70lmdpz7zooldnue3",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 231317, \"b\": 1551000}"
          }
        }
      ]
    },
    {
      "content": "1782317.0",
      "role": "tool",
      "tool_call_id": "call_owov4sx70lmdpz7zooldnue3"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_w2tp827rhg290ekal228ei1c",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 1782317, \"b\": 14000}"
          }
        }
      ]
    },
    {
      "content": "1796317.0",
      "role": "tool",
      "tool_call_id": "call_w2tp827rhg290ekal228ei1c"
    }
  ]
}
response: {
  "id": "02174685631866091645265e627e21d5dcc187f9552fedf7df673",
  "choices": [
    {
      "finish_reason": "tool_calls",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "",
        "role": "assistant",
        "tool_calls": [
          {
            "id": "call_rvoyhqsoj5sz1g0a9tz28qy9",
            "function": {
              "arguments": " {\"a\": 1796317, \"b\": 181269}",
              "name": "add"
            },
            "type": "function"
          }
        ]
      }
    }
  ],
}


# 數學計算 Agent 最后一次調用大模型
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Add two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiply two numbers.",
        "parameters": {
          "properties": {
            "a": {
              "type": "number"
            },
            "b": {
              "type": "number"
            }
          },
          "required": [
            "a",
            "b"
          ],
          "type": "object"
        }
      }
    }
  ],
  "messages": [
    {
      "content": "You are a math expert. Always use one tool at a time.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_jd5esfvy2qsh9tdz23361pha",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 67317, \"b\": 164000}"
          }
        }
      ]
    },
    {
      "content": "231317.0",
      "role": "tool",
      "tool_call_id": "call_jd5esfvy2qsh9tdz23361pha"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_owov4sx70lmdpz7zooldnue3",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 231317, \"b\": 1551000}"
          }
        }
      ]
    },
    {
      "content": "1782317.0",
      "role": "tool",
      "tool_call_id": "call_owov4sx70lmdpz7zooldnue3"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_w2tp827rhg290ekal228ei1c",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 1782317, \"b\": 14000}"
          }
        }
      ]
    },
    {
      "content": "1796317.0",
      "role": "tool",
      "tool_call_id": "call_w2tp827rhg290ekal228ei1c"
    },
    {
      "content": null,
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_rvoyhqsoj5sz1g0a9tz28qy9",
          "function": {
            "name": "add",
            "arguments": "{\"a\": 1796317, \"b\": 181269}"
          }
        }
      ]
    },
    {
      "content": "1977586.0",
      "role": "tool",
      "tool_call_id": "call_rvoyhqsoj5sz1g0a9tz28qy9"
    }
  ]
}
# 大模型返回結果,計算完畢
response: {
  "id": "02174685632091091645265e627e21d5dcc187f9552fedfe2a3f5",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "The combined headcount of the FAANG companies in 2024 is 1,977,586. ",
        "role": "assistant"
      }
    }
  ],
}

5.handoff 到 supervisor

# handoff 到 supervisor,supervisor 再次調大模型
request: {
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "transfer_to_research_expert",
        "description": "Ask agent 'research_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "transfer_to_math_expert",
        "description": "Ask agent 'math_expert' for help",
        "parameters": {
          "properties": {},
          "type": "object"
        }
      }
    }
  ],
  "parallel_tool_calls": false,
  "messages": [
    {
      "content": "You are a team supervisor managing a research expert and a math expert. For current events, use research_agent. For math problems, use math_agent.",
      "role": "system"
    },
    {
      "content": "what's the combined headcount of the FAANG companies in 2024?",
      "role": "user"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_fyew4c06vn9ide7nhk6sijws",
          "function": {
            "name": "transfer_to_research_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to research_expert",
      "role": "tool",
      "tool_call_id": "call_fyew4c06vn9ide7nhk6sijws"
    },
    {
      "content": "The individual headcounts of FAANG companies in 2024 are as follows: Meta has 67,317 employees, Apple has 164,000 employees, Amazon has 1,551,000 employees, Netflix has 14,000 employees, and Alphabet has 181,269 employees. You can sum these figures to get the combined head - count. ",
      "name": "research_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "research_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "267ff0b0-d27b-4764-a68b-71eda788379a",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "267ff0b0-d27b-4764-a68b-71eda788379a"
    },
    {
      "content": null,
      "name": "supervisor",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "call_z9x3nnqjvnp9hxuehejkivgn",
          "function": {
            "name": "transfer_to_math_expert",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred to math_expert",
      "role": "tool",
      "tool_call_id": "call_z9x3nnqjvnp9hxuehejkivgn"
    },
    {
      "content": "The combined headcount of the FAANG companies in 2024 is 1,977,586. ",
      "name": "math_expert",
      "role": "assistant"
    },
    {
      "content": "Transferring back to supervisor",
      "name": "math_expert",
      "role": "assistant",
      "tool_calls": [
        {
          "type": "function",
          "id": "dff2e74c-2997-4acc-b86d-9d702f933dcb",
          "function": {
            "name": "transfer_back_to_supervisor",
            "arguments": "{}"
          }
        }
      ]
    },
    {
      "content": "Successfully transferred back to supervisor",
      "role": "tool",
      "tool_call_id": "dff2e74c-2997-4acc-b86d-9d702f933dcb"
    }
  ]
}
# 大模型返回最終結果
response: {
  "id": "02174685632249991645265e627e21d5dcc187f9552fedf38b54d",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "The combined headcount of the FAANG companies in 2024 is 1,977,586. ",
        "role": "assistant"
      }
    }
  ],
}

6.拿到最終結果。

責任編輯:武曉燕 來源: 編程雜技
相關推薦

2024-07-01 12:30:09

2025-10-15 02:11:00

谷歌Agent架構

2025-07-23 01:00:00

2025-04-29 08:00:00

Rowboat多智能體人工智能

2025-05-09 08:45:13

2024-12-24 16:30:58

Agent

2025-08-04 02:55:00

AIAgent架構

2025-07-11 03:10:00

LLMRAGAI

2022-09-14 09:27:49

CSS架構代碼

2016-12-19 11:17:48

架構 MVC

2025-01-08 15:15:16

2021-11-08 10:45:26

架構軟件技術

2025-05-28 01:20:00

MCPRAGAgent

2025-05-30 14:59:36

GoogleAgent2AI

2023-03-07 14:21:57

2021-11-08 08:42:44

CentOS Supervisor運維

2021-01-14 15:41:22

LinuxSupervisor命令

2021-07-02 06:54:45

軟件架構模式

2022-04-02 23:32:42

數據網格架構
點贊
收藏

51CTO技術棧公眾號

亚洲黄网站在线观看| 九色综合国产一区二区三区| 欧美videos中文字幕| 99在线免费视频观看| 欧洲毛片在线| 麻豆精品视频在线观看免费| 九九热最新视频//这里只有精品| 国产精品熟妇一区二区三区四区| 男人久久天堂| 国产精品国产三级国产有无不卡| 成人黄色在线免费观看| 日本高清不卡码| 伊人久久大香线| 亚洲精品一区二区三区不| 中文字幕22页| 色黄视频在线观看| 亚洲欧美日韩在线不卡| 蜜桃视频在线观看成人| 国产又粗又大又爽| 男女av一区三区二区色多| 久久久国产视频91| 97伦伦午夜电影理伦片| 亚洲成av人片在线观看www| 色狠狠桃花综合| 蜜臀精品一区二区| 日日夜夜精品一区| 久久久综合精品| 成人情视频高清免费观看电影| 国产一级淫片a视频免费观看| 欧美a级片一区| 色婷婷综合久久久久中文字幕1| a天堂视频在线观看| 精品一区二区三区中文字幕在线 | 亚洲一区二区精品在线观看| 亚洲精品一区二区三区不卡| 久久99热这里只有精品| 国产成人鲁鲁免费视频a| xxxx 国产| 欧美不卡一区| 萌白酱国产一区二区| 美国黄色特级片| 九九精品久久| 日韩精品视频在线观看免费| 欧美丰满熟妇bbb久久久| 国产精品成人**免费视频| 欧美午夜片在线观看| 久章草在线视频| 激情国产在线| 天天色天天爱天天射综合| 成人一级生活片| 羞羞的视频在线看| 亚洲六月丁香色婷婷综合久久| 亚洲在线色站| 麻豆免费在线视频| 国产精品国产成人国产三级| 亚洲精品自在在线观看| avtt在线播放| 日韩毛片一二三区| 在线看视频不卡| 久久五月精品| 一区二区在线观看不卡| 欧美 亚洲 视频| 青青在线视频| 午夜激情综合网| 欧美视频在线播放一区| 超级碰碰久久| 欧美午夜精品一区二区三区| 久久人人爽av| 免费欧美网站| 欧美精品一区二区高清在线观看| 日本免费福利视频| 少妇精品久久久一区二区三区| 亚洲视屏在线播放| 美国精品一区二区| 欧美精选在线| 7777精品视频| 丰满熟女人妻一区二区三| 六月丁香综合在线视频| 亚洲一区二区三区久久 | 忘忧草在线www成人影院| 欧美视频自拍偷拍| www.偷拍.com| 无码日韩精品一区二区免费| 亚洲男人的天堂在线播放| 欧美一区二区三区粗大| 中文字幕一区二区av| 97精品国产97久久久久久春色| 天干夜夜爽爽日日日日| 精品在线一区二区三区| 国产一区二区高清不卡| 国产香蕉在线| 亚洲综合色婷婷| 久久国产乱子伦免费精品| 爱情电影网av一区二区| 亚洲精品黄网在线观看| 天堂网av2018| 99av国产精品欲麻豆| 国产精品视频xxxx| 亚洲不卡免费视频| 国产亚洲欧美中文| 乱子伦一区二区| 悠悠资源网亚洲青| 91麻豆精品国产91久久久久久久久| av在线播放网址| 五月开心六月丁香综合色啪| 91成人福利在线| 亚洲自拍偷拍另类| 99久精品国产| 51xx午夜影福利| 亚洲不卡系列| 亚洲国产精品va在看黑人| 欧美巨胸大乳hitomi| 亚洲欧洲日本一区二区三区| 成人动漫网站在线观看| 三区在线观看| 亚洲国产色一区| 污污的视频免费观看| 精品国产一区二区三区久久久蜜臀| 九九热视频这里只有精品| 探花国产精品一区二区| www.色综合.com| 91九色国产ts另类人妖| 免费高清视频在线一区| 欧美精品一区二区不卡| 国产av无码专区亚洲av毛网站| 免费看黄裸体一级大秀欧美| 国产福利久久| av黄在线观看| 欧美精品色综合| 亚洲天堂岛国片| 欧美亚洲在线| 久久久久久九九九九| 日本中文字幕中出在线| 欧美精品第1页| 国产又黄又粗视频| 久久精品综合| 久久综合婷婷综合| 国模套图日韩精品一区二区| 亚洲国内精品在线| 日韩黄色在线视频| 国产99久久久国产精品免费看| 免费看污污视频| 国产人与zoxxxx另类91| 久久亚洲精品小早川怜子66| 中文字幕一区二区三区四区视频 | 日韩亚洲欧美在线| 在线观看亚洲网站| 精东粉嫩av免费一区二区三区| 手机成人在线| 成人精品高清在线视频| 国产一区二区三区精品久久久 | free性护士videos欧美| 精品88久久久久88久久久| 久久精品国产亚洲AV无码男同| 成人一区二区三区视频在线观看| 无码人妻精品一区二区蜜桃百度| 日韩三级久久| 午夜精品久久久久久久99黑人 | 色阁综合伊人av| 亚洲视频在线免费播放| 最新国产成人在线观看| 中文字幕第22页| 综合激情婷婷| 国产精品视频免费观看| 波多野结衣视频一区二区| 亚洲免费视频观看| 中文字幕av久久爽| 亚洲色欲色欲www| xxxxwww一片| 麻豆亚洲精品| 亚洲欧美日韩国产成人综合一二三区| 3d动漫一区二区三区在线观看| 久久久精品影院| 亚洲乱码国产乱码精品精软件| 天天操天天干天天综合网| 西西大胆午夜视频| 日本美女一区二区| 久久天天东北熟女毛茸茸| 久久a爱视频| 国产精品av网站| av免费网站在线观看| 亚洲国语精品自产拍在线观看| 欧美成人精品网站| 亚洲精品视频在线观看免费 | 国产精品美女久久久久久久久 | 国产精品水嫩水嫩| 亚洲一区二区三区三州| 一区二区三区导航| 一区二区日本伦理| 国产精品中文字幕制服诱惑| 国产精品旅馆在线| 人人澡人人添人人爽一区二区| 亚洲情综合五月天| av在线免费在线观看| 日韩欧美在线观看| 天天做夜夜爱爱爱| 91亚洲精品久久久蜜桃网站| 国产永久免费网站| 在线视频精品| 美女黄色片网站| 亚洲免费成人av在线| 91精品黄色| 日韩一区精品| 26uuu亚洲国产精品| 黄色在线免费看| 亚洲免费小视频| 日本激情视频网站| 欧美片在线播放| 亚洲第一精品在线观看 | 穿情趣内衣被c到高潮视频| 亚洲丝袜啪啪| aa成人免费视频| 色噜噜成人av在线| 国产成人精品综合| av资源网在线播放| 伦理中文字幕亚洲| 成年人视频在线免费观看| 亚洲国产精品资源| a天堂在线视频| 欧美女孩性生活视频| 波多野结衣黄色网址| 亚洲成人资源网| 日本老熟俱乐部h0930| 中文字幕不卡在线| 99久久久久久久久久| 国产69精品久久久久毛片| 午夜视频在线网站| 人人狠狠综合久久亚洲| 欧美色图另类小说| 亚洲激情影院| av在线免费观看国产| 婷婷激情图片久久| 亚洲人成77777| 不卡av一区二区| 日本一区网站| 国产亚洲一卡2卡3卡4卡新区| 久久艹中文字幕| 日韩大片在线免费观看| 国产一区视频观看| 国产精品18hdxxxⅹ在线| av一区二区三区免费| 国产一区二区三区视频在线| 成人性教育视频在线观看| 免费一区二区三区四区| 国产精品久久久久久影视| 欧美成人精品三级网站| 日韩美女中文字幕| 欧美www.| 国产欧美日韩亚洲精品| 日本午夜精品久久久久| 国产精品色视频| 九九热这里有精品| 国产在线观看不卡| 亚洲伦理一区二区| 91在线国产电影| 在线日韩成人| 激情视频在线观看一区二区三区| 精品日产乱码久久久久久仙踪林| 精品国产一区二区三| 校园春色另类视频| 日韩经典在线视频| 羞羞色午夜精品一区二区三区| 国产又粗又硬又长| 国产精品草草| 欧美日韩一道本| 日韩电影在线观看一区| 日韩在线不卡一区| 国产成人一区在线| 亚洲国产精品自拍视频| 国产午夜精品理论片a级大结局| 欧美波霸videosex极品| 中文字幕五月欧美| 久久久国产精华液| 欧美日韩免费在线| 亚洲午夜在线播放| 日韩一级黄色大片| 少妇激情av一区二区| 中文字幕成人在线| 欧美性爽视频| 日本午夜在线亚洲.国产| 精品久久久网| 国产青春久久久国产毛片| 国产欧美日韩影院| 国产一级不卡视频| 免播放器亚洲| 亚洲天堂网站在线| 久久综合狠狠综合| 91视频免费在线看| 色欧美片视频在线观看| 国产高清第一页| 亚洲老板91色精品久久| a天堂中文在线官网在线| 97视频在线播放| 欧美男男gaygay1069| 国内精品久久久久久久果冻传媒| 青青草国产免费一区二区下载| 日本香蕉视频在线观看| 日韩国产精品久久久| 国产香蕉精品视频| 国产精品家庭影院| 免费视频久久久| 日韩欧美色综合网站| 精品美女视频在线观看免费软件| 久久97久久97精品免视看 | 成人激情视频网| 你微笑时很美电视剧整集高清不卡 | 久久免费少妇高潮久久精品99| 日本中文字幕一区二区| 国产日韩欧美综合精品| 午夜国产一区二区| 国产福利视频在线播放| 国产成人啪免费观看软件| 变态另类ts人妖一区二区| 性感美女极品91精品| 国产手机视频在线| 在线成人激情黄色| 日韩激情电影| 国产精品国产精品国产专区蜜臀ah | 亚洲人成电影网站色www| 黑人精品视频| 91免费综合在线| 三上亚洲一区二区| 欧美成人黑人猛交| 91免费观看视频在线| 国产精品成人网站| 欧美成人欧美edvon| xvideos国产在线视频| 国产原创欧美精品| av中文一区| 国产一区视频免费观看| 91免费视频大全| 免费在线不卡视频| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 久久精品欧美日韩| 毛片视频网站在线观看| 亚洲精品美女免费| 久久影院午夜精品| 精品日本一区二区三区在线观看| 国产一区亚洲| 午夜福利三级理论电影| 一区二区三区91| 亚洲精品97久久中文字幕| 欧美成人精品xxx| 日本免费一区二区视频| 亚洲高潮无码久久| 国产精品白丝jk白祙喷水网站| 欧美成人777| 日韩视频一区二区三区在线播放 | 亚洲综合激情小说| 精品人妻伦一区二区三区久久| 美女av一区二区| 日本少妇精品亚洲第一区| 日本五级黄色片| av电影天堂一区二区在线观看| 中文字幕在线观看免费视频| 精品视频在线观看日韩| 五月激情久久| www.午夜色| 国产福利一区在线| 国产无遮挡又黄又爽在线观看| 日韩成人性视频| 久久久人成影片一区二区三区在哪下载| 日本在线成人一区二区| 美女视频网站久久| 九九精品视频免费| 精品国产91乱码一区二区三区| 黄色18在线观看| 日韩激情视频| 国产黄色精品网站| 日本一二三区视频| 亚洲欧洲在线播放| 国语自产精品视频在线看抢先版结局| 亚洲国产精品一区二区第四页av| 黄网站免费久久| 日韩精品乱码久久久久久| 亚洲欧美日韩中文视频| 一级欧美视频| 99在线精品免费视频| 国产亚洲欧洲一区高清在线观看| 国产精品久久久久久69| 久久久人成影片一区二区三区观看| 亚洲精品一级二级三级| 91亚洲精品久久久蜜桃借种| 亚洲一区免费视频| 日韩电影免费| 91亚洲国产精品| 欧美亚洲三区| 久草视频在线资源站| 国产亚洲精品久久久久久777| www欧美在线观看| 国产1区2区在线| 一区二区三区在线看| 黄色片在线播放| 国产aⅴ精品一区二区三区黄| 肉丝袜脚交视频一区二区| 中文字幕在线2021| 亚洲夜晚福利在线观看| 91精品入口| 国产福利精品一区二区三区| 精品国产成人av|