精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

极品美女扒开粉嫩小泬| 91亚洲国产成人精品性色| 亚洲调教欧美在线| 欧美成人ⅴideosxxxxx| 国产精品久久久一本精品| 91成人免费观看| 男人天堂2024| 欧美成人直播| 日韩国产精品一区| 五月激情五月婷婷| www.51av欧美视频| 亚洲国产高清不卡| 高清不卡日本v二区在线| 无码人妻丰满熟妇区bbbbxxxx| 久久精品国内一区二区三区水蜜桃| 精品91自产拍在线观看一区| 婷婷丁香激情网| 免费男女羞羞的视频网站在线观看 | 国产成人免费在线视频| 日本成人在线视频网址| 亚洲av鲁丝一区二区三区| 九九久久婷婷| 精品久久五月天| 天天干天天av| 日韩一级二级| 欧美日韩国产在线播放| 男人天堂成人网| 77导航福利在线| 久久综合999| 国模一区二区三区私拍视频| 国产同性人妖ts口直男| 老司机精品福利视频| 高清视频欧美一级| 久久久久久欧美精品se一二三四| 久久中文字幕二区| 一区二区成人av| 女尊高h男高潮呻吟| 国产图片一区| 精品国产自在久精品国产| 亚洲欧美日韩精品一区| 精品网站在线| 欧美在线观看视频在线| 欧美精品一区免费| 97人人在线视频| 夜夜嗨av一区二区三区四季av | 在线视频你懂得一区| 男人用嘴添女人下身免费视频| 中文字幕资源网在线观看| 国产精品久久久久永久免费观看| 欧美一区1区三区3区公司 | 色噜噜狠狠色综合网图区| 少妇光屁股影院| 亚欧日韩另类中文欧美| 亚洲国产第一页| 性色av蜜臀av浪潮av老女人| jizz性欧美23| 亚洲福利精品在线| 人体私拍套图hdxxxx| 卡通动漫国产精品| 亚洲精品在线视频| 一色道久久88加勒比一| 欧美精品一区二区久久| 在线日韩中文字幕| 亚洲欧美综合7777色婷婷| 国产精品99久久精品| 久久天天躁夜夜躁狠狠躁2022| 亚洲a∨无码无在线观看| 国产精品99久久| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲污视频在线观看| www成人在线视频| 欧美女孩性生活视频| 天天操夜夜操很很操| 国产精品白丝av嫩草影院| 亚洲第一网站男人都懂| 女~淫辱の触手3d动漫| av一区二区在线观看| 久久韩剧网电视剧| 国产一级aa大片毛片| 免费日韩一区二区| 国产裸体写真av一区二区| 国产suv一区二区| www.久久久久久久久| 欧美一区二区三区电影在线观看 | 一区二区三区欧美久久| 欧美 日韩 国产在线观看| se01亚洲视频| 欧美一卡2卡3卡4卡| 亚洲成人av免费在线观看| 欧美一区二区三| 欧美成人久久久| 免费av网站在线| 久久99精品久久久久久动态图 | 亚洲区小说区图片区qvod按摩| 国产亚洲欧美日韩一区二区| 欧美激情精品久久久久久免费 | 色婷婷中文字幕| 国产欧美久久久精品影院| 欧美一级黄色录像片| 韩日成人影院| 欧美岛国在线观看| 天堂资源在线视频| 亚洲看片一区| 91在线直播亚洲| 九一在线视频| 亚洲国产精品一区二区www在线| 三级在线免费看| h视频久久久| 久热在线中文字幕色999舞| 精品免费囯产一区二区三区| 激情偷乱视频一区二区三区| 久久久久久国产精品一区| 成人av免费| 欧美性猛交xxxx乱大交退制版| 精品伦一区二区三区| 国产精品国产三级国产在线观看| 日本高清久久天堂| 国模私拍视频在线| 亚洲免费在线视频| 日韩爱爱小视频| 欧美激情在线精品一区二区三区| 欧美激情亚洲激情| 国产三级小视频| 国产精品久久久久9999吃药| 91看片就是不一样| 女人抽搐喷水高潮国产精品| 欧美国产日韩一区二区| 国产精品一区二区黑人巨大| 亚洲国产经典视频| 亚洲黄色小视频在线观看| 欧美日韩直播| 成人在线免费观看网站| 亚洲欧美日韩精品久久| 国产情侣在线视频| 丁香激情综合国产| 日本a在线天堂| vam成人资源在线观看| 中文国产成人精品| 乱子伦一区二区三区| 2021国产精品久久精品| 五十路熟女丰满大屁股| 国产精品qvod| 97av在线视频免费播放| 蜜桃久久一区二区三区| 亚洲一区二区在线免费观看视频| 日本中文字幕在线不卡| 久久久久久美女精品 | 免费欧美网站| 久久精品国产一区二区电影| 曰批又黄又爽免费视频| 国产精品色哟哟| 777视频在线| 成人h小游戏| 欧美色视频日本版| 人人妻人人澡人人爽人人精品| 日韩视频二区| 欧美日韩一区二区视频在线| 日韩大尺度黄色| 在线精品高清中文字幕| 97免费观看视频| 亚洲激情第一区| 亚洲欧洲国产视频| 国产欧美丝祙| 日韩精品大片| 国产精品成人3p一区二区三区| 毛片精品免费在线观看| 免费看黄色一级视频| 狠狠色狠色综合曰曰| 精品国产aaa| 国产主播一区二区三区| 久久这里只有精品8| 老牛国内精品亚洲成av人片| 国产成人+综合亚洲+天堂| 91在线网址| 日韩一区二区在线观看视频播放| 久久久久亚洲天堂| 久久精品人人做人人综合 | 国产又粗又长又爽视频| 成人av资源网址| 国产成人精品免费久久久久| 麻豆影视在线观看_| 欧美va在线播放| 国产精品免费精品一区| 国产精品久久毛片av大全日韩| 国产xxxxhd| 日本三日本三级少妇三级66| 黄色在线论坛| www.色精品| 狠狠躁狠狠躁视频专区| 欧美韩日精品| 日本一区二区三区在线视频| 亚洲三级在线| 66m—66摸成人免费视频| 在线观看完整版免费| 日韩欧美在线1卡| 亚洲国产av一区二区三区| 一区二区中文视频| 亚洲蜜桃精久久久久久久久久久久| 视频在线观看91| 国产1区2区3区中文字幕| 美日韩中文字幕| 亚洲综合日韩在线| 你懂得影院夜精品a| 色综合男人天堂| av女优在线| 亚洲电影中文字幕| 国产伦子伦对白视频| 一本一道波多野结衣一区二区| 日本一级二级视频| 国产午夜精品一区二区三区嫩草 | 日本一区免费网站| 国内精品国产三级国产在线专| www.亚洲.com| 精品一区精品二区| 超碰在线人人干| 欧美日韩不卡在线| 精品久久久久久久久久久久久久久久 | 国产在线|日韩| 国产午夜精品麻豆| 亚洲伦理在线观看| 8x8x8国产精品| 中文字幕第315页| 色综合婷婷久久| 亚洲国产精品成人无久久精品| 亚洲视频小说图片| 日本一二三不卡视频| 91女人视频在线观看| www.美色吧.com| 国产精品18久久久久久久久久久久| 91激情视频在线| 久久亚洲风情| 播放灌醉水嫩大学生国内精品| 国产一区二区三区自拍| 国产精品美女在线播放| 欧美中文一区二区| 日韩免费一区二区三区| 欧美极品在线观看| 日韩精品电影网站| 精品视频久久| 少妇精品久久久久久久久久| 亚洲色图美女| 欧美久久电影| 杨幂一区二区三区免费看视频| 国产一区在线观| 国产丝袜一区| 美乳视频一区二区| 亚洲色图美女| 视频一区二区在线| 久久精品不卡| 三上悠亚免费在线观看| 你懂的亚洲视频| 成年人视频网站免费| 好看的av在线不卡观看| 国产aaa免费视频| 99热这里只有成人精品国产| 可以在线看的av网站| 国产免费成人| 99久久激情视频| 麻豆一区二区在线| 国产一级片中文字幕| 国产盗摄视频一区二区三区| 绯色av蜜臀vs少妇| 成人av资源在线观看| 亚洲国产欧美视频| 国产日韩欧美精品一区| 中国1级黄色片| 亚洲综合色视频| 成年人视频在线免费看| 欧美性xxxxxx少妇| 国产婷婷一区二区三区久久| 亚洲第一男人av| 国产女人在线观看| 久久久国产视频| 超碰在线99| 国产精品久久久久久婷婷天堂| 91成人小视频| 国产一区喷水| 91日韩欧美| 真人抽搐一进一出视频| 丝袜美腿亚洲色图| 亚洲精品国产久| 91香蕉视频mp4| 欧美美女性生活视频| 亚洲一级二级三级在线免费观看| 日韩特级黄色片| 欧美日韩成人综合| 人妻精品无码一区二区| 一区二区三区 在线观看视| 影院在线观看全集免费观看| 欧美有码在线观看| 国产精品日本一区二区不卡视频 | 天天干,夜夜爽| 色妞一区二区三区| 2021天堂中文幕一二区在线观| 国产精品成人av在线| 亚洲精品一二三**| 亚洲精品高清视频| 亚洲精品黄色| 国产乱码一区二区三区四区| 91在线国产福利| 中文字幕亚洲欧美日韩| 在线欧美日韩精品| 韩国av在线免费观看| 在线视频国产日韩| 蜜桃av.网站在线观看| 成人夜晚看av| 国产欧美日韩视频在线| 屁屁影院ccyy国产第一页| 美女视频一区在线观看| 男生裸体视频网站| 一区二区免费在线| 国产精品久久久久久免费| 亚洲美女福利视频网站| 国产在线xxx| 亚洲中国色老太| 日韩aaaa| 无码日韩人妻精品久久蜜桃| 成人av综合在线| 久久久久久久9999| 欧美一级久久久久久久大片| 国产粉嫩一区二区三区在线观看| 国内免费久久久久久久久久久| 国产一区2区在线观看| 午夜精品亚洲一区二区三区嫩草| 国产精品一卡| 捆绑裸体绳奴bdsm亚洲| 亚洲午夜电影网| 亚洲精品视频网| 欧美精品做受xxx性少妇| 日韩久久一区| 亚洲欧洲久久| 蓝色福利精品导航| 国产精品久久久视频| 色婷婷亚洲综合| 国产主播福利在线| 国产成人亚洲综合| 综合亚洲色图| 久久久久国产精品熟女影院| 国产亚洲制服色| 亚洲s码欧洲m码国产av| 日韩电影在线观看中文字幕 | 亚洲高潮女人毛茸茸| 欧美性受xxxx| 在线激情小视频| 91精品国产综合久久香蕉最新版 | 97视频在线免费观看| 国产精品对白久久久久粗| 久久久久99精品成人片| 成人国产一区二区三区精品| 精品无码一区二区三区电影桃花| 欧美成人精品福利| 黑人另类精品××××性爽| av一区和二区| 亚洲精品看片| 国产男女猛烈无遮挡a片漫画| 色综合久久天天| a黄色在线观看| 91久久久在线| 欧美日韩国产成人精品| 91精品国产全国免费观看| 午夜免费播放观看在线视频| 国产精品永久免费观看| 天天做天天爱天天综合网2021| 激情图片中文字幕| 亚洲在线中文字幕| 视频国产在线观看| 国产精品欧美一区二区| 国产精品成人一区二区不卡| 无码人妻丰满熟妇区毛片蜜桃精品| 亚洲一区二区三区国产| 亚洲欧洲国产综合| 国产精品久久久久久久久久东京| 色喇叭免费久久综合| 潘金莲一级淫片aaaaaaa| 欧美日韩精品二区| 91se在线| 99免费在线观看视频| 久久不射2019中文字幕| 国精产品一区一区| 精品国产1区二区| 超薄肉色丝袜脚交一区二区| 激情五月五月婷婷| 久久综合久久99| 91在线观看喷潮| 91国产美女视频| 999精品视频| 97香蕉碰碰人妻国产欧美| 欧美视频自拍偷拍| 国产又色又爽又黄刺激在线视频| 快播亚洲色图| 狠狠v欧美v日韩v亚洲ⅴ| 国产无套内射又大又猛又粗又爽| 亚洲午夜小视频| 91成人精品在线| 亚洲欧美在线精品| 精品国产精品自拍| 老司机免费在线视频| 久久综合一区| 国产精品亚洲成人| 18国产免费视频|