AgentScope1.0版本
人工介入 Human In LOOP
public class HitlDemo {
public static class Tools {
@Tool(name = "delete_file", description = "Delete a file")
public String del(@ToolParam(name = "filename") String f) {
System.out.println("删除文件" + f);
return "deleted " + f;
}
@Tool(name = "search_web", description = "Search the web")
public String search(@ToolParam(name = "q") String q) {
return "results for " + q;
}
}
static class ConfirmHook implements Hook {
static final List<String> SENSITIVE = List.of("delete_file");
@Override public <T extends HookEvent> Mono<T> onEvent(T e) {
if (e instanceof PostReasoningEvent p) {
boolean dangerous = p.getReasoningMessage()
.getContentBlocks(ToolUseBlock.class).stream()
.anyMatch(t -> SENSITIVE.contains(t.getName()));
if (dangerous) p.stopAgent();
}
return Mono.just(e);
}
}
public static void main(String[] args) {
String apiKey = "sk-8980de1b287d490eb259d2f70eebeab9";
Toolkit toolkit = new Toolkit();
toolkit.registerTool(new Tools());
ReActAgent agent = ReActAgent.builder()
.name("SafeAgent")
.model(DashScopeChatModel.builder()
.apiKey(apiKey)
.modelName("qwen-plus").stream(true)
.formatter(new DashScopeChatFormatter()).build())
.toolkit(toolkit)
.memory(new InMemoryMemory())
.hook(new ConfirmHook())
.build();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("You: ");
Msg userMsg = Msg.builder().role(MsgRole.USER)
.content(TextBlock.builder().text(sc.nextLine()).build()).build();
Msg resp = agent.call(userMsg).block();
while (resp != null && resp.hasContentBlocks(ToolUseBlock.class)) {
System.out.println("⚠ Pending tools: " + resp.getContentBlocks(ToolUseBlock.class));
System.out.print("Confirm? (y/n): ");
if (sc.nextLine().equalsIgnoreCase("y")) {
resp = agent.call().block(); // 无参恢复
} else {
List<ToolResultBlock> cancel = resp.getContentBlocks(ToolUseBlock.class).stream()
.map(t -> ToolResultBlock.of(t.getId(), t.getName(),
TextBlock.builder().text("Cancelled").build()))
.toList();
Msg cancelMsg = Msg.builder().role(MsgRole.TOOL)
.content(cancel.toArray(new ToolResultBlock[0])).build();
resp = agent.call(cancelMsg).block();
}
}
System.out.println("Agent: " + resp.getTextContent());
}
}
}
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
浙公网安备 33010602011771号