微软推出AutoGen框架,有哪些你喜欢的功能?
作者:卡卷网发布时间:2025-01-09 18:37浏览数量:83次评论数量:0次
探索MicrosoftAutoGen框架:AI协作的新前沿
在众多的工具中,Microsoft的AutoGen框架格外引人注目。它是一款强大的工具,专门用于创建和多Agent对话。通过这个框架,构建AI变得更加简便,这些能够利用Agent之间的交互,实现协作、推理,并解决各类复杂问题。
一、什么是Agent?
Agent是一种特殊的实体,它具有多种能力。它可以利用GenAI模型、工具、人工输入或者这些方式的组合,来发送和接收消息,并生成相应的响应。这种特的抽象设计意义重大,它不仅能够让Agent对现实世界中的人员以及抽象的算法等实体进行模拟,还极大地简化了复杂工作流程的实施过程。
二、AutoGen框架的亮点
AutoGen由研究人员和工程师组成的社区共同开发。它融合了多Agent领域的最新研究成果,并在许多实际应用场景中发挥了重要作用。
这个框架具有可扩展和可组合的特性。这意味着开发者可以使用可自定义的组件对简单的Agent进行扩展,还能够将不同的Agent组合起来,形成更加强大的Agent工作流。同时,它的模块化设计使得其易于实施,为开发者提供了极大的便利。
三、AutoGenAgent的奥秘
AutoGen的核心是可交谈的Agent,它是具有基础功能的Agent,也是所有AutoGenAgent的基类。这类Agent能够积极参与对话,高效处理信息,并执行各种任务。
AutoGen提供了多种预定义的Agent类型,每种类型都针对特定的角色进行了精心设计。例如:
<>AssistantAgent>:这是一种通用的AI助手,能够很好地理解用户的查询,并给出准确的响应。<>UserProxyAgent>:主要用于模拟用户行为,在和开发Agent交互的过程中发挥着关键作用。<>GroupChat>:它可以将多个Agent进行分组,这些分组后的Agent会作为一个协同工作,共同完成特定的任务。
在AutoGen中,存在多种对话模式,这些模式为解决复杂问题和完成任务提供了有效的途径。常见的对话模式包括:
Agent之间的一对一对话,这种模式简单直接,适用于一些简单的信息交流和任务处理。多个Agent参与的群聊,通过群聊,Agent们可以集思广益,共同解决复杂问题。分层对话,在这种模式下,Agent可以将任务派给子Agent,实现任务的分层处理,提高工作效率。
四、AutoGen的工作原理
AutoGen通过对AIAgent进行复杂的编排,有效地促进了多Agent对话和任务的执行。其工作流程主要包括以下几个关键环节:
(一)Agent初始化
在使用AutoGen时,首先要进行Agent的初始化作。这需要创建所需Agent类型的实例,并根据具体的任务需求,使用特定的参数对其进行配置。例如:
fromautogenimportAssistantAgent,UserProxyAgent
assistant1=AssistantAgent("assistant1",llm_config={"model":"gpt-4","api_key":"<YOAPIKEY>"})
assistant2=AssistantAgent("assistant2",llm_config={"model":"gpt-4","api_key":"<YOAPIKEY>"})
(二)对话流程
完成Agent初始化后,AutoGen会负责Agent之间的对话流。其典型的流程如下:
首先引入一个任务或查询,这是整个流程的起点。相应的Agent会对输入的任务或查询进行处理,利用自身的能力和知识,分析问题并寻找解决方案。Agent生成响应,并将其传递给下一个Agent或者直接返回给用户。这个过程中,Agent会根据任务的要求和自身的判断,选择合适的方式进行响应。上述循环会持续进行,直到任务顺利完成或者满足预先设定的终止条件。
对于更为复杂的任务流程,我们可以将多个Agent合并到一个名为GroupChat的组中,然后借助GroupManager来对话。每个小组和小组员都有其特定的任务分工,确保整个的高效运行。
(三)任务执行
随着对话的逐步推进,Agent可能需要执行一些特定的任务。AutoGen提供了多种任务执行方式,以满足不同的需求:
<>自然语言处理>:Agent能够解释并生成多种语言的类人文本,这使得它在语言相关的任务中表现出色,如文本生成、翻译等。<>代码执行>:Agent可以自动创建、编写、运行和调试各种编程语言的代码。这对于软件开发和自动化任务来说,是一个非常强大的功能。例如,在开发一个小型应用程序时,Agent可以根据需求生成相应的代码,并进行调试和优化。<>外部API调用>:Agent可以与外部服务进行交互,获取或处理数据。如,在进行数据分析时,Agent可以调用数据库的API,获取所需的数据,并进行进一步的分析和处理。<>搜索We>:Agent能够自动搜索网络,如Wikipedia等,提取特定查询的信息。当需要了解某个领域的知识时,Agent可以快速在网络上搜索相关信息,并进行整理和总结。
(四)错误处理和交互
AutoGen具备强大的错误处理能力。当Agent在执行任务过程中遇到错误时,它通常能够自主地进行诊断,并尝试修复问题。这种机制形成了一个持续改进和解决问题的循环,不断提升的稳定性和可性。
(五)会话终止
AutoGen中的会话终止是基于预定义的条件来实现的。这些条件包括任务完成、达到预先设定的回合数、接收到显式的终止命令或者错误阈值等。这种灵活的终止条件设置,使得能够根据不同的任务和场景,实现快速和有针对性的交互。
五、AutoGen的应用案例
AutoGen在多个领域都有着广泛的应用,展现出了强大的功能和潜力。
(一)解决复杂问题
AutoGen擅长通过多Agent协作的方式,对复杂问题进行分解和求解。在科学研究领域,它可以用于分析大量的数据,帮助研究人员制定合理的假设,并设计科学的实验方案。例如,在天文学研究中,面对海量的天体观测数据,AutoGen可以协助研究人员筛选出有价值的数据,并进行分析和建模,从而推动科学研究的进展。
(二)代码生成和调试
它能够跨多种编程语言生成、执行和调试代码。对于软件开发人员来说,这是一个非常实用的工具。在开发一个新的软件项目时,开发人员可以利用AutoGen快速生成一些基础的代码框架,并进行调试和优化,大大提高开发效率。
(三)自动广告
AutoGen框架非常适合多Agent自动化广告。它可以跟踪客户的评论和广告点击情况,对定向广告进行自动A,并利用Gemini和Stalediffusion等GenAI模型,生成针对特定客户的广告内容。通过这种方式,广告投放的效果可以得到显著提升,为企业带来更好的营销效果。
(四)教育辅导
AutoGen可以创建交互式的辅导体验,让不同的Agent分别扮演教师、学生和评估员等角色。例如,在一个数学辅导场景中:
fromautogenimportAssistantAgent,UserProxyAgent
teacher=AssistantAgent("Teacher",llm_config={"model":"gpt-4","api_key":"<YOAPIKEY>"})
student=UserProxyAgent("Student")
evaluator=AssistantAgent("Evaluator",llm_config={"model":"gpt-4","api_key":"<YOAPIKEY>"})
deftutoring_session():
student.initiate_chat(teacher,message="Ineedhelpunderstandingquadraticequations.")
#教师解释概念
student.send(evaluator,"DidIunderstandcorrectly?Aquadraticequationisax^2+x+c=0")
#评估员评估理解情况并提供反馈
teacher.send(student,"Let'ssolvethisequation:x^2-5x+6=0")
#学生尝试解答
evaluator.send(teacher,"Assessthestudent'ssolutionandprovideguidanceifneeded.")
tutoring_session()
通过这种方式,学生可以获得更加个性化和有效的辅导,提高学习效果。
六、在项目中实现AutoGen
下面我们将通过一个具体的项目,展示如何在实际中使用AutoGen。在这个项目中,我们将利用AutoGenAgent从网络上下载一个数据集,并尝试使用LLM对其进行分析。
(一)环境设置
$condacreate-nautogenpython=3.11
$condaactivateautogen
pipinstallnumpypandasmatploliseaornpython-dotenvjupyterla
pippyautogen
完成上述安装后,打开Vscode,并创建一个Jupyter笔记本,以此启动项目。
(二)加载库
importos
importautogen
fromautogen.codingimportLocalCommandLineCodeExecutor
fromautogenimportConversaleAgent
fromdotenvimportload_dotenv
接下来,需要从相应的站点收集生成模型的API密钥,并将其放入项目根目录下的.env文件中。以下代码可以将API密钥加载到中:
load_dotenv()
google_api_key=os.getenv("GOOGLE_API_KEY")
open_api_key=os.getenv("OPENAI_API_KEY")
os.environ["GOOGLE_API_KEY"]=google_api_key.strip('"')
os.environ["OPENAI_API_KEY"]=open_api_key.strip('"')
seed=42
safety_settings=[
{"category":"HARM_CATEGORY_HARASENT","threshold":"LOCK_NONE"},
{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"LOCK_NONE"},
{"category":"HARM_CATEGORY_UALLY_EXPLICIT","threshold":"LOCK_NONE"},
{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"LOCK_NONE"},
](三)配置LLM
根据使用的模型不同,需要进行相应的配置。例如,将LLM配置为Gemini-1.5-flash:
llm_config={
"config_list":[
"model":"gemini-1.5-flash",
"api_key":os.environ["GOOGLE_API_KEY"],
"api_type":"google",
"safety_settings":safety_settings,
]
}或者配置为OpenAI:
llm_config={
"config_list":[{"model":"gpt-4","api_key":os.getenv("OPENAI_API_KEY")}]
}(四)定义编码任务
coding_task=[
"""downloaddatafroms://raw.githuusercontent/vega/vega-datasets/main/data/penguins.json""",
"""finddesccriptivestatistiofthedataset,plotachartoftheirrelationetweenspsandeaklengthandsetheplottoeak_length_depth.png""",
"""Developeashortreportusingthedatafromthedataset,seittoafilenamedpenguin_report.md."""
](五)设计AssistantAgent
在这个项目中,我们将使用四个助手,分别是UserProxy、Coder、Writer和Critic。
<>UserProxyAgent>:它是AutoGenUserAgent,是ConversaleAgent的子类。其human_input_mode原本是ALWAYS,意味着它会作为人工Agent工作,但在这里我们将其设置为NEVER,使其能够自主工作。
user_proxy=autogen.UserProxyAgent(
name="User_proxy",
_message="Ahuman.",
code_execution_config={
"last_n_messages":3,
"work_dir":"groupchat",
"use_docker":False
},
human_input_mode="NEVER"
)<>Code和WriterAgent>:这两个Agent利用AutoGenAssistantAgent构建,它是ConversaleAgent的子类,旨在解决LLM的任务,human_input_mode为NEVER。我们可以为Agent设置消息提示。
coder=autogen.AssistantAgent(
name="Coder",
llm_config=llm_config
)
writer=autogen.AssistantAgent(
name="writer",
llm_config=llm_config,
_message="""
Youareaprofessionalreportwriter,knownfor
yoinsightfulandengagingreportforclients.
Youtranormcomplexconceptsintocompellingnarratives.
Reply"TERMINATE"intheendwheneverythingisdone.
"""
)<>CriticAgent>:它是一个Agent,主要负责评估编码Agent创建的代码质量,并提出改进建议。
_message="""Critic.Youareahelpfulassistanthighlyskilledin
evaluatingthequalityofagivenvisualizationcodeyprovidingascore
from1(ad)-10(good)whileprovidingclearrationale.YOUMUSTCONSIDER
VUALIZATIONESTPRACTSforeachevaluation.Specifically,youcan
carefullyevaluatethecodeacrossthefollowingdimensions
-ugs(ugs):arethereugs,logicerrors,syntaxerrorortypos?Are
thereanyreasonswhythecodemayfailtocompile?Howshoulditefixed?
IfANYugexists,theugscoreMUSTelessthan5.
-Datatranormation(tranormation):Isthedatatranormed
appropriayforthevisualizationtype?E.g.,isthedatasetappropriated
filtered,aggregated,orgroupedifneeded?Ifadatefieldisused,isthe
datefieldfirstconvertedtoadateojectetc?
-Goalcompliance(compliance):howwellthecodemeetsthespecified
visualizationgoals?
-Visualizationtype(type):CONSIDERINGESTPRACTS,isthe
visualizationtypeappropriateforthedataandintent?Istherea
visualizationtypethatwouldemoreeffectiveinconveyinginsights?
Ifadifferentvisualizationtypeismoreappropriate,thescoreMUST
ELESSTHAN5.
-Dataencoding(encoding):Isthedataencodedappropriayforthe
visualizationtype?
-aestheti(aestheti):Aretheaesthetiofthevisualization
appropriateforthevisualizationtypeandthedata?
YOUMUSTPROVIDEASCOREforeachoftheaovedimensions.
{ugs:0,tranormation:0,compliance:0,type:0,encoding:0,
aestheti:0}
Donotsuggestcode.
Finally,asedonthecritiqueaove,suggestaconcretelistofactions
thatthecodershouldtaketoimprovethecode.
"""
critic=autogen.AssistantAgent(
name="Critic",
_message=_message,
llm_config=llm_config
)(六)群聊和器创建
在AutoGen中,我们使用GroupChat功能将多个Agent组合在一起,以执行特定任务,并使用GroupChatManager控制GroupChat行为。
groupchat_coder=autogen.GroupChat(
agents=[user_proxy,coder,critic],messages=[],max_round=10
)
groupchat_writer=autogen.GroupChat(
agents=[user_proxy,writer,critic],messages=[],max_round=10
)
manager_1=autogen.GroupChatManager(
groupchat=groupchat_coder,
llm_config=llm_config,
is_termination_msg=lamdax:x.get("content","").find("TERMINATE")>=0,
code_execution_config={
"last_n_messages":1,
"work_dir":"groupchat",
"use_docker":False
}
)
manager_2=autogen.GroupChatManager(
groupchat=groupchat_writer,
name="Writing_manager",
llm_config=llm_config,
is_termination_msg=lamdax:x.get("content","").find("TERMINATE")>=0,
code_execution_config={
"last_n_messages":1,
"work_dir":"groupchat",
"use_docker":False
}
)最后,创建一个用户Agent来启动聊天过程并检测终止命令:
user=autogen.UserProxyAgent(
name="User",
human_input_mode="NEVER",
is_termination_msg=lamdax:x.get("content","").find("TERMINATE")>=0,
code_execution_config={
"last_n_messages":1,
"work_dir":"tasks",
"use_docker":False
}
)
user.initiate_chats(
{"recipient":coder,"message":coding_task[0],"summary_method":"last_msg"},
{"recipient":manager_1,"message":coding_task[1],"summary_method":"last_msg"},
{"recipient":manager_2,"message":coding_task[2]}
)在这个项目中,Agent会按照以下步骤工作:首先下载企鹅数据集,然后由coderAgent创建代码,criticAgent对代码进行评估和建议改进,接着coderAgent根据建议重新运行代码进行优化,之后writerAgent利用处理后的数据编写报告,criticAgent同样会对报告内容进行评估和指导,最终完成整个任务流程。
s://zhuanlan.zhihu/p/17121470813
s://zhuanlan.zhihu/p/16403050798
END
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
请记住:卡卷网 Www.Kajuan.Net
广告位

你 发表评论:
欢迎