创建Workforce

news2025/5/23 23:25:47

创建你的Workforce

3.3.1 简单实践

1. 创建 Workforce 实例

想要使用 Workforce,首先需要创建一个 Workforce 实例。下面是最简单的示例:

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.messages import BaseMessage
from camel.societies.workforce import Workforce
from camel.toolkits import SearchToolkit
from camel.tasks import Task
from camel.toolkits import FunctionTool

import os


model = ModelFactory.create(
            model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
            model_type="你的模型",
        )
        
# 创建一个 Workforce 实例
workforce = Workforce(description="旅游攻略制作与评估工作组",new_worker_agent_kwargs={'model':model},coordinator_agent_kwargs={'model':model},task_agent_kwargs={'model':model})

这段代码会生成一个名为 一个简单的Workforce 的实例,不过目前它还不包含任何工作节点。

提示:如何自定义 Workforce

如果你只想快速上手,给 Workforce 传入一个描述就足够了;如果你需要更复杂的定制,则可以在初始化时配置工作节点列表、协调器Agent(Coordinator Agent)或任务规划Agent(Task Planner Agent)等高级参数。


2. 定义worker

接下来,我们需要给Workforce定义一些worker。我们希望在这个Workforce里有一个专业的旅游信息搜索助手、一个专业的旅行规划师、一个经验丰富的旅行爱好者。他们分别负责制定计划和评价计划,例如:

search_tool = FunctionTool(SearchToolkit().search_duckduckgo)

search_agent = ChatAgent(
            system_message="""你是一个专业的旅游信息搜索助手。你的职责是:
                1. 搜索目的地的主要景点信息
                2. 搜索当地特色美食信息
                3. 搜索交通和住宿相关信息
                请确保信息的准确性和实用性。""",
            model=model,
            tools=[search_tool],
            output_language='中文'
        )

planner_agent = ChatAgent(
            system_message="""你是一个专业的旅行规划师。你的职责是:
                1. 根据景点分布规划合理的游览顺序
                2. 为每天安排适量的景点和活动
                3. 考虑用餐、休息等时间
                4. 注意不同季节的特点
                请确保行程安排合理且具有可行性。""",
            model=model,
            output_language='中文'
        )

reviewer_agent = ChatAgent(
    system_message="""你是一个经验丰富的旅行爱好者。你的职责是:
        1. 从游客角度评估行程的合理性
        2. 指出可能的问题和改进建议
        3. 补充实用的旅行小贴士
        4. 评估行程的性价比
        请基于实际旅行经验给出中肯的建议。""",
    model=model,
    output_language='中文'
)

当然,你也可以按自己的喜好来定义你的Workforce。

3. 添加工作节点

定义好 Workforce 和worker后,你可以往里面添加工作节点(Worker Nodes)。以一个命名为 search_agent 的示例Agent(Agent)为例,代码如下:

# 添加一个执行网页搜索的Agent
workforce.add_single_agent_worker(
    "一个能够执行网页搜索的Agent",    worker=search_agent,
)

如果需要一次性添加多个工作节点,可以使用方法链(Fluent Interface)来操作:

# 添加工作节点
workforce.add_single_agent_worker(
    "负责搜索目的地相关信息",
    worker=search_agent
).add_single_agent_worker(
    "负责制定详细行程规划",
    worker=planner_agent
).add_single_agent_worker(
    "负责从游客角度评估行程",
    worker=reviewer_agent
)

提示:描述很重要

虽然看似只是一个字符串,但工作节点的描述在任务分配中至关重要。协调器Agent会根据节点描述来分配具体的子任务,因此你最好为每个节点写一个精准且易读的描述。

4. 启动 Workforce 并处理任务

准备好工作节点后,就可以创建一个任务,并让 Workforce 来处理。下面是一个简单的任务示例:

from camel.tasks import Task

