•易于使用:采用纯 Python 编程,具有各种预构建的组件可立即使用,适合具有不同级别定制要求的开发人员或用户。
•高稳健性:支持定制的容错控制和重试机制,增强应用程序的稳定性。
•基于参与者的分布:使开发人员能够以集中式编程的方式构建分布式多代理应用程序,从而简化开发。
消息是 Python 中的字典对象,使用起来很简单,下属代码定义了两个消息:
fromagentscope.messageimportMsg
message_from_alice=Msg("Alice","Hi!")
message_from_bob=Msg("Bob","WhataboutthispictureItook?",url="/path/to/picture.jpg")智能体是系统中的活动实体,他负责负责处理信息、做出决策和采取行动。
AgentScope 通过两个主要功能定义其行为:
回复:将消息作为输入并生成相应的响应,推动对话流程。观察:处理传入消息而不生成直接回复,允许代理被动收集信息并做出相应的反应。
下面展示如何定义智能体:
dialogAgent=DialogAgent(name="assistant",model_config_name="gpt-4",sys_prompt="Youareahelpfulaiassistant")
userAgent=UserAgent()智能体对话很简单,只需要把消息传入智能体,函数返回值就是智能体的回答。
result=dialogAgent(message_from_alice)
下面展示两个智能体持续对话,用户输出exit退出:
x=None
whileTrue:
x=dialogAgent(x)
x=userAgent(x)
#如果用户输入"exit",则终止对话
ifx.content=="exit":
print("Exitingtheconversation.")
break记忆(memory)用于存储历史消息,从而使智能体能够根据上下文提供更加连贯,更加自然的响应。
TemporaryMemory是 AgentScope 一个基于内存的Memory实现,
工具是智能体连接现实世界的通道,也称之为服务函数(Service Function)。
服务函数(Service function)是可以增强智能体能力工具,例如执行Python代码、网络搜索、 文件操作等。
AgentScope 内置了很多函数,通过agentscope.service.{函数名}可以快速调用。
虽然内置的工具函数已经足够满足很多需求,但是免不了希望贴合自身业务来创建自定义工具函数。
AgentScope 提供了创建函数的功能,新的Service函数必须满足以下要求才能被正常使用:
•具有格式化的函数说明(推荐Google风格),以便ServiceToolkit提取函数说明。
•函数名称应该是自解释的,这样智能体可以理解函数并正确使用它。
•在定义函数时应提供参数的类型(例如def func(a: int, b: str, c: bool)),以便大模型 能够给出类型正确的参数。
看一个示例:
defcreate_file(file_path:str,content:str="")->ServiceResponse:
"""
创建文件并向其中写入内容。
Args:
file_path (str):将要创建文件的路径。
content (str):要写入文件的内容。
Returns:
ServiceResponse:其中布尔值指示成功与否,字符串包含任何错误消息(如果有),包括错误类型。
"""
#...[为简洁起见省略代码]但是对复杂应用来说,细致的描绘每一次信息交流对开发者来说是非常困难的。Pipeline 主要用于简化「描述消息传播」的编程工作。
AgentScope Studio 是一个开源的 Web UI 工具包,用于构建和监控多智能体应用程序。它提供以下功能:
• Dashboard:一个用户友好的界面,可以在其中监视正在运行的应用程序,并查看运行历史。
• Workstation:一个强大的界面,可通过拖拽的方式构建多智能体应用程序。
• Gallery:即将推出!
• Server Management:即将推出!
下面我们看一下如何运行 Studio。我直接在 Colab 上运行,速度更快一些,大家本地运行的的时候会更简单。
先安装:
pipinstallagentscope--pre
然后执行下面 Python 代码,访问浏览器即可:
importagentscope
agentscope.studio.init()Colab 运行复杂一点,我这里单独讲一下。
仍然是先安装 agentscope 依赖:
!pipinstall--ignore-installedagentscope--pre
获取 外网地址,有下面两种方法:
!pipinstallipwhois
fromipwhoisimportIPWhois
fromrequestsimportget
ip=get('https://api.ipify.org').text
whois=IPWhois(ip).lookup_rdap(depth=1)
cidr=whois['network']['cidr']
name=whois['network']['name']
print('\n')
print('Provider:',name)
print('PublicIP:',ip)
print('CIDRs:',cidr)
#or
!curlhttps://loca.lt/mytunnelpassword生成执行脚本,
!echo"importagentscope">run.py
!echo>>run.py
!echo"agentscope.studio.init()">>run.py
!catrun.py运行程序:
!pythonrun.py&npxlocaltunnel--port5000
访问即可看到如下界面:
打开工作站可以看到示例,工作流和具体的编辑画布。
打开对话这个例子,填入必要的 ak,
你可以从工具栏里面投入你需要的元素,
当然也可以修改模板中的内容,比如两个智能体的提示语:
点击运行,可以看到运行成功的提示:
我们现在进入Dashboard页面,可以看到我们的程序已经运行了:
点击程序,默认打开程序的对话页面,我们随便问个问题:
由于这个流程很简单,就是和大模型对话没啥特别的。
现在我们运行一个多人聊天的程序,
大致的流程如下:
再次来到聊天界面,我的身份是 King,先给大家放个假:
Boyu竟然说英文,朕很生气,拖出去斩了:
话说,自己肯定不适合搞格局,上朝要是如此,我真的是能烦死。
对了,运行程序前,我们可以初始化自己的模型配置,这样就不用再到界面上维护大模型的配置了。
importagentscope
fromagentscope.agentsimportDialogAgent
fromagentscope.agentsimportUserAgent
fromagentscope.pipelines.functionalimportsequentialpipeline
agentscope.init(
model_configs=[
{
"model_type":"gemini_chat",
"config_name":"gemini-pro",
"model_name":"gemini-pro",
"api_key":"xxx",#Loadfromenvifnotprovided
"organization":"xxxyyy",#Loadfromenvifnotprovided
"generate_args":{
"temperature":0.5,
},
},
{
"model_type":"post_api_chat",
"config_name":"my_post_api",
"api_url":"https://xxx",
"headers":{},
},
],
)RAG 智能体是可以基于检索到的知识生成答案的智能体。
可以在 Agent 初始化的时候传入一个 knowledge 的列表:
knowledge=knowledge_bank.get_knowledge(knowledge_id)
agent=LlamaIndexAgent(
name="rag_worker",
sys_prompt="{your_prompt}",
model_config_name="{your_model}",
knowledge_list=[knowledge],#provideknowledgeobjectdirectly
similarity_top_k=3,
log_retrieval=False,
recent_n_mem_for_retrieve=1,
)Knowledge bank 构建也很简单,比如读取./doc/tutorial目录下的所有 「.md」 文件作为知识库:
knowledge_bank.add_data_as_knowledge(
knowledge_id="agentscope_tutorial_rag",
emb_model_name="qwen_emb_config",
data_dirs_and_types={
"./docs/tutorial":[".md"],
},
)而 Knowledge Bank 是一组 Knowledge 的组合,Knowledge 包含以下关键属性:
•knowledge_id: 每个knowledge模块的唯一标识符;
•emb_model_config_name: embedding模型的名称;
•chunk_size: 对文件分块的默认大小;
•chunk_overlap: 文件分块之间的默认重叠大小;
• data_processing: 一个list型的数据处理方法集合。
最后,知识模块目前只支持 LlamaIndex, 后续会提供对 LangChain 的支持。
--- END ---
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |