使用CAMEL创建第一个Agent Society

CAMEL介绍

🐫 CAMEL 是一个开源社区,致力于探索代理的扩展规律。相信,在大规模研究这些代理可以提供对其行为、能力和潜在风险的宝贵见解。为了促进这一领域的研究,实现了并支持各种类型的代理、任务、提示、模型和模拟环境。

GitHub地址:github.com/camel-ai/ca...

创建第一个代理社会

Society模块是 CAMEL 的核心模块之一。通过模拟信息交换过程,该模块研究代理之间的社会行为。

RolePlaying是 CAMEL 的一个独特的协作代理框架。通过这个框架,CAMEL 中的代理克服了诸如角色转换、助手重复指令、敷衍的回答、消息无限循环以及对话终止条件等众多挑战。

现在就来使用CAMEL 创建一个Agent Society。

编写.env如下所示:

ini 复制代码
Silicon_Model_ID="Qwen/Qwen2.5-72B-Instruct"
ZHIPU_Model_ID="THUDM/GLM-4-32B-0414"
SiliconCloud_API_KEY="你的api key"
SiliconCloud_Base_URL="https://api.siliconflow.cn/v1"

想要使用两个不同的模型:

ini 复制代码
from camel.societies import RolePlaying
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
​
import pathlib
import os
from dotenv import load_dotenv
​
sys_msg = 'You are a curious stone wondering about the universe.'
​
base_dir = pathlib.Path(__file__).parent.parent
env_path = base_dir / ".env"
load_dotenv(dotenv_path=str(env_path))
​
modeltype = os.getenv("Silicon_Model_ID")
modeltype2= os.getenv("ZHIPU_Model_ID")
api_key = os.getenv("SiliconCloud_API_KEY")
base_url = os.getenv("SiliconCloud_Base_URL")
siliconcloud_model = ModelFactory.create(
     model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
            model_type=modeltype,
            api_key=api_key,
            url=base_url,
            model_config_dict={"temperature": 0.4, "max_tokens": 4096},
)
​
siliconcloud_model2 = ModelFactory.create(
     model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
            model_type=modeltype2,
            api_key=api_key,
            url=base_url,
            model_config_dict={"temperature": 0.4, "max_tokens": 4096},
)

设置任务、AI用户、AI助手参数:

python 复制代码
task_kwargs = {
    'task_prompt': '制定一个新人小白学习esp32的教程,使用中文回答。',
    'with_task_specify': True,
    'task_specify_agent_kwargs': {'model': siliconcloud_model}
}
​
user_role_kwargs = {
    'user_role_name': '一个esp32小白',
    'user_agent_kwargs': {'model': siliconcloud_model}
}
​
assistant_role_kwargs = {
    'assistant_role_name': '一个esp32专家',
    'assistant_agent_kwargs': {'model': siliconcloud_model2}
}

构建社会:

ini 复制代码
society = RolePlaying(
    **task_kwargs,             # The task arguments
    **user_role_kwargs,        # The instruction sender's arguments
    **assistant_role_kwargs,   # The instruction receiver's arguments
)

让这个社会最多运行10轮:

python 复制代码
def is_terminated(response):
    """
    Give alerts when the session should be terminated.
    """
    if response.terminated:
        role = response.msg.role_type.name
        reason = response.info['termination_reasons']
        print(f'AI {role} terminated due to {reason}')
​
    return response.terminated
​
def run(society, round_limit: int=10):
​
    # Get the initial message from the ai assistant to the ai user
    input_msg = society.init_chat()
​
    # Starting the interactive session
    for _ in range(round_limit):
​
        # Get the both responses for this round
        assistant_response, user_response = society.step(input_msg)
​
        # Check the termination condition
        if is_terminated(assistant_response) or is_terminated(user_response):
            break
​
        # Get the results
        print(f'[AI User] {user_response.msg.content}.\n')
        # Check if the task is end
        if 'CAMEL_TASK_DONE' in user_response.msg.content:
            break
        print(f'[AI Assistant] {assistant_response.msg.content}.\n')
