引言
因涉及商业敏感信息,不便公开,借用故事形式讲述。本故事纯属虚构,如有雷同,纯属巧合。
12月11日,NASA最新公布一项未来20年火星探索计划,埃隆·马斯克(Elon Musk)准备与NASA合作共同设计火星移民计划。SpaceX的高级项目经理,约翰·史密斯(John Smith)是具体负责该项计划的。他找到我们,希望我们能为他们完善这一宏伟计划。考虑到马斯克的挑剔性格,约翰·史密斯希望我们设计的计划要尽可能专业、周全,并且符合马斯克的个性化要求。
一、多智能体咨询方案
我公司采用Qwen的系列大模型来搭建一个多智能体的策划小组,采用中国航天员、美国NASA研究员和企业的数字分身,在虚拟的数字空间里进行一场计划的策划。
由企业方提出计划设想和需求,由美国NASA研究员给出多个可行性计划,最终让中国航天员运用丰富的实践经验来评估由美国NASA研究员提出的提案,并选择最佳的下一步行动。确保约翰·史密斯的方案能够满足马斯克对于火星移民计划的高标准和期望。
同时,我们还要特别留意模型调用成本,因此,选择适合业务场景的模型就成为非常重要的一个现实考量。
二、Qwen系列大模型
9月19日,阿里云发布了通义千问Qwen2.5,它在AI领域展现了强大的Agent方向探索能力,包括灵活的Tool调用、单/多Agent场景实践等开源系列。它能够无缝集成各类工具,拓展自身能力范畴,还支持在流式调用时,使用functioncall。以下是我们采用的四个千问模型。
1、QWEN MAX
QWEN MAX是通义千问2.5系列千亿级别超大规模语言模型,支持中文、英文等不同语言输入。它拥有最大的模型规模和最复杂的算法,能够处理极其复杂的数据分析和决策任务。QWEN MAX在自然语言处理、图像识别和语音识别等多个领域都展现出卓越的性能,能够理解和生成接近人类水平的内容。 在做策划咨询方案时首选该模型。
- 模型规模:QWEN MAX提供了丰富的配置,包括0.5B、1.5B、3B、7B、14B、32B和72B参数的基础模型和指令调整模型。
- 预训练数据:预训练数据从7万亿个token扩展到18万亿个token,增强了常识、专家知识和推理能力。
- 性能表现:QWEN-72B在所有任务上均超越了LLaMA2-70B的性能,在10项任务中的7项任务中超越GPT-3.5。
- 经济性:模型调用-输入¥0.02/text_token(千个)、模型调用-输出¥0.06/text_token(千个)
2、QWEN PLUS
QWEN PLUS在保持较高处理能力的同时,更加注重能效比,适合长时间运行的应用。它在保证性能的同时,优化了资源消耗,使其在大规模数据处理和持续服务中表现出色,性价比较高,尤其适合需要长时间稳定运行的商业场景。
- 模型规模:QWEN PLUS提供了包括14B和32B参数的模型。
- 性能表现:QWEN-Plus在广泛的任务中实现了顶级性能,适用于需要高级推理和深刻理解的复杂任务。
- 经济性:模型调用-输入¥0.0008/text_token(千个)、模型调用-输出¥0.002/text_token(千个),提供了成本效益高的服务。
3、 QWEN TURBO
QWEN TURBO特别优化了响应速度,适合需要快速反馈的场景。无论是在对话系统还是实时数据处理中,QWEN TURBO都能提供几乎即时的反馈,极大地提升了用户体验和系统的响应效率。这适合给商业客户做快速的响应。
- 模型规模:QWEN TURBO提供了快速且准确度高的响应,适合实时应用。
- 性能表现:QWEN-Turbo在短文本任务上的性能接近GPT-4o-mini,同时能支持其8倍长度的上下文。
- 经济性:模型调用-输入¥0.0003/text_token(千个)、模型调用-输出¥0.0006/text_token(千个),提供了极具竞争力的性能和成本效益。
4、QWEN MAX Latest
WEN MAX Latest是最新款,集成了最新的技术进展,它不仅在性能上有所提升,而且在算法的创新和应用的广泛性上都有显著的突破,能够应对真实商业场景中更加复杂和多变的需求。 QWEN-Max-Latest采用了最新的神经网络架构,包括Transformer和BERT的变体,以提高模型的理解和生成能力。
- 模型规模:100B
- 性能表现::支持高达128K的上下文长度,最多可生成8K的内容。在多个权威基准测试中表现接近GPT-4o,特别是在数学能力和代码能力上,甚至超越了GPT-4o。
- 价格:模型调用-输入¥0.02/text_token(千个)、模型调用-输出¥0.06/text_token(千个)。
三、多智能体咨询工作组的搭建
多智能体系统(Multi-Agent System, MAS)是一种由多个相互作用的智能体组成的系统,它们可以协同工作以解决复杂的问题。这种系统在人工智能领域中越来越受到重视,因为它们能够模拟真实世界中的多主体交互,提供更加灵活和强大的问题解决能力。
(一)框架选型
我们采用Camel-ai的多智能体框架里的Society来实现。Camel-ai的Society通过模拟智能体之间的社会行为,提供了一个强大的框架,使智能体能够协作完成复杂的任务,同时保持与人类意图的一致性,并最小化人工干预。通过RolePlaying和BabyAGI框架,Camel-ai能够模拟智能体之间的信息交换和协作,为多智能体系统、合作人工智能、博弈论模拟、社会分析和人工智能伦理等领域的研究和开发提供了一个灵活的平台。
在这个框架中,智能体可以形成一个“社会”,每个智能体都有自己的角色和职责,共同为整个系统的运行做出贡献。这种模拟人类社会的组织方式,使得智能体能够更加自然地协作和交流,提高了整体的智能水平。
在本次项目中,我们使用了Camel-ai的RolePlaying来做整个咨询工作组的框架。
1、RolePlaying
这是一个独特的合作智能体框架,它允许智能体通过模拟角色扮演的方式来克服在对话过程中出现的错误现象,有效引导智能体完成各种复杂的任务。它的实现涉及到任务细化器(Task Specifier),它会根据输入的想法来制定一个较为详细的实现步骤。随后,AI助理智能体(AI Assistant)和AI用户智能体(AI User)通过聊天的方式来进行协作通信,各自一步步完成指定的任务。
2、Critic Agents机制
此外,我们还引入Critic Agents和Tree Search机制,增强了智能体在复杂任务解决中的表现。Critic Agents在RolePlaying框架中扮演着关键的辅助角色,它们负责从智能体提出的建议中选择最佳方案,并提供有信息量的口头反馈给参与角色扮演的智能体。:Critic Agents通过系统消息(System Message)来明确其角色和任务,这些消息定义了Critic Agents的选择标准和行为准则。
3、Tree Search机制
Tree Search机制是借鉴了蒙特卡洛树搜索(MCTS)方法,在RolePlaying框架中启发式树搜索,来解决实际商业中的复杂任务。
(二)设立咨询小组讨论方案(火星移民地建设方案)
1、创建依赖和Qwen大模型
调用百炼平台的大模型通义千问API,传回流式回答文字。
import os from camel.agents import CriticAgent from camel.generators import SystemMessageGenerator as sys_msg_gen from camel.messages import BaseMessage as bm from camel.types import RoleType from camel.societies import RolePlaying from camel.models import ModelFactory from camel.configs import QwenConfig from camel.types import TaskType,ModelPlatformType, ModelType from colorama import Fore from camel.utils import print_text_animated model_max = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_MAX, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_plus = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_PLUS, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_turbo = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_TURBO, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_max_latest = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_MAX_LATEST, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), )
2、设置任务提示的角色
选择QWEN TURBO,对项目整体来说,响应速度更快,项目执行效率更高。
task_kwargs = { 'task_prompt': '制定一项太空旅行和火星移民计划的方案', 'with_task_specify': True, 'task_specify_agent_kwargs': {'model': model_turbo} }
3、设置SpaceX企业用户的角色
选择QWEN PLUS模型,对企业来说性价比更高。
user_role_kwargs = { 'user_role_name': '一家从事太空旅行和火星移民计划的公司', 'user_agent_kwargs': {'model': model_plus} }
4、设置NASA研究员的角色
选择QWEN MAX模型,通义千问2.5系列千亿级别超大规模语言模型,能够处理复杂的数据分析工作。
assistant_role_kwargs = { 'assistant_role_name': '一位经验丰富的NASA研究员', 'assistant_agent_kwargs': {'model': model_max} }
5、设置中国航天员的角色
选择QWEN MAX LATEST模型,比 MAX有更强的推理能力,适合从事极其复杂的决策任务。
critic_role_kwargs = { 'with_critic_in_the_loop': True, 'critic_criteria': '评判决策并提高任务的表现', 'critic_kwargs': dict(verbose=True) }
6、设置咨询小组。
society = RolePlaying( model=model_max_latest, **task_kwargs, **user_role_kwargs, **assistant_role_kwargs, **critic_role_kwargs, output_language="Chinese", )
7、启动小组讨论
def run(society, round_limit: int=10): input_msg = society.init_chat() for _ in range(round_limit): assistant_response, user_response = society.step(input_msg) if is_terminated(assistant_response) or is_terminated(user_response): break # Get the results print(f'[AI User] {user_response.msg.content}.\n') print(f'[AI Assistant] {assistant_response.msg.content}.\n') if 'CAMEL_TASK_DONE' in user_response.msg.content: break input_msg = assistant_response.msg return None run(society)
8、咨询小组讨论过程
程序运行可见视频链接:https://www.bilibili.com/video/BV15X68YnEjT/
web展示见下方截图
(三)制定具体任务方案——火星飞行路线图
经过咨询小组选定方案后,接下里就是制定具体的执行方案了。我们也为SpaceX公司设计了执行具体任务的多智能体咨询方案。
我们这次采用BabyAGI框架,它是一种将多个智能体集成在一起,模拟人类智能的方式。通过这种方式,智能体可以学习如何更好地协作和解决问题。BabyAGI通过集成多个专有智能体,形成了一个更加全面和强大的智能系统,能够处理更加复杂和多变的任务。
我们向系统提出一个目标之后,它将不断优先考虑需要实现或完成的任务,以实现该目标。具体来说,系统将形成任务列表,从任务列表中拉出优先级最高的第一个任务,然后使用Qwen API根据上下文将任务发送到执行代理并完成任务,一旦这些任务完成,它们就会被存储在内存中,然后,根据目标和上一个任务的结果创建新任务并确定优先级。
1、导入依赖和建立模型
import os from colorama import Fore from camel.societies import BabyAGI from camel.utils import print_text_animated from camel.configs import QwenConfig from camel.models import ModelFactory from camel.types import TaskType,ModelPlatformType, ModelType model_max = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_MAX, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_plus = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_PLUS, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_turbo = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_TURBO, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), ) model_max_latest = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=ModelType.QWEN_MAX_LATEST, api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"), url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"), model_config_dict=QwenConfig(temperature=0.2).as_dict(), )
2、 确定任务
task_prompt = "制定航天器飞向火星的飞行路线图"
3、初始化主函数
共有四个角色,根据需要分别配置不同模型。
(1) TASK SPECIFY AGENT任务总管智能体
它是整项工作的核心,它利用Qwen的API来处理任务。它向Qwen的API发送目标提示,并以字符串形式返回任务结果。因此给它配备的是QWEN_MAX模型。
(2)TASK CREATION AGENT任务创建智能体
它通过Qwen的API根据当前对象和先前任务的结果创建新任务。这个代理的将目标、上一个任务的结果、任务描述和当前任务列表向Qwen的API发送一条提示,该API将以字符串形式返回新任务列表。然后,该函数将以字典列表的形式返回这些新任务,其中每个字典都包含任务的名称。给它配备的是QWEN_PLUS模型。
(3)TASK PRIORITIZATION AGENT优先级设置智能体
负责任务列表的排序和优先级,仍然是通过调用Qwen的API来重新确定任务列表的优先级。这个代理将当前任务的列表发送给Qwen的API,并返回已重新优先排序为编号列表的新任务列表。给它配备的也是QWEN_PLUS模型。
(4)USER 公司客户
他们提出初始任务,考虑到成本,给它配备的是QWEN_TURBO模型。
(5)ACTION AGENT 执行智能体
具体执行任务的智能体,给它配备的是最强大的QWEN_MAX_LATEST模型。
def main(chat_turn_limit=15) -> None: babyagi_session = BabyAGI( task_prompt=task_prompt, task_specify_agent_kwargs=dict(model=model_max), task_creation_agent_kwargs=dict(model=model_plus), task_prioritization_agent_kwargs=dict(model=model_plus), action_role_name="NASA研究员", action_agent_kwargs=dict(model=model_max_latest), user_role_name="SpaceX", user_agent_kwargs=dict(model=model_turbo), task_prompt=task_prompt, message_window_size=5, output_language="Chinese", )
4、输出执行情况
print( Fore.GREEN + f"NASA研究员提议:\n{babyagi_session.assistant_sys_msg}\n" ) print(Fore.YELLOW + f"初始任务:\n{task_prompt}\n") print( Fore.CYAN + f"初始任务:\n{babyagi_session.specified_task_prompt}\n" ) print( Fore.RED + f"最终任务:\n{babyagi_session.specified_task_prompt}\n" ) n = 0 while n < chat_turn_limit: n += 1 action_response = babyagi_session.step() if action_response.terminated: print( Fore.GREEN + ( "NASA研究员终止该任务. 原因: " f"{action_response.info['termination_reasons']}." ) ) break print_text_animated( Fore.RED + "任务名称:\n\n" f"{action_response.info['任务名称']}\n" ) print_text_animated( Fore.GREEN + "NASA研究员:\n\n" f"{action_response.msg.content}\n" ) print_text_animated( Fore.BLUE + "执行中的子任务:\n\n" f"{action_response.info['子任务'][:5]}\n" ) if __name__ == "__main__": main()
5、运行咨询项目
项目运行视频参见下方链接:
https://www.bilibili.com/video/BV15X68YnEjT/
四、总结
通过以上实践案例,说明Qwen系列在多Agent环境中的应用实践中,已经证明了其巨大的实用价值,且具有一定的成本优势。通过具体的代码示例,我们能够更直观地理解它在多样化场景中的应用方法和潜在能力。随着技术的持续进步,预计Qwen系列在这些领域的应用将变得更加成熟和普及,为众多行业带来突破性的变革。