4,111
社区成员




本文采用Qwen的系列大模型来搭建一个多智能体的策划小组,采用中国航天员、美国NASA研究员和企业的数字分身,在虚拟的数字空间里进行一场计划的策划。
由企业方提出计划设想和需求,由美国NASA研究员给出多个可行性计划,最终让中国航天员运用丰富的实践经验来评估由美国NASA研究员提出的提案,并选择最佳的下一步行动。
同时,我们还要特别留意模型调用成本,因此,选择适合业务场景的模型就成为非常重要的一个现实考量。
9月19日,阿里云发布了通义千问Qwen2.5,它在AI领域展现了强大的Agent方向探索能力,包括灵活的Tool调用、单/多Agent场景实践等开源系列。它能够无缝集成各类工具,拓展自身能力范畴,还支持在流式调用时,使用functioncall。以下是我们采用的四个千问模型。
QWEN MAX是通义千问2.5系列千亿级别超大规模语言模型,支持中文、英文等不同语言输入。它拥有最大的模型规模和最复杂的算法,能够处理极其复杂的数据分析和决策任务。QWEN MAX在自然语言处理、图像识别和语音识别等多个领域都展现出卓越的性能,能够理解和生成接近人类水平的内容。 在做策划咨询方案时首选该模型。
QWEN PLUS在保持较高处理能力的同时,更加注重能效比,适合长时间运行的应用。它在保证性能的同时,优化了资源消耗,使其在大规模数据处理和持续服务中表现出色,性价比较高,尤其适合需要长时间稳定运行的商业场景。
QWEN TURBO特别优化了响应速度,适合需要快速反馈的场景。无论是在对话系统还是实时数据处理中,QWEN TURBO都能提供几乎即时的反馈,极大地提升了用户体验和系统的响应效率。这适合给商业客户做快速的响应。
WEN MAX Latest是最新款,集成了最新的技术进展,它不仅在性能上有所提升,而且在算法的创新和应用的广泛性上都有显著的突破,能够应对真实商业场景中更加复杂和多变的需求。 QWEN-Max-Latest采用了最新的神经网络架构,包括Transformer和BERT的变体,以提高模型的理解和生成能力。
多智能体系统(Multi-Agent System, MAS)是一种由多个相互作用的智能体组成的系统,它们可以协同工作以解决复杂的问题。这种系统在人工智能领域中越来越受到重视,因为它们能够模拟真实世界中的多主体交互,提供更加灵活和强大的问题解决能力。
我们采用Camel-ai的多智能体框架里的Society来实现。Camel-ai的Society通过模拟智能体之间的社会行为,提供了一个强大的框架,使智能体能够协作完成复杂的任务,同时保持与人类意图的一致性,并最小化人工干预。通过RolePlaying和BabyAGI框架,Camel-ai能够模拟智能体之间的信息交换和协作,为多智能体系统、合作人工智能、博弈论模拟、社会分析和人工智能伦理等领域的研究和开发提供了一个灵活的平台。
在这个框架中,智能体可以形成一个“社会”,每个智能体都有自己的角色和职责,共同为整个系统的运行做出贡献。这种模拟人类社会的组织方式,使得智能体能够更加自然地协作和交流,提高了整体的智能水平。
在本次项目中,我们使用了Camel-ai的RolePlaying来做整个咨询工作组的框架。
这是一个独特的合作智能体框架,它允许智能体通过模拟角色扮演的方式来克服在对话过程中出现的错误现象,有效引导智能体完成各种复杂的任务。它的实现涉及到任务细化器(Task Specifier),它会根据输入的想法来制定一个较为详细的实现步骤。随后,AI助理智能体(AI Assistant)和AI用户智能体(AI User)通过聊天的方式来进行协作通信,各自一步步完成指定的任务。
此外,我们还引入Critic Agents和Tree Search机制,增强了智能体在复杂任务解决中的表现。Critic Agents在RolePlaying框架中扮演着关键的辅助角色,它们负责从智能体提出的建议中选择最佳方案,并提供有信息量的口头反馈给参与角色扮演的智能体。:Critic Agents通过系统消息(System Message)来明确其角色和任务,这些消息定义了Critic Agents的选择标准和行为准则。
Tree Search机制是借鉴了蒙特卡洛树搜索(MCTS)方法,在RolePlaying框架中启发式树搜索,来解决实际商业中的复杂任务。
调用百炼平台的大模型通义千问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(),
)
选择QWEN TURBO,对项目整体来说,响应速度更快,项目执行效率更高。
task_kwargs = {
'task_prompt': '制定一项太空旅行和火星移民计划的方案',
'with_task_specify': True,
'task_specify_agent_kwargs': {'model': model_turbo}
}
选择QWEN PLUS模型,对企业来说性价比更高。
user_role_kwargs = {
'user_role_name': '一家从事太空旅行和火星移民计划的公司',
'user_agent_kwargs': {'model': model_plus}
}
选择QWEN MAX模型,通义千问2.5系列千亿级别超大规模语言模型,能够处理复杂的数据分析工作。
assistant_role_kwargs = {
'assistant_role_name': '一位经验丰富的NASA研究员',
'assistant_agent_kwargs': {'model': model_max}
}
选择QWEN MAX LATEST模型,比 MAX有更强的推理能力,适合从事极其复杂的决策任务。
critic_role_kwargs = {
'with_critic_in_the_loop': True,
'critic_criteria': '评判决策并提高任务的表现',
'critic_kwargs': dict(verbose=True)
}
society = RolePlaying(
model=model_max_latest,
**task_kwargs,
**user_role_kwargs,
**assistant_role_kwargs,
**critic_role_kwargs,
output_language="Chinese",
)
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)
程序运行可见视频链接:https://www.bilibili.com/video/BV15X68YnEjT/
web展示见下方截图
经过咨询小组选定方案后,接下里就是制定具体的执行方案了。我们也为SpaceX公司设计了执行具体任务的多智能体咨询方案。
我们这次采用BabyAGI框架,它是一种将多个智能体集成在一起,模拟人类智能的方式。通过这种方式,智能体可以学习如何更好地协作和解决问题。BabyAGI通过集成多个专有智能体,形成了一个更加全面和强大的智能系统,能够处理更加复杂和多变的任务。
我们向系统提出一个目标之后,它将不断优先考虑需要实现或完成的任务,以实现该目标。具体来说,系统将形成任务列表,从任务列表中拉出优先级最高的第一个任务,然后使用Qwen API根据上下文将任务发送到执行代理并完成任务,一旦这些任务完成,它们就会被存储在内存中,然后,根据目标和上一个任务的结果创建新任务并确定优先级。
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(),
)
task_prompt = "制定航天器飞向火星的飞行路线图"
经过咨询小组选定方案后,接下里就是制定具体的执行方案了。我们也为SpaceX公司设计了执行具体任务的多智能体咨询方案。
我们这次采用BabyAGI框架,它是一种将多个智能体集成在一起,模拟人类智能的方式。通过这种方式,智能体可以学习如何更好地协作和解决问题。BabyAGI通过集成多个专有智能体,形成了一个更加全面和强大的智能系统,能够处理更加复杂和多变的任务。
我们向系统提出一个目标之后,它将不断优先考虑需要实现或完成的任务,以实现该目标。具体来说,系统将形成任务列表,从任务列表中拉出优先级最高的第一个任务,然后使用Qwen API根据上下文将任务发送到执行代理并完成任务,一旦这些任务完成,它们就会被存储在内存中,然后,根据目标和上一个任务的结果创建新任务并确定优先级。
共有四个角色,根据需要分别配置不同模型。
(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",
)
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()
项目运行视频参见下方链接:
https://www.bilibili.com/video/BV15X68YnEjT/
通过以上实践案例,说明Qwen系列在多Agent环境中的应用实践中,已经证明了其巨大的实用价值,且具有一定的成本优势。通过具体的代码示例,我们能够更直观地理解它在多样化场景中的应用方法和潜在能力。随着技术的持续进步,预计Qwen系列在这些领域的应用将变得更加成熟和普及,为众多行业带来突破性的变革。