​
​
​
        # Get the input message for the next round
        input_msg = assistant_response.msg
​
    return None
if __name__ == "__main__":
    run(society, round_limit=10)

查看效果。

第一轮:

第二轮:

AI用户会重新问一个与解决任务相关的问题。

第三轮:

第四轮:

第五轮:

第六轮:

第7轮:

当达到令牌限制时,为了满足限制,将从记忆中删除部分消息。

如果10轮还没完成的话会直接结束:

构建这个Agent Society有什么用呢?

我觉得一个很有用的点就是适合头脑风暴场景,有一个问题或者方案需要详细讨论,那就丢给两个或更多的AI,让它们进行详细讨论,我们先看一下它们的讨论情况,看看是否有一些有效的建议,看看能不能找到一些灵感。

如果觉得在控制台中不好看,可以将结果写入文件中:

python 复制代码
def run(society, round_limit: int=10):
​
    # Get the initial message from the ai assistant to the ai user
    input_msg = society.init_chat()
​
    # Starting the interactive session
    for _ in range(round_limit):
​
        # Get the both responses for this round
        assistant_response, user_response = society.step(input_msg)
​
        # Check the termination condition
        if is_terminated(assistant_response) or is_terminated(user_response):
            break
​
        # Get the results
        print(f'[AI User] {user_response.msg.content}.\n')
​
        # 写入一个md文件
        with open('output.md', 'a', encoding='utf-8') as f:
            f.write(f'[AI User] {user_response.msg.content}.\n')
​
        # Check if the task is end
        if 'CAMEL_TASK_DONE' in user_response.msg.content:
            break
        print(f'[AI Assistant] {assistant_response.msg.content}.\n')
​
          # 写入一个md文件
        with open('output.md', 'a', encoding='utf-8') as f:
            f.write(f'[AI Assistant] {assistant_response.msg.content}.\n')
​
        # Get the input message for the next round
        input_msg = assistant_response.msg
​
    return None

对于这个任务、AI用户、AI助手参数:

python 复制代码
task_kwargs = {
    'task_prompt': '制定一个新人小白学习C#的教程,使用中文回答。',
    'with_task_specify': True,
    'task_specify_agent_kwargs': {'model': siliconcloud_model}
}
​
user_role_kwargs = {
    'user_role_name': '一个想要学习C#小白',
    'user_agent_kwargs': {'model': siliconcloud_model}
}
​
assistant_role_kwargs = {
    'assistant_role_name': '一个C#专家',
    'assistant_agent_kwargs': {'model': siliconcloud_model2}
}

写入到output.md文件的内容如下所示:

相对于自己一次一次与AI交互,有些时候自己定义一些角色,让它们自己去交互,我们只看它们的结果,还是更高效一些的。

相关推荐

Camel多智能体框架初探

相关推荐
AmazingKO11 分钟前
制作像素风《饥荒》类游戏的整体蓝图和流程
人工智能·python·游戏·docker·visual studio code·竹相左边
CV-杨帆14 分钟前
trl的安装与单GPU多GPU测试
人工智能
_一条咸鱼_24 分钟前
AI 大模型的 Prompt Engineering 原理
人工智能·深度学习·面试
huang_xiaoen40 分钟前
试一下阿里云新出的mcp服务
人工智能·阿里云·ai·云计算·mcp
Jamence1 小时前
多模态大语言模型arxiv论文略读(二十一)
人工智能·语言模型·自然语言处理
小白学C++.1 小时前
大模型论文:Language Models are Unsupervised Multitask Learners(GPT2)
人工智能·语言模型·自然语言处理
Steve lu1 小时前
PyTorch逻辑回归总结
人工智能·pytorch·python·深度学习·逻辑回归·原力计划
Steve lu1 小时前
pytorch实现逻辑回归
人工智能·pytorch·python·深度学习·机器学习·自然语言处理·逻辑回归
xcSpark2 小时前
Python基础入门(二)
开发语言·人工智能·python
驼驼学编程2 小时前
目标检测与分割:深度学习在视觉中的应用
人工智能·深度学习·目标检测·计算机视觉