agentscope-ai / agentscope-ai/agentscope-java

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

Aberta
#2,956 3 comentários 0 reações 0 responsáveis Ver no GitHub
bug
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

### 环境
- 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` 报文。

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.