agentscope-ai / agentscope-ai/agentscope-java

[Feature]: 在 AguiMvcController.Builder 中添加一个 requestProcessor 方法,允许外部传入自定义 processor

Aberta
#1,219 0 comentários 1 reação 0 responsáveis Ver no GitHub
area/ext/integration enhancement
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

**在 AguiMvcController.Builder 中添加一个 requestProcessor 方法,允许外部传入自定义 processor**

**Is your feature request related to a problem? Please describe.**
AguiMvcController 类目前使用私有构造函数,且没有提供注入自定义 AguiRequestProcessor 的方式。Processor 在 Builder 内部硬编码创建,这限制了需要以下定制化场景的用户:
实现自定义的 Agent 解析逻辑
添加自定义的请求预处理或后处理
集成自定义的内存管理系统
添加自定义的指标监控、日志记录或链路追踪
这使得用户很难在不复制整个 Controller 实现的情况下定制核心请求处理行为。

**Describe the solution you'd like**
在 AguiMvcController.Builder 中添加一个 requestProcessor 方法,允许用户注入自定义的 AguiRequestProcessor。如果提供了自定义 processor,则使用它而不是从 registry 和 session manager 创建。
```java
// 使用示例
AguiMvcController.builder()
.requestProcessor(customProcessor) // 新增方法
.agentRegistry(registry)
.sessionManager(sessionManager)
.build();
```
建议的实现方案:
1. 在 Builder 类中添加 requestProcessor 字段:
```java
public static class Builder {
private AguiAgentRegistry registry;
private ThreadSessionManager sessionManager;
private AguiAdapterConfig config;
private AguiRequestProcessor requestProcessor; // 新增字段
private boolean serverSideMemory = false;
private String agentIdHeader;
private long sseTimeout = 600000L;

// 新增 builder 方法
public Builder requestProcessor(AguiRequestProcessor requestProcessor) {
this.requestProcessor = requestProcessor;
return this;
}
}
```
2. 修改构造函数,如果提供了自定义 processor 则使用它:
```java
private AguiMvcController(Builder builder) {
this.processor =
builder.requestProcessor != null
? builder.requestProcessor
: AguiRequestProcessor.builder()
.agentResolver(
DefaultAgentResolver.builder()
.registry(builder.registry)
.sessionManager(builder.sessionManager)
.serverSideMemory(builder.serverSideMemory)
.build())
.config(
builder.config != null
? builder.config
: AguiAdapterConfig.defaultConfig())
.build();
// ... 构造函数其余部分保持不变
}
```

**Describe alternatives you've considered**
1. 将构造函数改为 protected:允许继承,但这会暴露内部实现细节并破坏封装性。
2. 从头创建自定义 Controller:用户可以复制 AguiMvcController 代码并修改,但这会导致代码重复,且难以受益于未来的改进。
3. 使用 Spring 的 `@Primary` 或 Bean 替换:这种方式不可行,因为 processor 是由 Builder 内部创建的,不是作为 Spring Bean 注入的。
4. 为所有依赖添加 Builder 方法(如 agentResolver):这可以工作,但需要添加多个 Builder 方法。添加单个 requestProcessor 方法更灵活,并提供完全的控制权。

**Additional context**
这个增强功能遵循开闭原则(对扩展开放,对修改封闭),提供了一个干净的扩展点,同时不会破坏现有功能。
```
@Configuration
public class CustomAguiConfig {

@Bean
public AguiMvcController aguiMvcController(
AguiAgentRegistry registry,
ThreadSessionManager sessionManager) {

// 使用自定义 AgentResolver 的自定义 Processor
AguiRequestProcessor customProcessor = AguiRequestProcessor.builder()
.agentResolver(new CustomAgentResolver(registry, sessionManager))
.config(AguiAdapterConfig.defaultConfig())
.build();

return AguiMvcController.builder()
.requestProcessor(customProcessor)
.agentRegistry(registry)
.sessionManager(sessionManager)
.build();
}
}
```
这个改动具有以下特点:
✅ 向后兼容(现有代码继续工作)
✅ 无破坏性(自定义 processor 是可选的)
✅ 与已有的 Builder 模式保持一致
✅ 适用于高级定制化场景

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.