Skip to content

[Bug]:使用skillBox调用Qwen3.5报错 #845

@cyancx

Description

@cyancx

使用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;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions