🪝 中间件扩展
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



