当一个agent绑定tool的时候每个tool的func json schema会常驻agent的上下文中。随着tool数的不断增加上下文总token会变很长会导致下列问题1、大量的json schema导致上下文很长分散了LLM的注意力。2、tool很多agent可能选不对tool。3、增加了LLM预处理token耗时(TTFT增大)。在模型固化后常见的优化办法1、路由tool分组每组tool绑定到自己的agent上。2、向量检索tool。3、agent自己选择tool group(agentscope实现)。4、响应预填充(manus提出的)。5、kvCache缓存。一、agentscope group tool使用fromagentscope.toolimportToolkit# 初始化 ToolkittoolkitToolkit()# 创建工具组toolkit.create_tool_group(group_nameweb_search,description用于网络搜索的工具集合,activeFalse,notes使用这些工具时请先确认关键词的有效性)toolkit.create_tool_group(group_namefile_ops,description文件操作工具集合,activeTrue,# 初始激活notes操作文件时请确保路径正确注意权限问题)上面代码创建了web_search、file_ops两个tool group下面注册google_search tool并通过group_name绑定到tool group上defgoogle_search(query:str)-str:在 Google 上搜索returnfSearch result for:{query}toolkit.register_tool_function(google_search,group_nameweb_search# 属于 web_search 组)二、agentscope是如何自动选择tool group的ReActAgent在开启自动tool group后会默认注册reset_equipped_tools tool它就是用来让agent自己决定激活哪个tool group也就是agent在决定要使用工具前先调用reset_equipped_tools来激活最终要使用的tool group。reset_equipped_tools默认绑定到group_namebasic的tool groupbasic一定会被激活它是agent的默认要激活的tool group。reset_equipped_tools会接受类似{“web_search”: True、“file_ops”: False}的输入这个输入代表web_search group被激活reset_equipped_tools内部会把web_search group置为激活状态。三、agent是怎么把激活的tool group添加到上下文的每次任务调用agent的时候ReActAgent调用堆栈self.reply(“agent入口”) -- self._reasoning(“推理”) -- self.toolkit.get_json_schemas(“获取tool组json schema”)self.toolkit.get_json_schemas():defget_json_schemas(self,)-list[dict]:ifreset_equipped_toolsinself.tools:fields{}forgroup_name,groupinself.groups.items():# basic组里的工具一定会激活ifgroup_namebasic:continuefields[group_name](bool,Field(defaultFalse,descriptiongroup.description,),)# extended_model存放的组元信息extended_modelcreate_model(_DynamicModel,**fields)self.set_extended_model(reset_equipped_tools,extended_model,)# 这里只会选激活的tool组return[tool.extended_json_schemafortoolinself.tools.values()iftool.groupbasicorself.groups[tool.group].active]从get_json_schemas()源码可以看出如果工具集中添加了reset_equipped_tools工具return位置的代码就会把activeTrue的tool group返回。疑问那agent上下文中是怎么知道有哪些tool group的呢答get_json_schemas()源码中可以看到self.set_extended_model(“reset_equipped_tools”, extended_model) 这行代码extended_model就是所有tool group的元信息。调用reset_equipped_tools工具的时候就会知所有tool group元信息。四、总结agent在决定要用工具之前从注册的tool group中激活和当前上下文状态符合的tool group把tool group的json schema放入到上下文中为了实现agent自主灵活性把激活tool group的这个过程也做成了tool(reset_equipped_tools)
5分钟了解agentscope Group tools原理
当一个agent绑定tool的时候每个tool的func json schema会常驻agent的上下文中。随着tool数的不断增加上下文总token会变很长会导致下列问题1、大量的json schema导致上下文很长分散了LLM的注意力。2、tool很多agent可能选不对tool。3、增加了LLM预处理token耗时(TTFT增大)。在模型固化后常见的优化办法1、路由tool分组每组tool绑定到自己的agent上。2、向量检索tool。3、agent自己选择tool group(agentscope实现)。4、响应预填充(manus提出的)。5、kvCache缓存。一、agentscope group tool使用fromagentscope.toolimportToolkit# 初始化 ToolkittoolkitToolkit()# 创建工具组toolkit.create_tool_group(group_nameweb_search,description用于网络搜索的工具集合,activeFalse,notes使用这些工具时请先确认关键词的有效性)toolkit.create_tool_group(group_namefile_ops,description文件操作工具集合,activeTrue,# 初始激活notes操作文件时请确保路径正确注意权限问题)上面代码创建了web_search、file_ops两个tool group下面注册google_search tool并通过group_name绑定到tool group上defgoogle_search(query:str)-str:在 Google 上搜索returnfSearch result for:{query}toolkit.register_tool_function(google_search,group_nameweb_search# 属于 web_search 组)二、agentscope是如何自动选择tool group的ReActAgent在开启自动tool group后会默认注册reset_equipped_tools tool它就是用来让agent自己决定激活哪个tool group也就是agent在决定要使用工具前先调用reset_equipped_tools来激活最终要使用的tool group。reset_equipped_tools默认绑定到group_namebasic的tool groupbasic一定会被激活它是agent的默认要激活的tool group。reset_equipped_tools会接受类似{“web_search”: True、“file_ops”: False}的输入这个输入代表web_search group被激活reset_equipped_tools内部会把web_search group置为激活状态。三、agent是怎么把激活的tool group添加到上下文的每次任务调用agent的时候ReActAgent调用堆栈self.reply(“agent入口”) -- self._reasoning(“推理”) -- self.toolkit.get_json_schemas(“获取tool组json schema”)self.toolkit.get_json_schemas():defget_json_schemas(self,)-list[dict]:ifreset_equipped_toolsinself.tools:fields{}forgroup_name,groupinself.groups.items():# basic组里的工具一定会激活ifgroup_namebasic:continuefields[group_name](bool,Field(defaultFalse,descriptiongroup.description,),)# extended_model存放的组元信息extended_modelcreate_model(_DynamicModel,**fields)self.set_extended_model(reset_equipped_tools,extended_model,)# 这里只会选激活的tool组return[tool.extended_json_schemafortoolinself.tools.values()iftool.groupbasicorself.groups[tool.group].active]从get_json_schemas()源码可以看出如果工具集中添加了reset_equipped_tools工具return位置的代码就会把activeTrue的tool group返回。疑问那agent上下文中是怎么知道有哪些tool group的呢答get_json_schemas()源码中可以看到self.set_extended_model(“reset_equipped_tools”, extended_model) 这行代码extended_model就是所有tool group的元信息。调用reset_equipped_tools工具的时候就会知所有tool group元信息。四、总结agent在决定要用工具之前从注册的tool group中激活和当前上下文状态符合的tool group把tool group的json schema放入到上下文中为了实现agent自主灵活性把激活tool group的这个过程也做成了tool(reset_equipped_tools)