agentscope-ai / agentscope-ai/agentscope-java

[Bug]: postActingEvent.stopAgent();后response.getGenerateReason()没有拿到ACTING_STOP_REQUESTED而是MODEL_STOP

Aperta
#602 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
area/core/agent bug
Lingua principale
Java
Stelle
5.6k
Fork
1.3k
Merge medio
4g 12h
PR unite (30g)
77

Descrizione

package cn.com.qtgl.agents;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.agent.Event;
import io.agentscope.core.hook.*;
import io.agentscope.core.memory.InMemoryMemory;
import io.agentscope.core.memory.Memory;
import io.agentscope.core.message.*;
import io.agentscope.core.model.ExecutionConfig;
import io.agentscope.core.model.OpenAIChatModel;
import io.agentscope.core.tool.Toolkit;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;

public class 测试V2 {
static {
Logger targetLogger = (Logger) LoggerFactory.getLogger("io.agentscope.core.model.OpenAIClient");
targetLogger.setLevel(Level.DEBUG);
}

public static void main(String[] args) {

// =========================
// 1. 构建 Toolkit & ToolSchema
// =========================
Toolkit toolkit = new Toolkit();

toolkit.registerTool(new Tools());
Hook hook = new Hook() {

@Override
public Mono onEvent(T event) {
if (event instanceof PostActingEvent postActingEvent) {
String tool = postActingEvent.getToolUse().getName();
if (tool.equals("query_weather")) {
postActingEvent.stopAgent();
}
}
return Mono.just(event);
}
};

OpenAIChatModel model = OpenAIChatModel.builder()
.baseUrl("https://one-api.ketanyun.com/v1")
.apiKey("sk-xxx")
.modelName("qwen3-next-80b-a3b-instruct")
.stream(false)
.build();
Memory memory = new InMemoryMemory();

ReActAgent agent = ReActAgent.builder()
.name("Assistant")
.sysPrompt("""
你是一个有帮助的 AI 助手。
可使用get_current_date工具获取当前日期
""")
.model(model)
.memory(memory)
.toolkit(toolkit)
.hook(hook)
.modelExecutionConfig(ExecutionConfig.builder().maxAttempts(3).build())
.build();

Event event = agent.stream(
Msg.builder()
.textContent("上海明天的天气怎么样?")
.build()
).blockLast();

System.out.println(event.getMessage().getGenerateReason());
System.out.println(event.getMessage().getTextContent());
//模拟下一轮对话
event = agent.stream(Msg.builder().textContent("谢谢,再见").build()).blockLast();

System.out.println(event.getMessage().getTextContent());
}
}

package cn.com.qtgl.agents;

import io.agentscope.core.tool.Tool;
import io.agentscope.core.tool.ToolParam;

import java.time.LocalDate;

/**
* @author 杜文康
* @date 2026/1/19 22:23
*/
public class Tools {

@Tool(description = "获取指定城市的天气")
public String query_weather(
@ToolParam(name = "city", description = "城市名称") String city, @ToolParam(name = "date", description = "日期") String date) {
return city + " 的天气:晴天,25°C,日期:" + date;
}

@Tool(description = "获取当前日期")
public String get_current_date() {
return LocalDate.now().toString();
}

}
运行输出:
2026-01-19 22:49:39.047 [main] INFO i.a.c.tool.Toolkit: - Registered tool 'query_weather' in group 'ungrouped'
2026-01-19 22:49:39.051 [main] INFO i.a.c.tool.Toolkit: - Registered tool 'get_current_date' in group 'ungrouped'
2026-01-19 22:49:43.818 [main] DEBUG i.a.c.m.OpenAIClient: - OpenAI request to https://one-api.ketanyun.com/v1/chat/completions: {"model":"qwen3-next-80b-a3b-instruct","messages":[{"role":"system","content":"你是一个有帮助的 AI 助手。\n可使用get_current_date工具获取当前日期\n"},{"role":"user","content":"上海明天的天气怎么样?"}],"stream":false,"tools":[{"type":"function","function":{"name":"query_weather","description":"获取指定城市的天气","parameters":{"type":"object","properties":{"date":{"type":"string","description":"日期"},"city":{"type":"string","description":"城市名称"}},"required":["city","date"]}}},{"type":"function","function":{"name":"get_current_date","description":"获取当前日期","parameters":{"type":"object","properties":{}}}}]}
2026-01-19 22:49:45.110 [main] DEBUG i.a.c.m.OpenAIClient: - OpenAI response: {"choices":[{"message":{"content":"","role":"assistant","tool_calls":[{"function":{"arguments":"{\"city\": \"上海\", \"date\": \"明天\"}","name":"query_weather"},"id":"call_b8a1a535d398476297de04","index":0,"type":"function"}]},"finish_reason":"tool_calls","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":234,"completion_tokens":25,"total_tokens":259},"created":1768834185,"system_fingerprint":null,"model":"qwen3-next-80b-a3b-instruct","id":"chatcmpl-363e06ce-4497-90ec-8263-e447f06a7205"}
MODEL_STOP

2026-01-19 22:49:56.787 [main] DEBUG i.a.c.m.OpenAIClient: - OpenAI request to https://one-api.ketanyun.com/v1/chat/completions: {"model":"qwen3-next-80b-a3b-instruct","messages":[{"role":"system","content":"你是一个有帮助的 AI 助手。\n可使用get_current_date工具获取当前日期\n"},{"role":"user","content":"上海明天的天气怎么样?"},{"role":"assistant","name":"Assistant","tool_calls":[{"id":"call_b8a1a535d398476297de04","type":"function","function":{"name":"query_weather","arguments":"{\"city\": \"上海\", \"date\": \"明天\"}"}}]},{"role":"tool","content":"\"上海 的天气:晴天,25°C,日期:明天\"","tool_call_id":"call_b8a1a535d398476297de04"},{"role":"user","content":"谢谢,再见"}],"stream":false,"tools":[{"type":"function","function":{"name":"query_weather","description":"获取指定城市的天气","parameters":{"type":"object","properties":{"date":{"type":"string","description":"日期"},"city":{"type":"string","description":"城市名称"}},"required":["city","date"]}}},{"type":"function","function":{"name":"get_current_date","description":"获取当前日期","parameters":{"type":"object","properties":{}}}}]}
2026-01-19 22:49:57.791 [main] DEBUG i.a.c.m.OpenAIClient: - OpenAI response: {"choices":[{"message":{"content":"不客气!祝你明天有个愉快的一天!再见!","role":"assistant"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":296,"completion_tokens":13,"total_tokens":309},"created":1768834198,"system_fingerprint":null,"model":"qwen3-next-80b-a3b-instruct","id":"chatcmpl-c3777ac9-fe13-9ddb-970a-0f65a0c58960"}
不客气!祝你明天有个愉快的一天!再见!
2026-01-19 22:49:57.798 [HttpTransportFactory-ShutdownHook] INFO i.a.c.m.t.HttpTransportFactory: - Shutting down 1 managed HttpTransport(s)

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.