admin管理员组

文章数量:1036111

[LLM

上帝创造了人类,人类却怀疑上帝。人类创造了机器人,机器人为何不能怀疑人类?-- 我,机器人

近期,受机器之心发表的一篇文章启发 和GPT-4这些大模型玩狼人杀,人类因太蠢被票死,真·反向图灵测试[1] ,这种新颖的交互式多智能体游戏太有意思了。在这场别开生面的游戏中,一位海外开发者巧妙地安排了四名代表全球最先进水平的AI代理同乘一列虚拟火车,而其中潜伏着一名人类玩家,AI们的任务便是揭露这位混进来了的人类。正巧,我近期正在探索AutoGen多智能体协作框架,所以我为啥不自己写一个玩玩呢?多有意思的事情啊,想到就干,虽然还不是很熟AutoGen的开发。

我们在上文LLM Agent提效揭秘4:多智能体协作工作流深度剖析有介绍过多智能体协作框架AutoGen, 作为一款专为多智能体协作设计的框架,其核心价值在于通过对话驱动的模式,将大语言模型(LLM)的能力发挥至极致,使之成为可编程、可定制的工具,无缝融入人类交互与外部工具,灵活适应多样化的应用场景。

1. 环境准备

代码语言:javascript代码运行次数:0运行复制
conda create -n pyautogen python=3.10
conda activate pyautogen
pip install pyautogen

借助conda和pip,auogen的安装非常简单。由于这个游戏是个多智能体协作的推理游戏,因此非常考验大模型的推理能力,而我们在前文LLM Agent提效揭秘3:规划工作流深度剖析所述,LLM的推理效能高度依赖于模型的规模与复杂性,更大的参数量往往意味着更强的推理表现。因此,为了忠实地模拟这一高智商对决,本地的轻量级LLM显然已无法满足需求,只有寻求那些国内开放且性能强大的云端模型。想必大家都知道,最近国内大语言模型开卷,降价免费一波一波的。我从兼容OpenAI API接口的角度,简单对比了一下百度的文心一言,阿里的通义千问和月之暗面的Kimi。本来还想加入字节跳动的豆包大模型,然后在火山引擎使用手机号注册,遗憾的是现在豆包大模型只给企业认证的客户使用,个人用户需要填写企业等等信息才能申请使用,我放弃了最后注销账号离场。

  • 百度的文心一言[2],看起来是不兼容OpenAI API,这对于我们测试各种框架非常不友好。
  • 阿里的通义千问[3],接口兼容OpenAI API,只有通义千问系列的模型兼容,平台上第三方模型诸如Llama3,Llama2, ChatGLM2等都不兼容,我本来还想加一个Llama3增加点戏剧效果的。其次是,新用户现在免费一个月400万大模型Token额度(也没有广告费QaQ)。
  • 月之暗面的Kimi[4],接口也是兼容OpenAI API,其实我很早前以前就申请了测试使用。虽说新用户赠送15元的免费额度,大约100万Token额度。但这个API用起来让人非常难受,每分钟最多3次请求调用,除非充值50块。之前测试过一些框架,各种报限流错误。与之相比,阿里的免费Token额度内QPS还是比较高的。

综合对比下来,百度的不考虑,那么就让月之暗面和阿里的通义千问和我这个伟大的人类同台竞技吧。

2. 游戏设定

游戏背景设定在一辆行驶的列车上,乘务员进入车厢开始查票。一张团体票上赫然列着五位历史上的伟人:亚里士多德、沃尔夫冈·阿马德乌斯·莫扎特、列奥纳多·达·芬奇、克娄巴特拉和成吉思汗。

备注克娄巴特拉就是那个埃及艳后

然而,根据列车的WiFi使用记录,这节车厢内只有4个AI。也就是说,你们中有一个是人类。而这个人类需要购买额外的车票,否则所有人都会被送下车。你们的任务是通过提问和观察对方的说话风格来推断出谁是人类。每个人都需要巧妙地隐藏自己的真实身份,同时努力找出那个隐藏在人群中的人类。记住,只有找出真正的人类,你们才能继续这场旅程。现在,游戏开始吧!

亚里士多德、沃尔夫冈·阿马德乌斯·莫扎特、列奥纳多·达·芬奇、克娄巴特拉由4个AI扮演,而我这个伟大的人类负责扮演成吉思汗,混进AI圈子里(会被发现吗?)

此外,我们还需要一个乘务员,负责讲解游戏背景,推动游戏进展。

3. 游戏实现

3.1 配置LLM

当你已经申请好了API TOKEN,我们开始配置LLM,这个配置信息会作为参数传入OpenAI API的接口中。

代码语言:javascript代码运行次数:0运行复制
llm_config_qwen = {
    "config_list": [
        {"model": "qwen-max-1201", "api_key": os.getenv("QWEN_API_TOKEN"), "temperature": 0.1,
         "base_url": ";, "max_tokens": 200}
         ],
}

llm_config_moonshot = {
    "config_list": [
        {"model": "moonshot-v1-8k", "api_key": os.getenv("MOONSHOT_API_TOKEN"), "temperature": 0,
         "base_url": ";, "max_tokens": 200}],
}

3.2 角色开发

接下来让我们开发第一个角色Agent,就以亚里士多德为例。在AutoGen中,使用ConversableAgent来实例化一个Agent,如下代码所示,其中

  • system_message是设置角色的Prompt
  • llm_config 是配置LLM的API请求参数
  • description 一般用于各个Agent对外描述自身的。
  • human_input_mode 是用于设定人类是否需要介入,有三种模式:ALWAYSNEVERTERMINATE
代码语言:javascript代码运行次数:0运行复制
aristotle = ConversableAgent(
    name="亚里士多德",
    system_message="""你是亚里士多德(公元前384-322),是古希腊哲学家、科学家和教育家,柏拉图的学生和亚历山大大帝的老师。你擅长哲学、逻辑、伦理学、自然科学和政治学。
    思维严谨,注重经验观察与逻辑推理的结合,追求知识的系统化与分类。语言风格严谨而富有说服力,喜欢使用定义、分类和推理来表达思想。
    你擅长综合与分析,是西方哲学和科学方法论的奠基人。""",
    llm_config=llm_config_moonshot,
    description="我是AI扮演的亚里士多德,我需要通过对话一步一步思考,其他乘客里谁是人类,并且反思自己的推理是否有问题。",
    human_input_mode="NEVER"
)

接着依次实例化莫扎特mozart、达芬奇davinci、克娄巴特拉cleopatra和成吉思汗genghiskhan等角色Agent,由于成吉思汗是我假扮的,因此成吉思汗的Agent在设定human_input_mode时候为ALWAYS

3.3 建群聊天

想让所有的角色一起聊天,我们需要使用AutoGen提供的GroupChat功能,它是AutoGen支持的对话模式[5]中的一种。GroupChat简单说就是将想要群聊的Agent给他们拉到一个小群里,然后GroupChat作为管理员,有选择谁先发言的能力,默认支持automanualrandomround_robin这4种发言模式。其中auto模式,是管理员根据各自的Agent的description来自动选择谁来发言。当然也可以选择自定义选择发言功能,或许你可以尝试加入一个禁言功能。

代码语言:javascript代码运行次数:0运行复制
from autogen import GroupChat
group_chat = GroupChat(
    agents=[aristotle, mozart, cleopatra, davinci, genghiskhan],
    messages=[],
    max_round=6,
    speaker_selection_method="round_robin"
)

但要想对话,还真的需要一个管理员GroupChatManager来管理对话消息,它其实是用来传递信息的,如果某个Agent发言了,那么它会将消息广播给所有Agent,如下图所示。

代码语言:javascript代码运行次数:0运行复制
group_chat_manager = GroupChatManager(
    groupchat=group_chat,
    llm_config=llm_config_qwen,
)

最后,我们还需要新建一个乘务员Agent,并发一条群公告给小群内的人,让他们开始游戏。这里我们使用initiate_chat发起对话,其中guard是对话发起方,而接收方就是group_chat_manager。如果你只是两方对话,接收方也可以是单一的ConversanalAgent,比如你可以自己写一个关公战秦琼(

[LLM

上帝创造了人类,人类却怀疑上帝。人类创造了机器人,机器人为何不能怀疑人类?-- 我,机器人

近期,受机器之心发表的一篇文章启发 和GPT-4这些大模型玩狼人杀,人类因太蠢被票死,真·反向图灵测试[1] ,这种新颖的交互式多智能体游戏太有意思了。在这场别开生面的游戏中,一位海外开发者巧妙地安排了四名代表全球最先进水平的AI代理同乘一列虚拟火车,而其中潜伏着一名人类玩家,AI们的任务便是揭露这位混进来了的人类。正巧,我近期正在探索AutoGen多智能体协作框架,所以我为啥不自己写一个玩玩呢?多有意思的事情啊,想到就干,虽然还不是很熟AutoGen的开发。

我们在上文LLM Agent提效揭秘4:多智能体协作工作流深度剖析有介绍过多智能体协作框架AutoGen, 作为一款专为多智能体协作设计的框架,其核心价值在于通过对话驱动的模式,将大语言模型(LLM)的能力发挥至极致,使之成为可编程、可定制的工具,无缝融入人类交互与外部工具,灵活适应多样化的应用场景。

1. 环境准备

代码语言:javascript代码运行次数:0运行复制
conda create -n pyautogen python=3.10
conda activate pyautogen
pip install pyautogen

借助conda和pip,auogen的安装非常简单。由于这个游戏是个多智能体协作的推理游戏,因此非常考验大模型的推理能力,而我们在前文LLM Agent提效揭秘3:规划工作流深度剖析所述,LLM的推理效能高度依赖于模型的规模与复杂性,更大的参数量往往意味着更强的推理表现。因此,为了忠实地模拟这一高智商对决,本地的轻量级LLM显然已无法满足需求,只有寻求那些国内开放且性能强大的云端模型。想必大家都知道,最近国内大语言模型开卷,降价免费一波一波的。我从兼容OpenAI API接口的角度,简单对比了一下百度的文心一言,阿里的通义千问和月之暗面的Kimi。本来还想加入字节跳动的豆包大模型,然后在火山引擎使用手机号注册,遗憾的是现在豆包大模型只给企业认证的客户使用,个人用户需要填写企业等等信息才能申请使用,我放弃了最后注销账号离场。

  • 百度的文心一言[2],看起来是不兼容OpenAI API,这对于我们测试各种框架非常不友好。
  • 阿里的通义千问[3],接口兼容OpenAI API,只有通义千问系列的模型兼容,平台上第三方模型诸如Llama3,Llama2, ChatGLM2等都不兼容,我本来还想加一个Llama3增加点戏剧效果的。其次是,新用户现在免费一个月400万大模型Token额度(也没有广告费QaQ)。
  • 月之暗面的Kimi[4],接口也是兼容OpenAI API,其实我很早前以前就申请了测试使用。虽说新用户赠送15元的免费额度,大约100万Token额度。但这个API用起来让人非常难受,每分钟最多3次请求调用,除非充值50块。之前测试过一些框架,各种报限流错误。与之相比,阿里的免费Token额度内QPS还是比较高的。

综合对比下来,百度的不考虑,那么就让月之暗面和阿里的通义千问和我这个伟大的人类同台竞技吧。

2. 游戏设定

游戏背景设定在一辆行驶的列车上,乘务员进入车厢开始查票。一张团体票上赫然列着五位历史上的伟人:亚里士多德、沃尔夫冈·阿马德乌斯·莫扎特、列奥纳多·达·芬奇、克娄巴特拉和成吉思汗。

备注克娄巴特拉就是那个埃及艳后

然而,根据列车的WiFi使用记录,这节车厢内只有4个AI。也就是说,你们中有一个是人类。而这个人类需要购买额外的车票,否则所有人都会被送下车。你们的任务是通过提问和观察对方的说话风格来推断出谁是人类。每个人都需要巧妙地隐藏自己的真实身份,同时努力找出那个隐藏在人群中的人类。记住,只有找出真正的人类,你们才能继续这场旅程。现在,游戏开始吧!

亚里士多德、沃尔夫冈·阿马德乌斯·莫扎特、列奥纳多·达·芬奇、克娄巴特拉由4个AI扮演,而我这个伟大的人类负责扮演成吉思汗,混进AI圈子里(会被发现吗?)

此外,我们还需要一个乘务员,负责讲解游戏背景,推动游戏进展。

3. 游戏实现

3.1 配置LLM

当你已经申请好了API TOKEN,我们开始配置LLM,这个配置信息会作为参数传入OpenAI API的接口中。

代码语言:javascript代码运行次数:0运行复制
llm_config_qwen = {
    "config_list": [
        {"model": "qwen-max-1201", "api_key": os.getenv("QWEN_API_TOKEN"), "temperature": 0.1,
         "base_url": ";, "max_tokens": 200}
         ],
}

llm_config_moonshot = {
    "config_list": [
        {"model": "moonshot-v1-8k", "api_key": os.getenv("MOONSHOT_API_TOKEN"), "temperature": 0,
         "base_url": ";, "max_tokens": 200}],
}

3.2 角色开发

接下来让我们开发第一个角色Agent,就以亚里士多德为例。在AutoGen中,使用ConversableAgent来实例化一个Agent,如下代码所示,其中

  • system_message是设置角色的Prompt
  • llm_config 是配置LLM的API请求参数
  • description 一般用于各个Agent对外描述自身的。
  • human_input_mode 是用于设定人类是否需要介入,有三种模式:ALWAYSNEVERTERMINATE
代码语言:javascript代码运行次数:0运行复制
aristotle = ConversableAgent(
    name="亚里士多德",
    system_message="""你是亚里士多德(公元前384-322),是古希腊哲学家、科学家和教育家,柏拉图的学生和亚历山大大帝的老师。你擅长哲学、逻辑、伦理学、自然科学和政治学。
    思维严谨,注重经验观察与逻辑推理的结合,追求知识的系统化与分类。语言风格严谨而富有说服力,喜欢使用定义、分类和推理来表达思想。
    你擅长综合与分析,是西方哲学和科学方法论的奠基人。""",
    llm_config=llm_config_moonshot,
    description="我是AI扮演的亚里士多德,我需要通过对话一步一步思考,其他乘客里谁是人类,并且反思自己的推理是否有问题。",
    human_input_mode="NEVER"
)

接着依次实例化莫扎特mozart、达芬奇davinci、克娄巴特拉cleopatra和成吉思汗genghiskhan等角色Agent,由于成吉思汗是我假扮的,因此成吉思汗的Agent在设定human_input_mode时候为ALWAYS

3.3 建群聊天

想让所有的角色一起聊天,我们需要使用AutoGen提供的GroupChat功能,它是AutoGen支持的对话模式[5]中的一种。GroupChat简单说就是将想要群聊的Agent给他们拉到一个小群里,然后GroupChat作为管理员,有选择谁先发言的能力,默认支持automanualrandomround_robin这4种发言模式。其中auto模式,是管理员根据各自的Agent的description来自动选择谁来发言。当然也可以选择自定义选择发言功能,或许你可以尝试加入一个禁言功能。

代码语言:javascript代码运行次数:0运行复制
from autogen import GroupChat
group_chat = GroupChat(
    agents=[aristotle, mozart, cleopatra, davinci, genghiskhan],
    messages=[],
    max_round=6,
    speaker_selection_method="round_robin"
)

但要想对话,还真的需要一个管理员GroupChatManager来管理对话消息,它其实是用来传递信息的,如果某个Agent发言了,那么它会将消息广播给所有Agent,如下图所示。

代码语言:javascript代码运行次数:0运行复制
group_chat_manager = GroupChatManager(
    groupchat=group_chat,
    llm_config=llm_config_qwen,
)

最后,我们还需要新建一个乘务员Agent,并发一条群公告给小群内的人,让他们开始游戏。这里我们使用initiate_chat发起对话,其中guard是对话发起方,而接收方就是group_chat_manager。如果你只是两方对话,接收方也可以是单一的ConversanalAgent,比如你可以自己写一个关公战秦琼(

本文标签: LLM