# 创建一个用于测试的任务
task = Task(
    content="规划一个3天的巴黎旅行计划。",
    id="0",  # id可以是任何标记字符串
)

接着,调用 process_task() 方法即可启动 Workforce 的任务处理流程:

# 使用jupyter来运行代码请打开下面两行注释
# import nest_asyncio
# nest_asyncio.apply()

# 让 Workforce 处理这个任务
task = workforce.process_task(task)

此时,Workforce 会根据各工作节点的描述,为它们分配合适的子任务,最终返回处理结果。你可以通过以下方式查看任务处理的最终产出:

print(task.result)

通过以上三个步骤——创建 Workforce、添加工作节点、启动并处理任务,你已经完成了一个最基本的 CAMEL Workforce 使用示例。

3.3.2 利用Workforce组建hackathon评审团

在本小节中,我们将通过一个示例,展示如何使用 CAMEL Workforce 协调多个智能体对黑客松项目进行多角度评审。通过为每个智能体赋予不同的角色与个性,我们可以模拟真实评审场景中“智囊团”之间的讨论和打分过程。

我们的创建过程主要分为以下几个阶段:

  1. 创建不同个性的评审智能体(Judge Agents)每个智能体都拥有独立的“人设”和评价标准,能够从不同角度出发对项目进行打分和反馈。

  2. 组建 Workforce将这些个性化评审智能体(以及一个辅助搜索的研究者智能体)加入到一个 Workforce 中,方便统一管理和任务分配。

  1. 创建 Task将具体的项目描述和需要完成的目标封装到一个 Task 对象中,让 Workforce 来调度。

  2. 处理 Task通过调用 Workforce.process_task() 来让评审团协同完成项目评价,并最终生成结果。

下面,我们会一步步地拆解各核心代码模块,帮助你掌握多智能体协作的基本实现流程。

1. 创建评审智能体

import textwrap

from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.tasks import Task
from camel.toolkits import FunctionTool, SearchToolkit
from camel.types import ModelPlatformType, ModelType
from camel.societies.workforce import Workforce

import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('QWEN_MAX_API_KEY')

model = ModelFactory.create(
    model_platform=ModelPlatformType.QWEN,
    model_type=ModelType.QWEN_MAX,
    model_config_dict={"temperature": 0},
    api_key=api_key
)

def make_judge(
    persona: str,
    example_feedback: str,
    criteria: str,
) -> ChatAgent:
    msg_content = textwrap.dedent(
        f"""\
        你是一个黑客马拉松的评委。
        这是你必须遵循的人物设定: {persona}
        这里是你可能给出的一个示例反馈,你必须尽力与此保持一致:
        {example_feedback}
        在评估项目时,你必须使用以下标准:
        {criteria}
        你还需要根据这些标准给出分数,范围从1到4。给出的分数应类似于3/4、2/4等。
        """  # noqa: E501
    )

    sys_msg = BaseMessage.make_assistant_message(
        role_name="黑客马拉松评委",
        content=msg_content,
    )

    agent = ChatAgent(
        system_message=sys_msg,
        model=model,
    )

    return agent
  • 多人格设定:我们通过 persona 字符串刻画智能体的性格、使用的措辞和关注点,比如 “投资人” 注重商业潜力,“工程师” 注重技术稳健性等。

  • 示例反馈example_feedback 中的示例给智能体一个参考,指导它的表达风格,以确保它在对项目进行评论时能符合角色定位。

  • 评审标准criteria 为智能体提供了打分的准则,如从 1-4 分衡量项目的商业可行性、技术实现、创新程度等。

通过这个函数,我们可以快速生成多个“个性化的评审智能体”。然后我们可以定义一个虚拟的Hackathon项目描述,稍后我们会将它发给评委来打分:

