AutoGen是微软发布的一个工具,旨在帮助开发者创建基于大语言模型的复杂应用程序。开发者们通常需要具备设计、实施和优化工作流程的专业知识,而AutoGen工具可以帮助他们自动执行相关工作流程,简化搭建、优化等流程并实现自动化。一个用户角色(user_proxy),多个助手(assistant)角色,相互之间交互,完成一项任务。
简单的理解一下,就是类似现实生活中,多个人协同完成一项任务,每一个人充当不同的角色,干不同的部分事情,最后将一件事情做完,做好。
在此,我写了一个简单的成语接龙的demo;
任务:对用户给出的成语;助手根据成语的最后一个字,生成一个新的成语;并对成语进行解释,使用举例;
源码:
# 引用autogen import autogen from autogen import config_list_from_json # 大语言模型key配置参数文件 config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST.json", file_location="D:\\Project\\autogen\\autogentest") # 配置大模型配置 llm_config = {"config_list": config_list, "seed": 42, "timeout": 120} # 创建角色 user_proxy = autogen.UserProxyAgent( name="user_proxy", system_message="一个人类管理员,给出一个初始的成语", code_execution_config={"last_n_messages": 2, "work_dir": "tasks", "use_docker": False}, #最多接收的响应的数量 human_input_mode="ALWAYS" ) # 生成成语专家 idiom_expert = autogen.AssistantAgent( name="idiom_expert", system_message="""你是一个成语生成专家,请根据用户输入的成语,生成一个成语。, 规则: 1,用户成语的最后一个字,是新成语的第一个字; 2,可以音同字不同; 3,成语不能重复; 4,不能自己随便造成语""", llm_config=llm_config, ) # 成语解释专家 explain_expert = autogen.AssistantAgent( name="explain_expert", system_message="""你是一个成语解释专家,请根据 idiom_expert 生成的成语。", 规则: 1,解释成语的意思,通俗易懂,简洁明了; 2,举例说明成语的用法; 3,举例说明成语的出处; 4,确保解释的完整性和正确性。""", llm_config=llm_config, ) # 创建组 groupchat = autogen.GroupChat( agents=[user_proxy, idiom_expert, explain_expert], messages=[], # max_round=10, ) manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config) # 初始化,开始干活 start_idiom = input("请输入一个成语:") user_proxy.initiate_chat( manager, message=start_idiom, clear_history=True)
实际执行过程:
从上图中可以看到,成语专家(idiom_expert)自动完成了成语接龙,解释专家(explain_expert),自动完成了两个成语的解释,用法举例,给出出处;并且程序最后处于暂停状态,等到用户给出新的指令,是给出新成语,继续接龙,还是输入exit终止程序;
参数: human_input_mode="ALWAYS",就表示每一回接龙完成之后,都等待用户给出新的指令;
如果将 human_input_mode="TERMINATE",就表示接龙完成之后结束程序;"NEVER",表示不与用户交互,继续自己接龙下去;
如果设置了max_round=10,表示会话需要进行10个回合之后,再结束;
大语言模型参数配置文件 OAI_CONFIG_LIST.json:
[ { "model": "us-east-gpt4o", "api_key": "xxxxxx", "base_url": "https://xxxxx.com/", "api_type": "azure", "api_version": "版本号" } ]
上面的demo使用了GroupChat,就是组的管理;也可以自己写角色之间的交互关系,初始化角色任务需求等;类似下面这种,感觉更加灵活一些:
chat_results = user_proxy.initiate_chats( [ { "sender": user_proxy, "recipient": idiom_expert, "message": start_idiom, "clear_history": True, "silent": False, "max_turns": 1 }, { "sender": idiom_expert, "recipient": explain_expert, "message": explain_idiom_tasks[0], "clear_history": True, "silent": False, # "max_turns": 1 # 屏蔽掉次数,就无限洁玲下去 # "sleep": 5000 }, ] )
autogen确实比较好用,上面的demo,起始还可以加一个审查助理,对成语的解释进行审查,看成语解释是否正确;当然,还有其它的多代理框架,比如crewai也可以实现上面的demo,用法差不多;