LiteFlow LiteFlow
首页
  • v2.16.0 (当前版本)
  • What's New

    • What' s New In LiteFlow v2.15.3?
  • 历史版本

    • v2.15.X
    • v2.13.X
    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
AI Agent
IDEA 插件
  • 答疑解惑

    • 常见问题
    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念?
  • 项目与社区

    • 项目介绍
    • 项目成员
    • 更新记录
    • 参与开发
    • 加入群聊
    • 谁在使用
赞助
GitHub (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
首页
  • v2.16.0 (当前版本)
  • What's New

    • What' s New In LiteFlow v2.15.3?
  • 历史版本

    • v2.15.X
    • v2.13.X
    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
AI Agent
IDEA 插件
  • 答疑解惑

    • 常见问题
    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念?
  • 项目与社区

    • 项目介绍
    • 项目成员
    • 更新记录
    • 参与开发
    • 加入群聊
    • 谁在使用
赞助
GitHub (opens new window)
  • 🤖 什么是 Re-Act Agent
  • 快速开始

    • 📦 引入依赖
    • ⚙️ 基本配置
    • 🧩 编写 Agent 组件
    • 📤 获取 Agent 结果
    • 🌊 流式输出
  • 🏪 模型配置
  • 会话与记忆

    • 💬 会话标识
    • 🧠 记忆持久化
    • 🔄 多轮对话
  • 工作空间与工具

    • 📂 Workspace 配置
    • 📄 文件工具
    • 🐚 Shell 工具
    • 🔧 自定义工具
      • 定义工具
      • 注册工具
      • 在工具中访问上下文
  • 🎯 Skills 技能系统
  • 高级编排

    • 🔀 条件路由与并行调用
    • 🤝 多 Agent 协作
  • 运行机制与可观测

    • 🔁 迭代次数与 Summary
    • 📋 Re-Act 事件日志
    • 🪝 自定义 Hook
  • 📖 扩展点速查
  • ⚡ 配置速查
  • 🛡️ 安全建议
  • 🔍 故障排查
  • 🎬 演示项目
  • AI Agent编排
  • 工作空间与工具
铂赛东
2026-05-23
目录

🔧 自定义工具

# 定义工具

自定义工具是普通 Java 对象,方法上使用 agentscope 的 @Tool 和 @ToolParam 注解:

import io.agentscope.core.tool.Tool;
import io.agentscope.core.tool.ToolParam;

public class OrderTool {

    @Tool(name = "query_order_status", description = "Query order status by order number")
    public String query(@ToolParam(name = "orderNo") String orderNo) {
        return "订单 " + orderNo + " 正在处理中";
    }
}

# 注册工具

在 Agent 组件中覆写 tools() 方法:

@Override
protected List<Object> tools() {
    return List.of(new OrderTool());
}

# 在工具中访问上下文

如果工具需要访问当前 Slot、workspace 或 conversation 信息,不要在构造工具时捕获 ctx() 的返回值。推荐做法:

方式 1:工具写成组件内部类

@Component("orderAgent")
public class OrderAgentCmp extends ReActAgentComponent {

    // ... model(), systemPrompt(), userPrompt() ...

    @Override
    protected List<Object> tools() {
        return List.of(new OrderToolInner());
    }

    // 内部类可以直接访问外部类的方法
    private class OrderToolInner {
        @Tool(name = "query_order", description = "查询订单状态")
        public String query(@ToolParam(name = "orderNo") String orderNo) {
            // 通过外部类间接访问 ctx()
            Slot slot = ctx().getSlot();
            // 业务逻辑...
            return "订单 " + orderNo + " 正在处理中";
        }
    }
}

方式 2:组件提供公开代理方法

@Component("orderAgent")
public class OrderAgentCmp extends ReActAgentComponent {

    // 供工具调用的代理方法
    public Slot getCurrentSlot() {
        return ctx().getSlot();
    }

    @Override
    protected List<Object> tools() {
        return List.of(new OrderTool(this));
    }
}

public class OrderTool {
    private final OrderAgentCmp agent;

    public OrderTool(OrderAgentCmp agent) {
        this.agent = agent;
    }

    @Tool(name = "query_order", description = "查询订单状态")
    public String query(@ToolParam(name = "orderNo") String orderNo) {
        Slot slot = agent.getCurrentSlot();
        return "订单 " + orderNo + " 正在处理中";
    }
}

不要在缓存对象中保存 ctx() 引用

如果工具、Hook 或 Model 会被缓存并跨多次 invocation 复用,不要在其中保存某次调用的 ReActAgentContext 引用。应保存组件实例,运行时通过组件间接调用 ctx() 获取当次上下文。

帮助我们改善此文档 (opens new window)
上次更新: 2026/05/24, 14:26:24
🐚 Shell 工具
🎯 Skills 技能系统

← 🐚 Shell 工具 🎯 Skills 技能系统→

Theme by Vdoing | Copyright © 2020-2026 铂赛东 | MIT License
沪ICP备18012955号-2