劳动力#
Workforce是一个多智能体协作解决任务的系统。通过使用Workforce,用户可以快速搭建一个具有自定义配置的多智能体任务解决系统。本节我们将简要介绍Workforce的架构,以及如何配置和利用它来解决任务。
如需更详细的使用信息,请参阅我们的操作指南:Create A Hackathon Judge Committee with Workforce
系统设计#
架构#
Workforce遵循分层架构。一个workforce可以包含多个工作节点,每个工作节点将包含一个或多个agent作为工作者。这些工作节点由workforce内部的协调器agent管理,协调器agent会根据工作节点的描述及其工具集来分配任务。
除了协调代理之外,工作团队内部还有一个任务规划代理。任务规划代理将负责分解和组合任务,使工作团队能够逐步解决问题。
通信机制#
工作节点内部的通信基于任务通道。工作节点的初始化会创建一个所有节点共享的通道。后续任务将被发布到这个通道中,每个工作节点都会监听该通道,从中接收分配给它的任务进行处理。
当任务解决时,工作节点会将结果发布回通道,该结果将作为其他任务的"依赖项"驻留在通道中,供所有工作节点共享。
通过这种机制,员工可以以协作高效的方式完成任务。
故障处理#
在工作流程中,我们有一个处理故障的机制。当任务失败时,协调代理将采取行动来修复它。这些行动可以是把任务分解成更小的任务并重新分配,或者创建一个能够完成该任务的新工作器。
目前,协调器将根据任务被分解的次数来做出决策。如果任务已经被分解超过一定次数,协调器将采取创建新工作者的操作;如果没有,协调器将仅采取分解操作。
在某些情况下,任务可能根本无法通过代理解决。在这种情况下,为了防止工作线程陷入无限创建代理的循环,如果某个任务失败达到特定次数(默认为3次),工作线程将被停止。
工作流程的简单示例#
这是一个通过简单示例说明工作流程的示意图。

开始使用#
在本节中,我们将向您展示如何创建一个workforce实例,向workforce添加工作节点,以及最终如何启动workforce来解决任务。
创建一个Workforce实例#
要开始使用Workforce,首先需要创建一个workforce实例,然后向workforce添加工作节点。以下是一个示例说明如何操作:
from camel.societies.workforce import Workforce
# Create a workforce instance
workforce = Workforce("A Simple Workforce")
现在我们得到一个描述为“A Simple Workforce”的workforce实例。 但目前该workforce中还没有工作节点。
注意:如何进一步自定义劳动力
您可以通过仅提供劳动力描述快速创建具有默认配置的劳动力实例。不过,您也可以通过更多细节来配置劳动力,例如直接提供工作节点列表而非逐个添加,或者通过向劳动力实例传递配置来设置协调器代理和任务规划器代理。
添加工作节点#
在创建workforce实例后,您可以向workforce添加工作节点。要添加工作节点,您需要首先创建实际执行工作的worker代理。
假设我们已经创建了一个可以进行网络搜索的ChatAgent,名为search_agent。现在我们可以将这个工作代理添加到劳动力中。
# Add the worker agent to the workforce
workforce.add_single_agent_worker(
"An agent that can do web searches",
worker=search_agent,
)
添加功能遵循流畅接口设计模式,因此您可以在一行中添加多个工作代理到劳动力中,如下所示:
workforce.add_single_agent_worker(
"An agent that can do web searches",
worker=search_agent,
).add_single_agent_worker(
"Another agent",
worker=another_agent,
).add_single_agent_worker(
"Yet another agent",
worker=yet_another_agent,
)
现在我们已经在工作队伍中有了一些工作代理。是时候创建一个任务并让工作队伍来解决它了。
注意:该描述并非无关紧要
When adding an agent to the workforce as a worker node, the first argument is the description of the worker node. Though it seems trivial, it is actually very important. The description will be used by the coordinator agent as the basis to assign tasks to the worker nodes. Therefore, it is recommended to provide a clear and concise description of the worker node.
启动Workforce#
在将工作节点添加到劳动力池后,您可以启动劳动力来解决问题任务。首先我们可以定义一个任务:
from camel.tasks import Task
# the id of the task can be any string to mark the task
task = Task(
content="Make a travel plan for a 3-day trip to Paris.",
id="0",
)
然后我们可以启动 workforce 来处理该任务:
task = workforce.process_task(task)
任务的最终结果将存储在任务对象的result属性中。您可以通过以下方式查看结果:
print(task.result)