agentscope-ai / agentscope-ai/agentscope-java

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

未關閉
#2,088 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
area/core/agent enhancement
主要語言
Java
星號
5.6k
分支
1.3k
平均合併
4 天 12 小時
30 天內合併 PR
77

描述

智能体结构如下:
```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
求大佬指点

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。