feat: 支持配置 system 消息内容格式

- 为 OpenAI 兼容模型增加字符串与文本数组两种 system content 策略

- 在 AgentScope 模型工厂统一安装兼容 formatter 并补充测试
This commit is contained in:
2026-07-27 15:41:31 +08:00
parent e995088d79
commit 6fa93bd671
5 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
package com.easyagents.agent.runtime.agentscope;
import io.agentscope.core.formatter.openai.OpenAIChatFormatter;
import io.agentscope.core.formatter.openai.dto.OpenAIContentPart;
import io.agentscope.core.formatter.openai.dto.OpenAIMessage;
import io.agentscope.core.message.Msg;
import java.util.List;
/**
* 为 OpenAI-compatible 模型补充 system content 内容块数组兼容能力。
*/
public final class AgentOpenAIChatFormatter extends OpenAIChatFormatter {
/**
* 将 AgentScope 消息转换为 OpenAI 消息,并规范 system 文本的 content 格式。
*
* @param messages AgentScope 消息
* @return OpenAI 请求消息
*/
@Override
protected List<OpenAIMessage> doFormat(List<Msg> messages) {
List<OpenAIMessage> formattedMessages = super.doFormat(messages);
for (OpenAIMessage message : formattedMessages) {
if ("system".equals(message.getRole()) && message.getContent() instanceof String text) {
message.setContent(List.of(OpenAIContentPart.text(text)));
}
}
return formattedMessages;
}
}

View File

@@ -6,6 +6,7 @@ import com.easyagents.agent.runtime.model.AgentHttpVersionPolicy;
import com.easyagents.agent.runtime.model.AgentModelFactory;
import com.easyagents.agent.runtime.model.AgentModelProviderType;
import com.easyagents.agent.runtime.model.AgentModelSpec;
import com.easyagents.agent.runtime.model.AgentSystemContentFormat;
import io.agentscope.core.formatter.openai.DeepSeekFormatter;
import io.agentscope.core.formatter.openai.GLMFormatter;
import io.agentscope.core.model.*;
@@ -153,6 +154,9 @@ public class AgentScopeModelFactory implements AgentModelFactory<Model> {
.stream(Boolean.TRUE.equals(options.getStream()))
.httpTransport(httpTransportProvider.getTransport(modelSpec.getHttpVersionPolicy(), baseUrl))
.generateOptions(options);
if (modelSpec.getSystemContentFormat() == AgentSystemContentFormat.TEXT_PARTS) {
builder.formatter(new AgentOpenAIChatFormatter());
}
return builder.build();
}