agentscope-ai / agentscope-ai/agentscope-java
[Feature]: 子智能体调用工具中断,如何传回工具调用结果
- 主要語言
- 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 還沒有評估資料。