返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

3.2 运行效果

[复制链接]
链载Ai 显示全部楼层 发表于 2 小时前 |阅读模式 打印 上一主题 下一主题
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的结果给userAgentuserAgent的结果给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

接收两个参数:

  • operators:按顺序排列好的 agent 列表

  • x:给智能体的输入信息,可选,没有输入,那多个智能体间就是自己玩儿自己的了

然后里面的实现逻辑,其实就跟第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 运行效果


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