Solon v4.0.3

harness - 内置拦截器的修改及添加

</> markdown
2026年7月4日 下午1:03:57

solon-ai-harness 已经预期了三个内置拦截器:

  • compressionInterceptor,负责上下文压缩处理(默认使用组合压缩策略)
  • hitlInterceptor,处理人工介入处理(默认对 bash 工具绑定 HitlStrategy
  • stopLoopInterceptor,负责防止无限循环(默认参数:3 次连续相同错误 / 8 轮窗口)

具体参考:《react - ReActInterceptor 拦截器》

1、修改现有的内置的拦截器

下面示意一下,具体需要按需定制(一般不需要)

HarnessEngine engine = HarnessEngine.of(...)
                .sessionProvider(sessionProvider)
                .compressionInterceptor(new ContextCompressionInterceptor())
                .hitlInterceptor(new HITLInterceptor())
                .stopLoopInterceptor(new StopLoopInterceptor(3, 8))
                .build();

2、上下文压缩策略(CompressionStrategy)

默认的压缩拦截器使用组合压缩策略(CompositeCompressionStrategy),包含两层处理:

  • KeyInfoExtractionStrategy:提取干货(去水),保留关键信息,去除冗余内容。
  • HierarchicalCompressionStrategy:滚动更新摘要,维护分层压缩的历史摘要。
// 自定义压缩策略
CompressionStrategy strategy = new CompositeCompressionStrategy()
        .addStrategy(new KeyInfoExtractionStrategy())
        .addStrategy(new HierarchicalCompressionStrategy());

ContextCompressionInterceptor interceptor = new ContextCompressionInterceptor(
        40,       // maxMessages: 消息条数阈值
        60_000,   // maxTokens: 内容长度阈值
        3,        // retries: 重试次数
        () -> engine.getModelOrMain(engine.getCompressionModel()),
        strategy);

HarnessEngine engine = HarnessEngine.of(...)
        .sessionProvider(sessionProvider)
        .compressionInterceptor(interceptor)
        .build();

3、停止循环拦截器(StopLoopInterceptor)

StopLoopInterceptor 用于检测并阻止 Agent 陷入无限循环。默认配置为:在 8 轮窗口内,如果连续 3 次出现相同的错误,则停止 Agent 循环。

// 自定义停止循环参数
StopLoopInterceptor stopLoop = new StopLoopInterceptor(5, 10);  // 5 次相同错误 / 10 轮窗口

HarnessEngine engine = HarnessEngine.of(...)
        .sessionProvider(sessionProvider)
        .stopLoopInterceptor(stopLoop)
        .build();

4、HITL 拦截器(人工介入)

HITL(Human-in-the-Loop)拦截器默认对 bash 工具绑定 HitlStrategy 安全审计策略。启用 hitlEnabled 后,高危命令在执行前会被拦截并要求人工确认。

// 启用 HITL
engine.setHitlEnabled(true);

// 自定义 HITL 拦截策略
HITLInterceptor hitl = new HITLInterceptor();
hitl.onTool("bash", new HitlStrategy());
hitl.onTool("write", new WriteAuditStrategy());  // 自定义写入审计

HarnessEngine engine = HarnessEngine.of(...)
        .sessionProvider(sessionProvider)
        .hitlInterceptor(hitl)
        .hitlEnabled(true)
        .build();

关于 HitlStrategy 的 7 层安全审计策略,详见 《harness - HitlStrategy 安全审计策略》

5、添加新的拦截器

通过 extensionAdd 方式,进一步定制智能体。其中包括添加"拦截器"(或者工具等)

HarnessEngine engine = HarnessEngine.of(...)
                .sessionProvider(sessionProvider)
                .extensionAdd((agentName,agentBuilder)->{
                    agentBuilder.defaultInterceptorAdd(new ReActInterceptor() {
                        @Override
                        public void onAgentStart(ReActTrace trace) {
                            ReActInterceptor.super.onAgentStart(trace);
                        }
                    });
                })
                .build();