使用1.0.9版本调用Qwen3.5报错
代码如下:
ReActAgent reActAgent = ReActAgent.builder()
.name()
.sysPrompt()
.model()
.toolkit()
.skillBox()
分析原因:
agentscope因skillBox和sysPrompt先后生成了2个role为system的message,大模型限制只能在开头有1个system的message,报错信息{"error":{"message":"System message must be at the beginning.","type":"BadRequestError","param":null,"code":400}}。
目前想到的解决办法是去掉sysPrompt,保留skillBox,将sysPrompt内容写到skill里面,是否还有其它解决方案,这个问题后续是否会解决
相关源码:
SkillHook.java
@OverRide
public Mono onEvent(T event) {
// Inject skill prompts
if (event instanceof PreReasoningEvent preReasoningEvent) {
String skillPrompt = skillBox.getSkillPrompt();
if (skillPrompt != null && !skillPrompt.isEmpty()) {
List inputMessages =
new ArrayList<>(preReasoningEvent.getInputMessages().size() + 1);
inputMessages.add(
Msg.builder()
.role(MsgRole.SYSTEM)
.content(TextBlock.builder().text(skillPrompt).build())
.build());
inputMessages.addAll(preReasoningEvent.getInputMessages());
preReasoningEvent.setInputMessages(inputMessages);
}
return Mono.just(event);
}
return Mono.just(event);
}
ReActAgent.java
private List prepareMessages() {
List messages = new ArrayList<>();
if (sysPrompt != null && !sysPrompt.trim().isEmpty()) {
messages.add(
Msg.builder()
.name("system")
.role(MsgRole.SYSTEM)
.content(TextBlock.builder().text(sysPrompt).build())
.build());
}
messages.addAll(memory.getMessages());
return messages;
}
使用1.0.9版本调用Qwen3.5报错
代码如下:
ReActAgent reActAgent = ReActAgent.builder()
.name()
.sysPrompt()
.model()
.toolkit()
.skillBox()
分析原因:
agentscope因skillBox和sysPrompt先后生成了2个role为system的message,大模型限制只能在开头有1个system的message,报错信息{"error":{"message":"System message must be at the beginning.","type":"BadRequestError","param":null,"code":400}}。
目前想到的解决办法是去掉sysPrompt,保留skillBox,将sysPrompt内容写到skill里面,是否还有其它解决方案,这个问题后续是否会解决
相关源码:
SkillHook.java
@OverRide
public Mono onEvent(T event) {
// Inject skill prompts
if (event instanceof PreReasoningEvent preReasoningEvent) {
String skillPrompt = skillBox.getSkillPrompt();
if (skillPrompt != null && !skillPrompt.isEmpty()) {
List inputMessages =
new ArrayList<>(preReasoningEvent.getInputMessages().size() + 1);
inputMessages.add(
Msg.builder()
.role(MsgRole.SYSTEM)
.content(TextBlock.builder().text(skillPrompt).build())
.build());
inputMessages.addAll(preReasoningEvent.getInputMessages());
preReasoningEvent.setInputMessages(inputMessages);
}
return Mono.just(event);
}
return Mono.just(event);
}
ReActAgent.java
private List prepareMessages() {
List messages = new ArrayList<>();
if (sysPrompt != null && !sysPrompt.trim().isEmpty()) {
messages.add(
Msg.builder()
.name("system")
.role(MsgRole.SYSTEM)
.content(TextBlock.builder().text(sysPrompt).build())
.build());
}
messages.addAll(memory.getMessages());
return messages;
}