修改claude system参数为数组格式,提升API兼容性

This commit is contained in:
yunayj
2025-08-29 19:06:01 +08:00
parent 742871db57
commit fe71af943c

View File

@@ -274,19 +274,28 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
claudeMessages := make([]dto.ClaudeMessage, 0) claudeMessages := make([]dto.ClaudeMessage, 0)
isFirstMessage := true isFirstMessage := true
// 初始化system消息数组用于累积多个system消息
var systemMessages []dto.ClaudeMediaMessage
for _, message := range formatMessages { for _, message := range formatMessages {
if message.Role == "system" { if message.Role == "system" {
// 根据Claude API规范system字段使用数组格式更有通用性
if message.IsStringContent() { if message.IsStringContent() {
claudeRequest.System = message.StringContent() systemMessages = append(systemMessages, dto.ClaudeMediaMessage{
Type: "text",
Text: common.GetPointer[string](message.StringContent()),
})
} else { } else {
contents := message.ParseContent() // 支持复合内容的system消息虽然不常见但需要考虑完整性
content := "" for _, ctx := range message.ParseContent() {
for _, ctx := range contents {
if ctx.Type == "text" { if ctx.Type == "text" {
content += ctx.Text systemMessages = append(systemMessages, dto.ClaudeMediaMessage{
Type: "text",
Text: common.GetPointer[string](ctx.Text),
})
} }
// 未来可以在这里扩展对图片等其他类型的支持
} }
claudeRequest.System = content
} }
} else { } else {
if isFirstMessage { if isFirstMessage {
@@ -392,6 +401,12 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
claudeMessages = append(claudeMessages, claudeMessage) claudeMessages = append(claudeMessages, claudeMessage)
} }
} }
// 设置累积的system消息
if len(systemMessages) > 0 {
claudeRequest.System = systemMessages
}
claudeRequest.Prompt = "" claudeRequest.Prompt = ""
claudeRequest.Messages = claudeMessages claudeRequest.Messages = claudeMessages
return &claudeRequest, nil return &claudeRequest, nil