Upload main.go
Browse files
main.go
CHANGED
|
@@ -226,23 +226,50 @@ func countTokensWithClaude(req TokenCountRequest) (TokenCountResponse, error) {
|
|
| 226 |
// 准备请求Anthropic API
|
| 227 |
log.Printf("开始Claude API请求: 模型=%s, 消息数量=%d", req.Model, len(req.Messages))
|
| 228 |
|
| 229 |
-
//
|
|
|
|
| 230 |
for i, msg := range req.Messages {
|
| 231 |
if msg.Content == "" {
|
| 232 |
-
log.Printf("警告: 消息 #%d
|
|
|
|
| 233 |
}
|
| 234 |
if msg.Role != "user" && msg.Role != "assistant" {
|
| 235 |
log.Printf("警告: 消息 #%d 角色'%s'不是标准角色(user/assistant),可能导致请求失败", i, msg.Role)
|
| 236 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
}
|
| 238 |
|
| 239 |
client := &http.Client{}
|
| 240 |
-
data, err := json.Marshal(
|
| 241 |
if err != nil {
|
| 242 |
log.Printf("错误: 序列化Claude请求失败: %v", err)
|
| 243 |
return TokenCountResponse{}, fmt.Errorf("序列化请求失败: %v", err)
|
| 244 |
}
|
| 245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
// 创建请求
|
| 247 |
request, err := http.NewRequest("POST", "https://api.anthropic.com/v1/messages/count_tokens", bytes.NewBuffer(data))
|
| 248 |
if err != nil {
|
|
|
|
| 226 |
// 准备请求Anthropic API
|
| 227 |
log.Printf("开始Claude API请求: 模型=%s, 消息数量=%d", req.Model, len(req.Messages))
|
| 228 |
|
| 229 |
+
// 验证并过滤空内容的消息
|
| 230 |
+
var filteredMessages []Message
|
| 231 |
for i, msg := range req.Messages {
|
| 232 |
if msg.Content == "" {
|
| 233 |
+
log.Printf("警告: 消息 #%d 内容为空,将被过滤掉", i)
|
| 234 |
+
continue // 跳过空内容消息
|
| 235 |
}
|
| 236 |
if msg.Role != "user" && msg.Role != "assistant" {
|
| 237 |
log.Printf("警告: 消息 #%d 角色'%s'不是标准角色(user/assistant),可能导致请求失败", i, msg.Role)
|
| 238 |
}
|
| 239 |
+
filteredMessages = append(filteredMessages, msg)
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
if len(filteredMessages) == 0 {
|
| 243 |
+
log.Printf("错误: 过滤后没有有效消息")
|
| 244 |
+
return TokenCountResponse{}, fmt.Errorf("没有有效消息:所有消息内容都为空")
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
// 创建新请求,使用过滤后的消息
|
| 248 |
+
filteredReq := TokenCountRequest{
|
| 249 |
+
Model: req.Model,
|
| 250 |
+
Messages: filteredMessages,
|
| 251 |
+
System: req.System,
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
// 记录过滤后的消息数量
|
| 255 |
+
if len(filteredMessages) != len(req.Messages) {
|
| 256 |
+
log.Printf("消息过滤: 原始消息数=%d, 过滤后消息数=%d", len(req.Messages), len(filteredMessages))
|
| 257 |
}
|
| 258 |
|
| 259 |
client := &http.Client{}
|
| 260 |
+
data, err := json.Marshal(filteredReq)
|
| 261 |
if err != nil {
|
| 262 |
log.Printf("错误: 序列化Claude请求失败: %v", err)
|
| 263 |
return TokenCountResponse{}, fmt.Errorf("序列化请求失败: %v", err)
|
| 264 |
}
|
| 265 |
|
| 266 |
+
// 记录请求内容用于调试
|
| 267 |
+
if len(data) < 1000 {
|
| 268 |
+
log.Printf("Claude请求内容: %s", string(data))
|
| 269 |
+
} else {
|
| 270 |
+
log.Printf("Claude请求内容较大,长度=%d字节", len(data))
|
| 271 |
+
}
|
| 272 |
+
|
| 273 |
// 创建请求
|
| 274 |
request, err := http.NewRequest("POST", "https://api.anthropic.com/v1/messages/count_tokens", bytes.NewBuffer(data))
|
| 275 |
if err != nil {
|