agentscope-ai / agentscope-ai/agentscope-java

[Feature]: 子智能体调用工具中断,如何传回工具调用结果

Đang mở
#2,088 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
area/core/agent enhancement
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

智能体结构如下:
```text
智能体结构
├── 父智能体
│ └── 办事智能体
│ └── 工具
│ └── 表单工具
```
调用逻辑是
用户输入一段话
调用表单工具返回表单和根据用户输入提取的表单参数
然后页面上会渲染表单
然后用户在界面提交表单后,我将表单执行的结果返回给后端
这时候我发现 会出现
```text
[ERROR] [ERROR] Previous tool execution failed or was interrupted. Tool: xxxx
```

因为每个表单的参数不一样,我在Middleware 会追加一个动态工具,来中断,让用户输入
```java
agent.getToolkit().registerAgentTool(new AgentTool() {
@Override
public String getName() {
return "";
}

@Override
public String getDescription() {
return "";
}

@Override
public Map getParameters() {
Map properties = new LinkedHashMap<>();
List required = new ArrayList<>();
//拼接表单参数
// 使用 Map.of 构建返回结果
return Map.of(
"type", "object",
"properties", properties,
"required", required
);
}

@Override
public Mono callAsync(ToolCallParam param) {
return Mono.error(new ToolSuspendException("等待用户输入"));
}

});
```

我发送消息的代码是,
```java

ToolResultMessage toolResultMessage = new ToolResultMessage(toolInfo.getStr("toolId"), toolInfo.getStr("toolName"), toolInfo.getStr("content"));
build.add(toolResultMessage);

Flux chatFlux = reActAgent.streamEvents(build
, runtimeContext
)
```
我怀疑是提交消息的地方有问题,我看了下源码是从ASSISTANT 获取工具调用情况,但是我也无法获取到这个state 来追加工具的调用结果
```java
private Msg findLastAssistantMsg() {
List contextMsgs = state.contextMutable();
for (int i = contextMsgs.size() - 1; i >= 0; i--) {
Msg msg = contextMsgs.get(i);
if (msg.getRole() == MsgRole.ASSISTANT) {
return msg;
}
}
return null;
}
```

然后再这里断点,我发现我提交了2个Msg,在子智能体的maybePatchPendingToolCalls 这里只有1个 User的Msg
求大佬指点

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.