@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user