卡卷网
当前位置:卡卷网 / 每日看点 / 正文

微软推出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

对于GeminiAI和OpenAI,我们可以根据实际情况进行配置。例如,如果使用GeminiAI免费版本代码,可以将geminisafety设置为NONE:

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

欢迎 发表评论:

请填写验证码