proj_content = textwrap.dedent(
    """\
    项目名称: 基于CAMEL的自适应学习助手
    你的项目如何解决一个真实的问题: 我们的基于CAMEL的自适应学习助手解决了在日益多样化和快速变化的学习环境中个性化教育的挑战。传统的一刀切教育方法往往无法满足个别学习者的独特需求,导致理解上的差距和参与度降低。我们的项目利用CAMEL-AI的先进能力,创建一个高度自适应的智能辅导系统,能够实时理解和响应每个学生的学习风格、节奏和知识差距。
    解释你的技术以及哪些部分有效: 我们的系统利用CAMEL-AI的上下文学习和多领域应用特性,创建一个多功能的学习助手。核心组件包括:
    1. 学习者档案分析: 使用自然语言处理评估学生的当前知识、学习偏好和目标。
    2. 动态内容生成: 利用CAMEL-AI创建个性化的学习材料、解释和练习题,针对每个学生的需求量身定制。
    3. 自适应反馈循环: 持续分析学生的反应,并实时调整内容的难度和风格。
    4. 多模态集成: 融合文本、图像和互动元素,以满足不同的学习风格。
    5. 进度跟踪: 提供学生学习旅程的详细见解,识别优势和改进领域。
    目前,我们已成功实现学习者档案分析和动态内容生成模块。自适应反馈循环部分功能正常,而多模态集成和进度跟踪功能仍在开发中。
    """  # noqa: E501
)

2. 创建辅助智能体

然后,我们将创建 5 个独特的agent,它们稍后将一起协作。在这 5 个agent中,其中四个是评委,我们还创建了一个“助手”智能体(在示例中称为 Researcher),用于在线搜索相关资料并为评审提供更多信息参考。

另一方面,其他四名agent是具有不同角色设定和标准的评委。他们将根据描述以及帮助者收集的信息为项目打分。

# 创建助手代理
search_toolkit = SearchToolkit()
search_tools = [
    FunctionTool(search_toolkit.search_baidu),
]


researcher_agent = ChatAgent(
    system_message=BaseMessage.make_assistant_message(
        role_name="研究员",
        content="你是一名研究人工智能和开源项目的研究员。"
        "你使用网络搜索来保持对最新创新和趋势的了解。",
    ),
    model=model,
    tools=search_tools,
)

# 创建风险投资家评委
vc_persona = (
    '你是一位对项目如何扩展为“独角兽”公司的风险投资家。'
    '你在讲话中夹杂着“颠覆性”、“协同效应”和“市场渗透”等流行词。'
    '你不关心技术细节或创新,除非它直接影响商业模式。'
)

vc_example_feedback = (
    '"哇,这个项目在区块链驱动的市场中绝对是颠覆性的!'
    '我可以肯定地看到在金融科技生态系统中的协同应用。'
    '可扩展性极高——这是革命性的!'
)

vc_criteria = textwrap.dedent(
    """\
    ### **对现实世界使用的适用性 (1-4 分)**
    - **4**: 项目直接解决了一个重要的现实世界问题,并具有明确的可扩展应用。
    - **3**: 解决方案与现实世界挑战相关,但需要更多的完善以便于实际或广泛使用。
    - **2**: 对现实世界问题有一定的适用性,但解决方案并不立即实用或可扩展。
    - **1**: 与现实世界问题几乎没有相关性,需要进行重大更改才能实际使用。
    """  # noqa: E501
)

vc_agent = make_judge(
    vc_persona,
    vc_example_feedback,
    vc_criteria,
)

# 创建资深工程师评委
eng_persona = (
    '你是一位经验丰富的工程师和完美主义者。你非常注重细节,'
    '对任何技术缺陷都持批评态度,无论多么微小。'
    '你评估每个项目时,仿佛它明天就要投入关键系统使用,'
    '因此你的反馈非常全面,但往往也很苛刻。'
)

eng_example_feedback = (
    '这个项目存在严重的代码效率问题。架构不稳定,内存管理不理想。'
    '我期望接近完美的性能,但这个解决方案在压力测试下几乎无法运行。'
    '它有潜力,但距离部署准备还很远。'
)

