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

    • What' s New In LiteFlow v2.16.2?
    • What' s New In LiteFlow v2.16.1?
    • What' s New In LiteFlow v2.16.0?
  • 历史版本

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

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

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

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

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

    • What' s New In LiteFlow v2.16.2?
    • What' s New In LiteFlow v2.16.1?
    • What' s New In LiteFlow v2.16.0?
  • 历史版本

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

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

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

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

    • 📦 引入依赖
    • ⚙️ 基本配置
    • 🧩 编写 Agent 组件
    • 📤 获取 Agent 结果
    • 🌊 流式输出
  • 🎬 演示项目
  • 🏪 模型配置
  • 📐 结构化输出
  • Jev 智能选择组件

    • Jev 模型与模块介绍
    • 依赖与配置
    • 编写选择组件
    • 置信度与异常处理
    • 客服演示与测试
  • 会话与记忆

    • 💬 会话标识
    • 🧠 会话存储
    • 🔄 多轮对话
    • 🗂️ 聊天历史
    • 📝 长对话与长期记忆
  • 工作空间与工具

    • 📂 工作区与执行环境
    • 📄 文件工具与产物
    • 🐚 Shell 工具
    • 🐳 Docker 沙箱
    • 🔧 Java 业务工具
    • 🔌 MCP 工具
  • 🎯 Skills 技能系统
  • 高级编排

    • 🔀 条件路由与并行调用
    • 🤝 多 Agent 协作
    • 🙋 工具调用前人工确认
      • 工具调用前人工确认
    • 🧭 子代理与计划
    • 🌐 远程 A2A 调用
  • 运行机制与可观测

    • 🔁 迭代次数与超时
    • 📋 执行日志与事件
    • 🪝 中间件扩展
  • 📖 扩展点速查
  • ⚡ 配置速查
  • 🛡️ 执行与访问边界
  • 🔍 故障排查
  • ⬆️ 升级到 2.16.2
  • AI Agent编排
  • 高级编排
铂赛东
2026-09-19
目录

🙋 工具调用前人工确认

# 工具调用前人工确认

默认不会请求人工确认。接入审批需要两步:为工具设置 ASK 规则,并提供返回用户决定的处理器。

先注册真实业务工具 refund_order,在组件中添加规则:

import io.agentscope.core.permission.PermissionBehavior;
import io.agentscope.core.permission.PermissionContextState;
import io.agentscope.core.permission.PermissionRule;

@Override
protected PermissionContextState permissionContext() {
    return PermissionContextState.builder()
            .addAskRule("refund_order", new PermissionRule(
                    "refund_order", null, PermissionBehavior.ASK, "退款需人工确认"))
            .build();
}

然后注册 AgentConfirmationHandler Bean。以下示例挂起执行,等待业务审批接口调用 complete(key, approved):

import com.yomahub.liteflow.agent.context.LiteFlowAgentContext;
import com.yomahub.liteflow.agent.hitl.AgentConfirmationHandler;
import io.agentscope.core.event.ConfirmResult;
import io.agentscope.core.event.RequireUserConfirmEvent;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class PendingApprovalHandler implements AgentConfirmationHandler {
    private final ConcurrentHashMap<String, Sinks.One<Boolean>> pending =
            new ConcurrentHashMap<>();

    @Override
    public Mono<List<ConfirmResult>> confirm(
            RequireUserConfirmEvent event, LiteFlowAgentContext context) {
        String key = context.getRequestId() + ":" + event.getReplyId();
        Sinks.One<Boolean> answer = Sinks.one();
        if (pending.putIfAbsent(key, answer) != null) {
            return Mono.error(new IllegalStateException("重复审批请求:" + key));
        }
        // 在应用中发布 key、工具名及参数,等待当前用户审批。
        return answer.asMono()
                .map(approved -> event.getToolCalls().stream()
                        .map(tool -> new ConfirmResult(approved, tool)).toList())
                .doFinally(ignored -> pending.remove(key, answer));
    }

    public boolean complete(String key, boolean approved) {
        Sinks.One<Boolean> answer = pending.get(key);
        return answer != null && answer.tryEmitValue(approved).isSuccess();
    }
}

应用需把审批 key、工具名和参数送到自己的审批页面,并在回调接口校验审批者。这个示例的等待状态保存在当前进程,多实例部署时应把审批回调路由到持有该请求的实例,或接入共享消息通道。

只监听 agent.confirm.required 不会完成审批,必须由处理器返回决定。每个待确认工具都要有一个对应的 ConfirmResult。

liteflow.agent.hitl.confirmation-timeout=2m
liteflow.agent.hitl.fail-on-denied-tool=false

默认等待最多 2 分钟,并受 Agent 剩余执行时长限制。拒绝后默认把拒绝结果交给模型继续处理;设置 fail-on-denied-tool=true 时调用失败。等待审批期间,同一会话的后续请求也会等待。

帮助我们改善此文档 (opens new window)
上次更新: 2026/09/20, 11:49:27
🤝 多 Agent 协作
🧭 子代理与计划

← 🤝 多 Agent 协作 🧭 子代理与计划→

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