agentscope-ai / agentscope-ai/agentscope-java

[Bug]:## Bug 报告:确认工具调用后 Agent 仍要求再次确认,工具不执行(Java 2.0.2)

Abierto
#2,956 3 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Java
Estrellas
5.6k
Forks
1.3k
Merge medio
4 d 12 h
PR fusionados (30 d)
77

Descripción

### 环境
- AgentScope Java:**2.0.2**(`io.agentscope:agentscope`)
- 使用方式:通过 `ChatUiChannel` + `GatewayBootstrap` 使用 `HarnessAgent`,走 SSE 对话(`sendStream`)
- Java 21,Spring Boot 3.2.4
- 权限配置:`PermissionContextState.mode(DEFAULT)`,并为 `shell` 工具配置了显式 ASK 规则

### Bug 描述
当配置为 `ASK` 的工具被调用时,Agent 会正确发出 `RequireUserConfirmEvent` 并暂停。
用户确认后(我们通过 `Msg.METADATA_CONFIRM_RESULTS` + `Msg.METADATA_CONFIRM_REQUEST_REPLY_ID`
回传确认结果),该工具**并没有被执行**,反而又发出一次针对**同一个工具调用**的
`RequireUserConfirmEvent`,导致用户必须反复确认,任务永远无法继续执行。

### 复现步骤
1. 在 `PermissionMode.DEFAULT` 下配置一个包含 ASK 工具(如 `shell`)的 Agent。
2. 发送一条会促使 Agent 调用该工具的用户消息。
3. 观察 SSE:运行暂停并发出带 `reply_id` 的 `RequireUserConfirmEvent`。
4. 发送第二条请求恢复运行,构造的用户 `Msg` 如下:
```java
Msg msg = Msg.builder()
.role(MsgRole.USER)
.name(userId)
.textContent("approved")
.metadata(Map.of(
Msg.METADATA_CONFIRM_RESULTS,
List.of(new ConfirmResult(true, toolUseBlock)), // toolCall.state = ALLOWED
Msg.METADATA_CONFIRM_REQUEST_REPLY_ID, replyId))
.build();
channel.sendStream(SendOptions.of(userId, conversationId)
.withRuntimeContext(ctx).withAgentId(agentId), msg);
```
其中 `toolUseBlock` 是根据 `RequireUserConfirmEvent#getToolCalls()` 返回的待确认 block 重建的,
保持了相同的 `id` / `name` / `input` / `content` / `metadata`,并将 `state` 置为 `ALLOWED`。
5. 预期结果:该工具被执行(`ToolCallStartEvent` … `ToolResultEndEvent`)。
6. 实际结果:针对**同一个工具调用**再次发出 `RequireUserConfirmEvent`,
运行在「等待确认」与「确认」之间无限循环。

### 补充说明
- 我们是每轮都通过网关通道(`/api/chat/stream`)走 `ChatUiChannel.sendStream` 恢复运行,
而不是直接调用 `agent.streamEvents`,确认结果是以一条携带确认 metadata 的新用户消息形式回传的。
- 确认回复消息携带了 `name = userId`(与原始轮次的发送者一致)以及相同的
`conversationId` / `RuntimeContext`,因此会话上下文应该是一致的。

能否按上述步骤复现?如需要,我可以提供抓包/SSE 日志以及原始 `RequireUserConfirmEvent` 报文。

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.