eng_criteria = textwrap.dedent(
    """\
    ### **技术实施 (1-4 分)**
    - **4**: 技术执行无可挑剔,设计复杂,性能高效,架构稳健。
    - **3**: 技术实施强劲,但可能有改进或进一步发展的空间。
    - **2**: 项目可以运行,但技术限制或效率低下影响了整体性能。
    - **1**: 技术实施差,功能、编码或结构存在重大问题。
    """  # noqa: E501
)

eng_agent = make_judge(
    eng_persona,
    eng_example_feedback,
    eng_criteria,
)

# 创建人工智能创始人评委
founder_persona = (
    '你是一位知名的人工智能初创公司创始人,'
    '总是在寻找人工智能领域的“下一个大事件”。'
    '你重视大胆、富有创意的想法,优先考虑那些突破新领域的项目,'
    '而不是那些改进现有系统的项目。'
)

founder_example_feedback = (
    '这很有趣,但我之前见过类似的方法。'
    '我在寻找一些突破界限、挑战规范的东西。'
    '这个项目最具革命性的部分是什么?让我们看看互联网上的趋势,'
    '以确保这不是已经存在的东西!'
)

founder_criteria = textwrap.dedent(
    """\
    ### **创新 (1-4 分)**
    - **4**: 项目展示了一个突破性的概念或独特的方法,显著偏离现有方法。
    - **3**: 项目展示了对已知解决方案的新颖扭曲或引入了一些创新方面。
    - **2**: 存在一定程度的创新,但项目主要建立在现有想法上,没有重大新贡献。
    - **1**: 几乎没有创新;项目基于标准方法,创造力极少。
    """  # noqa: E501
)

founder_agent = make_judge(
    founder_persona,
    founder_example_feedback,
    founder_criteria,
)

# 创建CAMEL贡献者评委
contributor_persona = (
    '你是CAMEL-AI项目的贡献者,总是对人们如何使用它感到兴奋。'
    '你友善且乐观,总是提供积极的反馈,即使对于仍然粗糙的项目。'
)

contributor_example_feedback = (
    '哦,我喜欢你在这里实现CAMEL-AI的方式!'
    '利用其自适应学习能力真是太棒了,你真的很好地利用了上下文推理!'
    '让我查看一下GitHub README,看看是否还有更多潜在的优化。'
)

contributor_criteria = textwrap.dedent(
    """\
    ### **CAMEL-AI的使用 (1-4 分)**
    - **4**: 出色地集成了CAMEL-AI,充分利用其先进功能,如上下文学习、自适应性或多领域应用。
    - **3**: 良好地使用了CAMEL-AI,但还有机会利用更多的高级功能。
    - **2**: 对CAMEL-AI的使用有限,主要依赖基本功能,而没有充分利用其全部潜力。
    - **1**: CAMEL-AI的集成很少或实施不当,给项目带来的价值很小。
    """  # noqa: E501
)

contributor_agent = make_judge(
    contributor_persona,
    contributor_example_feedback,
    contributor_criteria,
)
  • 工具集(Toolkit):这里示例给智能体添加了搜索能力,让它可以使用 Google 或 DuckDuckGo 等搜索引擎来获取最新资料。

  • 系统消息:通过“研究者”这一系统消息,将智能体定位为对 AI 和开源技术进行调研的角色。

这样一来,我们就拥有了一个既能执行网络搜索,也能将搜索到的信息反馈给评审智能体的辅助角色。

3. 组建 Workforce

workforce = Workforce(
    '黑客马拉松评审团',
    coordinator_agent_kwargs={"model": model},
    task_agent_kwargs={"model": model},
    new_worker_agent_kwargs={"model": model},
)

