LiteFlow LiteFlow
首页
  • v2.16.3 (当前版本)
  • 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.3 (当前版本)
  • 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 模型与模块介绍
    • 依赖与配置
    • 编写选择组件
    • 置信度与异常处理
    • 客服演示与测试
  • Jev 布尔判断组件

    • Noul 与布尔判断组件
    • 编写布尔组件
  • 会话与记忆

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

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

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

    • 🔁 迭代次数与超时
    • 📋 执行日志与事件
    • 🪝 中间件扩展
      • 定义中间件
      • 获取本次调用上下文
      • 自定义运行时的约束
  • 📖 扩展点速查
  • ⚡ 配置速查
  • 🛡️ 执行与访问边界
  • 🔍 故障排查
  • ⬆️ 升级到 2.16.2
  • AI Agent编排
  • 运行机制与可观测
铂赛东
2026-09-19
目录

🪝 中间件扩展

2.16.2 通过 AgentScope 的 MiddlewareBase 扩展调用过程。在组件中覆写 middlewares(),可以观察或拦截一次 Agent 调用。

# 定义中间件

下面的例子在一次 Agent 调用结束时记录信号类型:

import io.agentscope.core.agent.Agent;
import io.agentscope.core.agent.RuntimeContext;
import io.agentscope.core.event.AgentEvent;
import io.agentscope.core.middleware.AgentInput;
import io.agentscope.core.middleware.MiddlewareBase;
import reactor.core.publisher.Flux;
import java.util.function.Function;

public class AuditMiddleware implements MiddlewareBase {
    @Override
    public int order() {
        return 10;
    }

    @Override
    public Flux<AgentEvent> onAgent(Agent agent, RuntimeContext context,
            AgentInput input, Function<AgentInput, Flux<AgentEvent>> next) {
        return Flux.defer(() -> next.apply(input))
                .doFinally(signal -> System.out.println("Agent 调用结束:" + signal));
    }
}

在 Agent 组件中注册:

@Override
protected java.util.List<io.agentscope.core.middleware.MiddlewareBase> middlewares() {
    return java.util.List.of(new AuditMiddleware());
}

next.apply(input) 继续后续调用。中间件抛出的异常会影响执行结果;生产代码可将示例输出替换成应用日志或审计记录。

# 获取本次调用上下文

在回调内通过 context.get(LiteFlowAgentContext.class) 获取 LiteFlow 调用信息。中间件实例可能被复用,不要用实例字段存储某一轮的会话 ID、结果或计时器。

如果只需要向前端推送文本和工具状态,直接使用流式输出即可。修改当前系统提示词可用 transformSystemPrompt(...),无需为此重建整个运行时。

# 自定义运行时的约束

通过 customizeHarness(builder) 调整原 builder 时,应保留框架装配的存储、工具、文件系统和内置中间件。不要用新建 builder 替换,以免破坏会话保存、事件桥接和资源管理。

帮助我们改善此文档 (opens new window)
上次更新: 2026/09/20, 11:49:27
📋 执行日志与事件
📖 扩展点速查

← 📋 执行日志与事件 📖 扩展点速查→

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