Skip to main content
工具就是智能体可以执行的动作。运行时,Engine 会把 Decision 里的动作(标准化工具调用)分发给 ToolRegistry,由它查找并执行对应的可调用对象。

@tool 装饰器

使用 @tool 把任意可调用对象标记成 QitOS 工具。这个装饰器只会附加元数据,不会改变函数行为,测试里依旧可以像普通函数一样直接调用。

@tool 参数

ToolPermission

ToolPermission 描述工具允许做什么。Engine 可以在预检阶段利用这些信息检查环境能力。
四个字段默认都是 False

ToolRegistry

ToolRegistry 是 Engine 分发动作时查询的注册表。通常在 AgentModule 构造函数里创建并传入。

注册单个工具

registry.register() 注册一个可调用对象或 BaseTool 实例:
也可以在注册时覆写名称或元数据:
同一个注册表内工具名必须唯一。重复注册同名工具会抛出 ValueError

include 扫描模块或对象

registry.include(obj) 会扫描 obj 上所有公开且可调用的属性,并注册其中带有 @tool 元数据的成员:
当你把一组相关工具封装成类方法时,这通常是最方便的注册方式。

注册工具集

工具集(toolset)指的是任何拥有 tools() 方法、并返回可调用对象或 BaseTool 列表的对象。使用 register_toolset() 注册它:
来自工具集的工具会自动带命名空间:toolset_name.tool_name。你也可以显式指定命名空间:

BaseToolFunctionTool

如果工具需要维护共享状态或生命周期逻辑,可以直接继承 BaseTool
当你向 register() 传入普通可调用对象时,QitOS 内部会自动把它包装成 FunctionTool。大多数情况下你无需显式实例化它。
对于实际编码智能体,通常优先使用 CodingToolSetqitos.kit.toolset 中的预设构建器,而不是手工把文件、Shell、Web 工具逐个注册。

把注册表传给 AgentModule

把准备好的 ToolRegistry 传入 AgentModule.__init__()
Engine 会读取 agent.tool_registry 并据此创建 ActionExecutor。你也可以调用 registry.get_tool_descriptions() 得到格式化工具说明,用于插入系统提示词:

完整示例