diff --git a/dto/claude.go b/dto/claude.go index 1adb0c9e..8068feb8 100644 --- a/dto/claude.go +++ b/dto/claude.go @@ -70,8 +70,9 @@ func (c *ClaudeMediaMessage) ParseMediaContent() []ClaudeMediaMessage { type ClaudeMessageSource struct { Type string `json:"type"` - MediaType string `json:"media_type"` - Data any `json:"data"` + MediaType string `json:"media_type,omitempty"` + Data any `json:"data,omitempty"` + Url string `json:"url,omitempty"` } type ClaudeMessage struct { diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 95e7c4be..0404ce85 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -246,23 +246,17 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*dto.Cla } else { imageUrl := mediaMessage.GetImageMedia() claudeMediaMessage.Type = "image" - claudeMediaMessage.Source = &dto.ClaudeMessageSource{ - Type: "base64", - } + claudeMediaMessage.Source = &dto.ClaudeMessageSource{} // 判断是否是url if strings.HasPrefix(imageUrl.Url, "http") { - // 是url,获取图片的类型和base64编码的数据 - fileData, err := service.GetFileBase64FromUrl(imageUrl.Url) - if err != nil { - return nil, fmt.Errorf("get file base64 from url failed: %s", err.Error()) - } - claudeMediaMessage.Source.MediaType = fileData.MimeType - claudeMediaMessage.Source.Data = fileData.Base64Data + claudeMediaMessage.Source.Type = "url" + claudeMediaMessage.Source.Url = imageUrl.Url } else { _, format, base64String, err := service.DecodeBase64ImageData(imageUrl.Url) if err != nil { return nil, err } + claudeMediaMessage.Source.Type = "base64" claudeMediaMessage.Source.MediaType = "image/" + format claudeMediaMessage.Source.Data = base64String }