微信扫码
添加专属顾问
我要投稿
AutoGen是微软公司开源的多智能体(Mutiple Agents)应用开发框架,多智能体应用让不同的Agent之间相互交流沟通来解决问题。
更大白话一些,在公司里,老板如果有一个事情要办,通常会让秘书组织一个会议,把相关的人拉到会议室里,然后告诉他们自己的目标,比如要半年实现一百倍的增长,下面的人就会相互扯皮讨论,但是最终还是琢磨出一个不靠谱的方法把事儿给办了。
你可能不是老板,但是可以通过AutoGen创建几个Agent,一起玩Cosplay。你扮演老板,给Agent分配不同的角色,比如项目经理,程序员,或者主管等。把你的目标告诉它们,让它们任意去想办法,你只要在一旁听汇报,如果觉得有意见或者它们做得不对的地方,就让它们改,直到满意为止。
如果要提供一个开发框架,让开发人员能够在这个框架的基础上开发出不同的应用,那么这个框架要实现哪些能力呢?把"大象放进冰箱"分三步:
能够创建一个Agent,就是单独创建不同的Agent,让他们担任不同的角色,分配必要的工具,负责具体的任务;
提供多个Agent对话的环境,将多个Agent放到一个"小黑屋"里,让他们之间能够相互对话,把对话记录下来;
对对话进行管理,比如发言顺序,什么时候会议结束,对话过程是不是跑偏。
基本上AutoGen就是预先把这些功能都实现了,开发人员要做的只是明确任务,创建Agent,把Agent拉到聊天室里,让他们开聊。
一个最简单的AutoGen helloworld 应用就是下面的样子:
from autogen import UserProxyAgent, ConversableAgent, config_list_from_json
def main():
# Load LLM inference endpoints from an env variable or a file
# 从文件或者环境变量中加载LLM的推理端点
# 具体参看https://microsoft.github.io/autogen/docs/FAQ#set-your-api-endpoints
# 以及 OAI_CONFIG_LIST_sample.
# 例如,如果你在当前工作目录下创建了一个 OAI_CONFIG_LIST 的文件,那么这个文件就会被用来作为配置文件
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
#利用LLM来创建一个Assistant Agent,这个LLM是在上面的配置文件里指定的。
assistant = ConversableAgent("agent", llm_config={"config_list": config_list})
#创建一个用户代理,这个用户代理就代表你,你可以随时加入对话中
user_proxy = UserProxyAgent("user", code_execution_config=False)
#让assistant来开始这个对话,如果用户输入 exit,那么对话就会被终止。
assistant.initiate_chat(user_proxy, message="How can I help you today?")
if __name__ == "__main__":
main()
name
属性:每个Agent必须有一个属性。description
属性:每个Agent必须有个自我介绍,描述自己的能干啥和一些行为模式。send
方法:发送消息给另一个Agent。receive
方法:接收来自另一个代理的消息Agent。generate_reply
方法:基于接收到的消息生成回复,也可以同步或异步执行。def my_tool_function(param1, param2):
# 实现工具的功能
return result
agent = ConversableAgent(...)
agent.register_function({"my_tool_function": my_tool_function})
generate_reply
的方法中加入一点其他逻辑来控制Agent返回回复的逻辑,例如在生成回复前去查询知识库,参考知识库的内容来生成回复。
实际的代码是:
import os
from autogen import ConversableAgent
#构造student_agent实例
student_agent = ConversableAgent(
name="Student_Agent",
system_message="You are a student willing to learn.",
llm_config={"config_list": [{"model": "gpt-4", "api_key": os.environ["OPENAI_API_KEY"]}]},
)
#构造teacher_agent实例
teacher_agent = ConversableAgent(
name="Teacher_Agent",
system_message="You are a math teacher.",
llm_config={"config_list": [{"model": "gpt-4", "api_key": os.environ["OPENAI_API_KEY"]}]},
)
#初始化一个聊天,由student_agent发出,接收方式teacher_agent
chat_result = student_agent.initiate_chat(
teacher_agent,
message="What is triangle inequality?",
summary_method="reflection_with_llm",
max_turns=2,
)
代码是:
# Start a sequence of two-agent chats.
# Each element in the list is a dictionary that specifies the arguments
# for the initiate_chat method.
chat_results = AgentA.initiate_chats(
[
{
"recipient": AgentB,
"message": "初始的message",
"max_turns": 2,
"summary_method": "last_msg",
},
{
"recipient": AgentC,
"message": "需要给AgentC的message",
"max_turns": 2,
"summary_method": "last_msg",
},
{
"recipient": AgentD,
"message": "需要给AgentD的message",
"max_turns": 2,
"summary_method": "last_msg",
},
{
"recipient": AgentE,
"message": "需要给AgentE的message",
"max_turns": 2,
"summary_method": "last_msg",
},
]
)
GroupChat
类中设置allowed_or_disallowed_speaker_transitions
参数来规定当特定的Agent发言时,下一个候选的Agent都有哪些。例如可以规定AgentB发言时,只有AgentC才可以响应。AutoGen的论文里举了6种场景。
from autogen.agentchat.contrib.agent_builder import AgentBuilder
#步骤1,创建AgentBuilder的实例
builder = AgentBuilder(config_file_or_env=config_file_or_env, builder_model='gpt-4-1106-preview', agent_model='gpt-4-1106-preview')
#步骤2,指定任务
building_task = "Find a paper on arxiv by programming, and analyze its application in some domain. For example, find a latest paper about gpt-4 on arxiv and find its potential applications in software."
#步骤3,创建群聊的Agent,这一步会返回一个agent_list和agent的配置
agent_list, agent_configs = builder.build(building_task, default_llm_config, coding=True)
#步骤4,利用返回的agent_list和agent_configs构建群聊,并且将任务交给群聊去执行。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-02-01
2024-07-25
2025-01-01
2025-02-04
2024-08-13
2024-04-25
2024-06-13
2024-08-21
2024-09-23
2024-04-26
2025-04-29
2025-04-28
2025-04-28
2025-04-28
2025-04-28
2025-04-28
2025-04-28
2025-04-28