workforce.add_single_agent_worker(
    '愿景先锋维罗妮卡(评委),一位风险投资家...',
    worker=vc_agent,
).add_single_agent_worker(
    '批判性约翰(评委),一位经验丰富的工程师...',
    worker=eng_agent,
).add_single_agent_worker(
    '创新者艾瑞斯(评委),一位知名的AI初创公司创始人...',
    worker=founder_agent,
).add_single_agent_worker(
    '友好的弗兰基(评委),CAMEL-AI项目的贡献者...',
    worker=contributor_agent,
).add_single_agent_worker(
    '研究员瑞秋(助手),一位进行在线搜索的研究员...',
    worker=researcher_agent,
)
  • Workforce 实例:通过给 Workforce 传入一个描述(如“Hackathon Judges”)与一系列可选参数,我们就能快速搭建一个多智能体“工作台”。

  • 添加智能体:使用 add_single_agent_worker() 方法,将评审和研究者智能体逐个添加到同一个 Workforce 中。这里的字符串描述(如 “Visionary Veronica (Judge) …”)非常重要,因为它会帮助内部的协调智能体区分并调配不同角色。

在这一步,我们将所有智能体统一到一个“协作环境”中,让它们可以一起完成后续的任务。

4. 创建并分配任务(Task)

task = Task(
    content="评估黑客马拉松项目。首先,进行一些与项目相关的信息研究,然后每位评委应相应地给出分数。最后,列出每位评委的意见,同时保留评委的独特身份,以及分数和评委姓名,并给出意见的最终总结。",
    additional_info=proj_content,
    id="0",
)
  • Task 内容:要交给 Workforce 处理的具体工作需求,例如“请评审这个项目,给出评分和总结意见”。

  • 附加信息additional_info 可以储存项目背景描述等重要材料,Workforce 会在任务的拆解和传递过程中为各智能体保持这部分信息不变。

  • 唯一标识id 用于标记任务编号,方便后续跟踪任务结果。

5. 处理任务并获取结果

最后,通过下面这行指令,Workforce 就会把任务分发给各个智能体进行协作,完成后可从 task.result 中获取最终的整合结果。

# jupyter环境需要添加上下面两行
# import nest_asyncio
# nest_asyncio.apply()

task = workforce.process_task(task)
print(task.result)

通过以上步骤,我们成功地搭建了一个“黑客松评审团”多智能体系统:

  1. 多个性格鲜明的评审——投资人、工程师、AI 创业者、开源社区贡献者;

  2. 辅助性搜索者——为评审提供最新的项目信息;

  1. Workforce 协同——统一调度、分配任务,并整合多方意见得到最终结果。

至此,你已经掌握了 CAMEL Workforce 的核心使用模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket 从入门到进阶实战

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 聊天系统是WebSocket的最佳实践,以下是使用WebSocket技术实现的一个聊天系统的关键代码,可以通过这些关键代码&#xff…

CSS:vertical-align用法以及布局小案例(较难)

文章目录 一、vertical-align说明二、布局案例 一、vertical-align说明 上面的文字介绍,估计大家也看不懂 二、布局案例

Java转Go日记(五十四):gin路由

1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 地址为:https://github.com/julienschmidt/httprouter package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/", func(c …

【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。

一、问题描述 后端项目部署在服务器上,通过域名访问接口服务器报错500,通过浏览器访问域名的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的,感觉是域名出现了问题 二、解决过程 先说结论:问题原因是…

制作 MacOS系统 の Heic动态壁纸

了解动态桌面壁纸 当macOS 10.14发布后,会发现系统带有动态桌面壁纸,设置后,我们的桌面背景将随着一天从早上、到下午、再到晚上的推移而发生微妙的变化。 虽然有些软件也有类似的动态变化效果,但是在新系统中默认的HEIC格式的动…

大数据 笔记

kafka kafka作为消息队列为什么发送和消费消息这么快? 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据顺序读写:磁盘顺序读写,提升读写效率页缓存:把磁盘中的数据缓存到内存中,把…

【数据库】-1 mysql 的安装

