Spaces:
Configuration error
Configuration error
BOHE
commited on
Commit
·
6c2e83e
1
Parent(s):
17622f2
修改上下文处理方式测试
Browse files- api/main.go +50 -65
api/main.go
CHANGED
|
@@ -254,22 +254,41 @@ func Handler(w http.ResponseWriter, r *http.Request) {
|
|
| 254 |
// 转换 system 消息为 user 消息
|
| 255 |
openAIReq.Messages = convertSystemToUser(openAIReq.Messages)
|
| 256 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 257 |
// 构建 You.com 聊天历史
|
| 258 |
var chatHistory []ChatEntry
|
| 259 |
var sources []map[string]interface{}
|
| 260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 261 |
// 处理历史消息(不包括最后一条)
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
|
| 268 |
-
userMsg := openAIReq.Messages[
|
| 269 |
-
assistantMsg := openAIReq.Messages[
|
| 270 |
|
| 271 |
// 计算用户问题的token数
|
| 272 |
questionTokenCount, _ := countTokens([]Message{{Role: "user", Content: userMsg}})
|
|
|
|
| 273 |
|
| 274 |
// 处理助手回答消息(始终通过文件上传)
|
| 275 |
var assistantUploadResp *UploadResponse
|
|
@@ -314,8 +333,9 @@ func Handler(w http.ResponseWriter, r *http.Request) {
|
|
| 314 |
// 根据问题长度决定问题的处理方式
|
| 315 |
if questionTokenCount < 30 {
|
| 316 |
// 短问题直接使用文字
|
|
|
|
| 317 |
chatHistory = append(chatHistory, ChatEntry{
|
| 318 |
-
Question: userMsg,
|
| 319 |
Answer: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(assistantUploadResp.UserFilename, ".txt")),
|
| 320 |
})
|
| 321 |
} else {
|
|
@@ -356,72 +376,26 @@ func Handler(w http.ResponseWriter, r *http.Request) {
|
|
| 356 |
"size_bytes": len(userMsg),
|
| 357 |
})
|
| 358 |
|
|
|
|
| 359 |
// 添加问答对到历史记录
|
| 360 |
chatHistory = append(chatHistory, ChatEntry{
|
| 361 |
Question: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(userUploadResp.UserFilename, ".txt")),
|
| 362 |
Answer: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(assistantUploadResp.UserFilename, ".txt")),
|
| 363 |
})
|
| 364 |
}
|
| 365 |
-
} else
|
| 366 |
-
|
| 367 |
-
userMsg := openAIReq.Messages[i].Content
|
| 368 |
-
|
| 369 |
-
// 计算用户问题的token数
|
| 370 |
-
questionTokenCount, _ := countTokens([]Message{{Role: "user", Content: userMsg}})
|
| 371 |
-
|
| 372 |
-
if questionTokenCount < 30 {
|
| 373 |
-
// 短问题直接使用文字
|
| 374 |
-
chatHistory = append(chatHistory, ChatEntry{
|
| 375 |
-
Question: userMsg,
|
| 376 |
-
Answer: "",
|
| 377 |
-
})
|
| 378 |
-
} else {
|
| 379 |
-
// 长问题上传文件
|
| 380 |
-
// 获取nonce
|
| 381 |
-
_, err := getNonce(dsToken)
|
| 382 |
-
if err != nil {
|
| 383 |
-
fmt.Printf("获取nonce失败: %v\n", err)
|
| 384 |
-
http.Error(w, "Failed to get nonce", http.StatusInternalServerError)
|
| 385 |
-
return
|
| 386 |
-
}
|
| 387 |
-
|
| 388 |
-
// 创建临时文件
|
| 389 |
-
shortFileName := generateShortFileName()
|
| 390 |
-
tempFile := shortFileName + ".txt"
|
| 391 |
-
|
| 392 |
-
// 写入文件
|
| 393 |
-
if err := os.WriteFile(tempFile, addUTF8BOM(userMsg), 0644); err != nil {
|
| 394 |
-
fmt.Printf("创建临时文件失败: %v\n", err)
|
| 395 |
-
http.Error(w, "Failed to create temp file", http.StatusInternalServerError)
|
| 396 |
-
return
|
| 397 |
-
}
|
| 398 |
-
defer os.Remove(tempFile)
|
| 399 |
-
|
| 400 |
-
// 上传文件
|
| 401 |
-
uploadResp, err := uploadFile(dsToken, tempFile)
|
| 402 |
-
if err != nil {
|
| 403 |
-
fmt.Printf("上传文件失败: %v\n", err)
|
| 404 |
-
http.Error(w, "Failed to upload file", http.StatusInternalServerError)
|
| 405 |
-
return
|
| 406 |
-
}
|
| 407 |
-
|
| 408 |
-
// 添加源信息
|
| 409 |
-
sources = append(sources, map[string]interface{}{
|
| 410 |
-
"source_type": "user_file",
|
| 411 |
-
"filename": uploadResp.Filename,
|
| 412 |
-
"user_filename": uploadResp.UserFilename,
|
| 413 |
-
"size_bytes": len(userMsg),
|
| 414 |
-
})
|
| 415 |
-
|
| 416 |
-
// 添加问答对
|
| 417 |
-
chatHistory = append(chatHistory, ChatEntry{
|
| 418 |
-
Question: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(uploadResp.UserFilename, ".txt")),
|
| 419 |
-
Answer: "",
|
| 420 |
-
})
|
| 421 |
-
}
|
| 422 |
}
|
| 423 |
}
|
| 424 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
chatHistoryJSON, _ := json.Marshal(chatHistory)
|
| 426 |
|
| 427 |
// 创建 You.com API 请求
|
|
@@ -517,6 +491,17 @@ func Handler(w http.ResponseWriter, r *http.Request) {
|
|
| 517 |
q.Add("chat", string(chatHistoryJSON))
|
| 518 |
youReq.URL.RawQuery = q.Encode()
|
| 519 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
fmt.Printf("\n=== 完整请求信息 ===\n")
|
| 521 |
fmt.Printf("请求 URL: %s\n", youReq.URL.String())
|
| 522 |
fmt.Printf("请求头:\n")
|
|
|
|
| 254 |
// 转换 system 消息为 user 消息
|
| 255 |
openAIReq.Messages = convertSystemToUser(openAIReq.Messages)
|
| 256 |
|
| 257 |
+
// 打印OpenAI消息
|
| 258 |
+
fmt.Printf("\n=== 接收到的OpenAI消息 ===\n")
|
| 259 |
+
for i, msg := range openAIReq.Messages {
|
| 260 |
+
fmt.Printf("消息 %d: 角色=%s, 内容=%s\n", i+1, msg.Role, msg.Content)
|
| 261 |
+
}
|
| 262 |
+
fmt.Printf("===================\n\n")
|
| 263 |
+
|
| 264 |
// 构建 You.com 聊天历史
|
| 265 |
var chatHistory []ChatEntry
|
| 266 |
var sources []map[string]interface{}
|
| 267 |
|
| 268 |
+
// 计算消息回合数(不包括最后一条)
|
| 269 |
+
var turnCount = len(openAIReq.Messages) / 2
|
| 270 |
+
fmt.Printf("消息回合数: %d\n", turnCount)
|
| 271 |
+
|
| 272 |
// 处理历史消息(不包括最后一条)
|
| 273 |
+
// 每次用户-助手消息对视为一个回合
|
| 274 |
+
for turnIndex := 0; turnIndex < turnCount; turnIndex++ {
|
| 275 |
+
// 获取当前回合的消息索引
|
| 276 |
+
userMsgIndex := turnIndex * 2
|
| 277 |
+
assistantMsgIndex := userMsgIndex + 1
|
| 278 |
+
|
| 279 |
+
// 确保索引有效且是正确的角色
|
| 280 |
+
if userMsgIndex < len(openAIReq.Messages)-1 && assistantMsgIndex < len(openAIReq.Messages)-1 &&
|
| 281 |
+
openAIReq.Messages[userMsgIndex].Role == "user" &&
|
| 282 |
+
openAIReq.Messages[assistantMsgIndex].Role == "assistant" {
|
| 283 |
+
|
| 284 |
+
fmt.Printf("处理第 %d 轮对话...\n", turnIndex+1)
|
| 285 |
|
| 286 |
+
userMsg := openAIReq.Messages[userMsgIndex].Content
|
| 287 |
+
assistantMsg := openAIReq.Messages[assistantMsgIndex].Content
|
| 288 |
|
| 289 |
// 计算用户问题的token数
|
| 290 |
questionTokenCount, _ := countTokens([]Message{{Role: "user", Content: userMsg}})
|
| 291 |
+
fmt.Printf("用户问题token数: %d\n", questionTokenCount)
|
| 292 |
|
| 293 |
// 处理助手回答消息(始终通过文件上传)
|
| 294 |
var assistantUploadResp *UploadResponse
|
|
|
|
| 333 |
// 根据问题长度决定问题的处理方式
|
| 334 |
if questionTokenCount < 30 {
|
| 335 |
// 短问题直接使用文字
|
| 336 |
+
fmt.Printf("使用文字形式添加短问题\n")
|
| 337 |
chatHistory = append(chatHistory, ChatEntry{
|
| 338 |
+
Question: userMsg, // 直接使用文字内容
|
| 339 |
Answer: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(assistantUploadResp.UserFilename, ".txt")),
|
| 340 |
})
|
| 341 |
} else {
|
|
|
|
| 376 |
"size_bytes": len(userMsg),
|
| 377 |
})
|
| 378 |
|
| 379 |
+
fmt.Printf("使用文件形式添加长问题\n")
|
| 380 |
// 添加问答对到历史记录
|
| 381 |
chatHistory = append(chatHistory, ChatEntry{
|
| 382 |
Question: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(userUploadResp.UserFilename, ".txt")),
|
| 383 |
Answer: fmt.Sprintf("查看这个文件并且直接与文件内容进行聊天:%s.txt", strings.TrimSuffix(assistantUploadResp.UserFilename, ".txt")),
|
| 384 |
})
|
| 385 |
}
|
| 386 |
+
} else {
|
| 387 |
+
fmt.Printf("跳过消息索��� %d,它不是有效的用户-助手对\n", userMsgIndex)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
}
|
| 389 |
}
|
| 390 |
|
| 391 |
+
// 处理最后一条消息,它应该是用户消息
|
| 392 |
+
lastMessageIndex := len(openAIReq.Messages) - 1
|
| 393 |
+
if lastMessageIndex >= 0 && openAIReq.Messages[lastMessageIndex].Role == "user" {
|
| 394 |
+
fmt.Printf("处理最后一条用户消息...\n")
|
| 395 |
+
} else {
|
| 396 |
+
fmt.Printf("最后一条消息不是用户消息,跳过处理\n")
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
chatHistoryJSON, _ := json.Marshal(chatHistory)
|
| 400 |
|
| 401 |
// 创建 You.com API 请求
|
|
|
|
| 491 |
q.Add("chat", string(chatHistoryJSON))
|
| 492 |
youReq.URL.RawQuery = q.Encode()
|
| 493 |
|
| 494 |
+
// 添加调试信息
|
| 495 |
+
fmt.Printf("\n=== 聊天历史内容 ===\n")
|
| 496 |
+
fmt.Printf("历史条数: %d\n", len(chatHistory))
|
| 497 |
+
for i, entry := range chatHistory {
|
| 498 |
+
fmt.Printf("条目 %d:\n", i+1)
|
| 499 |
+
fmt.Printf(" 问题: %s\n", entry.Question)
|
| 500 |
+
fmt.Printf(" 回答: %s\n", entry.Answer)
|
| 501 |
+
}
|
| 502 |
+
fmt.Printf("chat参数内容: %s\n", string(chatHistoryJSON))
|
| 503 |
+
fmt.Printf("===================\n\n")
|
| 504 |
+
|
| 505 |
fmt.Printf("\n=== 完整请求信息 ===\n")
|
| 506 |
fmt.Printf("请求 URL: %s\n", youReq.URL.String())
|
| 507 |
fmt.Printf("请求头:\n")
|