agentscope-ai / agentscope-ai/agentscope-java

[Bug]:升级2.0版本后,在流式输出中事件无法正常获取到工具的完整输出结果。

Đang mở
#1,633 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
area/core/tool bug
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ả

**通过ToolResultTextDeltaEvent与ToolResultDataDeltaEvent事件并未正常输出工具返回的完整信息。**

> **方法:**
public Flux chat(@RequestBody AiRequest aiRequest) {

// 创建内存会话(通常作为单例使用)
Toolkit toolkit = new Toolkit();
toolkit.registerTool(new WeatherService());
RuntimeContext ctx = RuntimeContext.builder()
.sessionId(aiRequest.getSessionId())
.userId("alice")
.build();
// 创建智能体
ReActAgent agent = ReActAgent.builder()
.name("Jarvis")
.sysPrompt("你是一个查询天气助手")
.toolkit(toolkit)
.session(session)
.model(OpenAIChatModel.builder()
.baseUrl("xxx")
.apiKey("xxx")
.modelName("xxx")
.build())
.build();
// 使用默认配置,接收所有事件,包括推理和工具调用的过程。
return agent.streamEvents(new UserMessage(aiRequest.getMessage()), ctx)
.flatMap(event -> {
AiResponse aiResponse = new AiResponse();
if(event instanceof TextBlockDeltaEvent tb) {
aiResponse.setContent(tb.getDelta());
} else if(event instanceof ToolResultDataDeltaEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getData().toString());
}
else if(event instanceof ToolResultTextDeltaEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getDelta());
}
else if(event instanceof ToolResultStartEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getToolCallName());
}
else if(event instanceof ToolResultEndEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getState());
}
else if(event instanceof ToolCallDeltaEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getDelta());
}
else if(event instanceof ToolCallStartEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getToolCallName());
}
else if(event instanceof ToolCallEndEvent tr) {
System.out.println(tr.getType().getValue()+":"+tr.getReplyId());
}
return Flux.just(aiResponse);
});
}

> **工具**
class WeatherService {

@Tool(description = "获取指定城市的天气")
public String getWeather(
@ToolParam(name = "city", description = "城市名称") String city) {
return city + " 的天气:晴天,25°C";
}
}
输入内容:
查询北京天气

输出结果:
TOOL_CALL_START:getWeather
TOOL_CALL_DELTA:{"city":
TOOL_CALL_DELTA:"北京
TOOL_CALL_DELTA:"
TOOL_CALL_DELTA:}
TOOL_CALL_END:d6e561736cd843ccbd6319cdff375101
TOOL_RESULT_START:getWeather
TOOL_RESULT_END:SUCCESS
TextBlockDeltaEvent : 北京目前的天气是晴天,气温 25°C。

**以上判断的所有工具相关事件都未输出工具的完整返回内容。**

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.