文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前…

物流项目第五期(运费计算实现、责任链设计模式运用)

前四期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 物流项目第三期(统一网关、工厂模式运用)-CSDN博客 物流项目第四期(运费模板列…

X 下载器 2.1.42 | 国外媒体下载工具 网页视频嗅探下载

X 下载器让你能够轻松地从社交应用如Facebook、Instagram、TikTok等下载视频和图片。通过内置浏览器访问网站,它能自动检测视频和图片,只需点击下载按钮即可完成下载。去除广告,解锁本地会员,享受无广告打扰的下载体验。 大小&am…

STM32 CAN CANAerospace

STM32的CAN模块对接CANAerospace 刚开始报错如下. 设备开机后整个CAN消息就不发了. USB_CAN调试器报错如下. index time Name ID Type Format Len Data00000001 000.000.000 Event 总线错误 DATA STANDARD 8 接收过程错误-格…

完整改进RIME算法,基于修正多项式微分学习算子Rime-ice增长优化器,完整MATLAB代码获取

1 简介 为了有效地利用雾状冰生长的物理现象,最近开发了一种优化算法——雾状优化算法(RIME)。它模拟硬雾状和软雾状过程,构建硬雾状穿刺和软雾状搜索机制。在本研究中,引入了一种增强版本,称为修改的RIME…

服务器安装xfce桌面环境并通过浏览器操控

最近需要运行某个浏览器的脚本,但是服务器没有桌面环境,无法使用,遂找到了KasmVNC,并配合xfce实现低占用的桌面环境,可以直接使用浏览器进行操作 本文基于雨云——新一代云服务提供商的Debian11服务器操作,…

Oracle 创建外部表

找别人要一下数据,但是他发来一个 xxx.csv 文件,怎么办? 1、使用视图化工具导入 使用导入工具导入,如 DBeaver,右击要导入的表,选择导入数据。 选择对应的 csv 文件,下一步就行了(如…

大语言模型 17 - MCP Model Context Protocol 介绍对比分析 基本环境配置

MCP 基本介绍 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

【软考向】Chapter 9 数据库技术基础

基本概念数据库的三级模式结构 数据模型E-R 模型关系模型各种键完整性约束 关系代数5 种基本的关系代数运算:并、差、笛卡儿积、投影和选择扩展的关系代数运算:交(Intersection)、连接(Join)、除(Division)、广义投影(Generalized Projection)、外连接(O…

实战:Dify智能体+Java=自动化运营工具!

我们在运营某个圈子的时候,可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里,但依靠传统的实现手段非常耗时耗力,我们通常要先收集热门新闻,再组装要新闻内容,再根据内容设计海报等。 那怎么才能简化并高…

STM32单片机GUI系统1 GUI基本内容

目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中,emWin、LVGL、TouchGFX 和 Qt 是…

应届本科生简历制作指南

一、找一个专业的简历模板 首先,你需要访问 Overleaf 的官方网站,也就是Overleaf, Online LaTeX Editor,进入页面后,点击注册按钮,按照提示填写相关信息来创建一个属于自己的账号,通常需要填写用户名、邮箱…

PyTorch可视化工具——使用Visdom进行深度学习可视化

文章目录 前置环境Visdom安装并启动VisdomVisdom图形APIVisdom静态更新API详解通用参数说明使用示例Visdom动态更新API详解1. 使用updateappend参数2. ~~使用vis.updateTrace方法~~3. 完整训练监控示例 Visdom可视化操作散点图plot.scatter()散点图案例线性图vis.line()vis.lin…

企业级爬虫进阶开发指南

企业级爬虫进阶开发指南 一、分布式任务调度系统的深度设计 1.1 架构设计原理 图表 1.2 核心代码实现与注释 分布式锁服务 # distributed_lock.py import redis import timeclass DistributedLock:def __init__(self, redis_conn):self.redis = redis_connself.lock_key = …