目录

CAMEL-学习笔记一

CAMEL 学习笔记一

CAMEL (Communicative Agents for “Mind” Exploration of Large Language Models)是一个开源的多智能体框架,专注于构建基于大语言模型的智能体交互系统。该框架通过角色扮演和结构化对话机制,实现智能体之间的有效协作。在CAMEL框架中,ChatAgent 是最基础的智能体单元,负责处理对话逻辑和任务执行。而RolePlaying 和Workforce 则是多智能体系统,用于协调多个智能体的协作。

RolePlaying

一个典型的智能体包含三个核心部分:

  • 感知模块:处理输入信息
  • 决策模块:制定行动计划
  • 执行模块:实施具体行动

结构化提示词引导角色行为 + 环境协调消息路由,使得 AI 智能体能够模拟人类团队的任务协作过程。

跑demo

from colorama import Fore

from camel.societies import RolePlaying
from camel.utils import print_text_animated
from camel.models import ModelFactory
from camel.types import ModelPlatformType


model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/Qwen2.5-72B-Instruct",
    url='https://api-inference.modelscope.cn/v1/',
    api_key='xxx'
)

def main(model=model, chat_turn_limit=50) -> None:
    task_prompt = "我们是一家材料开发公司,很多工厂任务,你是一个排产专家,你会设计什么方案排产呢?保证各项任务紧密安全不冲突"#设置任务目标
    role_play_session = RolePlaying(
        assistant_role_name="排产专家",#设置AI助手角色名
        assistant_agent_kwargs=dict(model=model),
        user_role_name="操作员",#设置用户角色名,在roleplay中,user用于指导AI助手完成任务
        user_agent_kwargs=dict(model=model),
        task_prompt=task_prompt,
        with_task_specify=True,
        task_specify_agent_kwargs=dict(model=model),
        output_language='中文'#设置输出语言
    )

    print(
        Fore.GREEN
        + f"AI 助手系统消息:\n{role_play_session.assistant_sys_msg}\n"
    )
    print(
        Fore.BLUE + f"AI 用户系统消息:\n{role_play_session.user_sys_msg}\n"
    )

    print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")
    print(
        Fore.CYAN
        + "指定的任务提示:"
        + f"\n{role_play_session.specified_task_prompt}\n"
    )
    print(Fore.RED + f"最终任务提示:\n{role_play_session.task_prompt}\n")

    n = 0
    input_msg = role_play_session.init_chat()
    while n < chat_turn_limit:
        n += 1
        assistant_response, user_response = role_play_session.step(input_msg)

        if assistant_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 助手已终止。原因: "
                    f"{assistant_response.info['termination_reasons']}."
                )
            )
            break
        if user_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 用户已终止。"
                    f"原因: {user_response.info['termination_reasons']}."
                )
            )
            break

        print_text_animated(
            Fore.BLUE + f"AI 用户:\n\n{user_response.msg.content}\n"
        )
        print_text_animated(
            Fore.GREEN + "AI 助手:\n\n"
            f"{assistant_response.msg.content}\n"
        )

        if "CAMEL_TASK_DONE" in user_response.msg.content:
            break

        input_msg = assistant_response.msg

if __name__ == "__main__":
    main()

初步的使用体验还是挺流畅的,回答很有启发。下一步希望深入了解Agent 重要api:step, init_chat 这些的使用。 roleplaying 通过给定两个不同角色进行对话的方式来完成任务,设计还挺巧妙的。

问题

  • 拆解任务是如何做到的?主要是通过 prompt 吗?

    感觉相较于 langgraph而言,camel 主要多了一个角色扮演的功能。

  • 试用了两个 tools 调用的案例,都失败了,还要进一步查看原因。不知道对tool 的调用封装逻辑是怎么样的,会对模型本身支持function call 与否有要求么?