BOHE commited on
Commit
6c2e83e
·
1 Parent(s): 17622f2

修改上下文处理方式测试

Browse files
Files changed (1) hide show
  1. 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
- for i := 0; i < len(openAIReq.Messages)-1; i += 2 {
263
- // 确保用户-助手消息成对处理
264
- if i+1 < len(openAIReq.Messages)-1 &&
265
- openAIReq.Messages[i].Role == "user" &&
266
- openAIReq.Messages[i+1].Role == "assistant" {
 
 
 
 
 
 
 
267
 
268
- userMsg := openAIReq.Messages[i].Content
269
- assistantMsg := openAIReq.Messages[i+1].Content
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 if openAIReq.Messages[i].Role == "user" {
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")