代码详解请看我之前的文章:【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)AgentScope为了方便大家对智能体间交互逻辑的编排,特地封装了 Pipeline 模块,其中包含了一系列地 Pipeline ,就像编程语言中的控制结构:顺序结构、条件分支、循环结构等。利用这些 Pipeline ,大家可以很方便地实现多智能体间的交互逻辑控制。
引入 Pipeline ,改写以上代码为:
fromagentscope.pipelines.functionalimportsequentialpipeline
#在Pipeline结构中执行对话循环
x=None
whilexisNoneorx.content!="exit":
x=sequentialpipeline([dialogAgent,userAgent],x)这里利用了sequentialpipeline,这个Pipeline是让智能体间的信息流顺序地传递。利用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接收两个参数:
•operators:按顺序排列好的 agent 列表
•x:给智能体的输入信息,可选,没有输入,那多个智能体间就是自己玩儿自己的了
然后里面的实现逻辑,其实就跟第1小节中下面的传递过程一样了:
x=dialogAgent(x)
x=userAgent(x)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)| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |