|
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-radius: 8px;background: rgb(247, 247, 247);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">上篇文章(【AI Agent系列】【阿里AgentScope框架】1. 深入源码:详细解读AgentScope中的智能体定义以及模型配置的流程)我们深入学习了AgentScope框架中的agent模块,并在最开始的时候创建了两个智能体实例,并运行了智能体实例得到了结果。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">今天我们在之前代码的基础上,稍微修改一下,引入AgentScope框架的Pipeline模块,实现一个最简单的多智能体交互流程,以此来入门AgentScope中的Pipeline模块。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">0. 之前的代码ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-left: none;padding: 1em;border-radius: 8px;color: rgba(0, 0, 0, 0.5);background: rgb(247, 247, 247);margin: 2em 8px;"> 代码详解请看我之前的文章:【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;">importagentscope importos
openai_api_key=os.getenv('OPENAI_API_KEY')
#一次性初始化多个模型配置 openai_cfg_dict={ "config_name":"openai_cfg",#Auniquenameforthemodelconfig. "model_type":"openai",#Choosefrom"openai","openai_dall_e",or"openai_embedding".
"model_name":"gpt-3.5-turbo",#ThemodelidentifierusedintheOpenAIAPI,suchas"gpt-3.5-turbo","gpt-4",or"text-embedding-ada-002". "api_key" penai_api_key,#YourOpenAIAPIkey.Ifunset,theenvironmentvariableOPENAI_API_KEYisused. }
agentscope.init(model_configs=[openai_cfg_dict])
fromagentscope.agentsimportDialogAgent,UserAgent
#创建一个对话智能体和一个用户智能体 dialogAgent=DialogAgent(name="assistant",model_config_name="openai_cfg",sys_prompt="Youareahelpfulaiassistant") userAgent=UserAgent()
x=None x=dialogAgent(x) print("diaglogAgent:\n",x) x=userAgent(x) print("userAgent:\n",x)ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这个代码的最后:ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;">x=None x=dialogAgent(x) print("diaglogAgent:\n",x) x=userAgent(x) print("userAgent:\n",x)ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">我们简单的使用了一下这两个智能体实例,这其中也让这两个智能体之间有了一点交互:dialogAgent的回复传给了userAgent。但是userAgent并没有给dialogAgent发送消息,ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">1. 加入智能体之间的交互为了使以上两个智能体间产生交互,能相互对话,我们可以这样改: x=None whileTrue: x=dialogAgent(x) x=userAgent(x)
#如果用户输入"exit",则终止对话 ifx.content=="exit": print("Exitingtheconversation.") break
加入一个while循环,让dialogAgent的结果给userAgent,userAgent的结果给dialogAgent。 那根据上篇文章中我们看的智能体的实现,可以知道这个x传递给了智能体,就相当于加到了这个智能体的memory中:这样就有对方和自己的信息在上下文中了。 ifself.memory: self.memory.add(x)
2. 使用Pipeline模块实现智能体间的交互2.1 Pipeline是什么?- 个人简单理解AgentScope为了方便大家对智能体间交互逻辑的编排,特地封装了 Pipeline 模块,其中包含了一系列地 Pipeline ,就像编程语言中的控制结构:顺序结构、条件分支、循环结构等。利用这些 Pipeline ,大家可以很方便地实现多智能体间的交互逻辑控制。 2.2 上手使用 Pipeline引入 Pipeline ,改写以上代码为: fromagentscope.pipelines.functionalimportsequentialpipeline
#在Pipeline结构中执行对话循环 x=None whilexisNoneorx.content!="exit": x=sequentialpipeline([dialogAgent,userAgent],x)
这里利用了sequentialpipeline,这个Pipeline是让智能体间的信息流顺序地传递。利用sequentialpipeline就轻松实现了两个智能体间的信息交互。 2.3 sequentialpipeline 源码阅读sequentialpipeline实现源码如下:
defsequentialpipeline( operators:Sequence[Operator], x:Optional[dict]=None, )->dict: """FunctionalversionofSequentialPipeline.
Args: operators(`Sequence[Operator]`): Participatingoperators. x(`Optional[dict]`,defaultsto`None`): Theinputdictionary.
Returns: `dict`:theoutputdictionary. """ iflen(operators)==0: raiseValueError("Nooperatorsprovided.")
msg=operators[0](x) foroperatorinoperators[1:]: msg=operator(msg) returnmsg
接收两个参数: 然后里面的实现逻辑,其实就跟第1小节中下面的传递过程一样了: x=dialogAgent(x) x=userAgent(x)
3. 最终代码和实现效果3.1 完整代码importagentscope #importos
#openai_api_key=os.getenv('OPENAI_API_KEY')
#一次性初始化多个模型配置 openai_cfg_dict={ "config_name":"openai_cfg",#Auniquenameforthemodelconfig. "model_type":"openai",#Choosefrom"openai","openai_dall_e",or"openai_embedding".
"model_name":"gpt-3.5-turbo",#ThemodelidentifierusedintheOpenAIAPI,suchas"gpt-3.5-turbo","gpt-4",or"text-embedding-ada-002". #"api_key" penai_api_key,#YourOpenAIAPIkey.Ifunset,theenvironmentvariableOPENAI_API_KEYisused. }
agentscope.init(model_configs=[openai_cfg_dict])
fromagentscope.agentsimportDialogAgent,UserAgent
#创建一个对话智能体和一个用户智能体 dialogAgent=DialogAgent(name="assistant",model_config_name="openai_cfg",sys_prompt="Youareahelpfulaiassistant") userAgent=UserAgent()
fromagentscope.pipelines.functionalimportsequentialpipeline
#在Pipeline结构中执行对话循环 x=None whilexisNoneorx.content!="exit": x=sequentialpipeline([dialogAgent,userAgent],x)
3.2 运行效果
|