增加未达到字数处理
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
				
			This commit is contained in:
		
							parent
							
								
									9aee63f624
								
							
						
					
					
						commit
						fe13751624
					
				| @ -459,17 +459,20 @@ func (s *LLMService) handleStreamingResponse(req *http.Request, data map[string] | ||||
| 							// 如果超过10个字符,将其添加到new_message中并清空initialSessage | ||||
| 							new_message = strings.Join(segments[:len(segments)-1], "") | ||||
| 							// initialSessage = "" | ||||
| 						} else { | ||||
| 							if containsPunctuation(format_message) && utf8.RuneCountInString(format_message) > 10 { | ||||
| 
 | ||||
| 								initialSessage = segments[len(segments)-1] | ||||
| 								new_message = strings.Join(segments[:len(segments)-1], "") | ||||
| 							} else { | ||||
| 								continue | ||||
| 							} | ||||
| 						} | ||||
| 					} else { | ||||
| 
 | ||||
| 						if utf8.RuneCountInString(initialSessage) > 15 { | ||||
| 							new_message = initialSessage | ||||
| 							initialSessage = "" | ||||
| 						} else if utf8.RuneCountInString(initialSessage) <= 15 && containsPunctuation(initialSessage) { | ||||
| 							new_message = initialSessage | ||||
| 							initialSessage = "" | ||||
| 						} else { | ||||
| 							continue | ||||
| 						} | ||||
| @ -544,6 +547,96 @@ func (s *LLMService) handleStreamingResponse(req *http.Request, data map[string] | ||||
| 					AudioData:      audio, // Update to use the correct path to audio data | ||||
| 				} | ||||
| 			case "message_end": | ||||
| 				// 在流结束前,处理剩余的文本生成音频 | ||||
| 				if initialSessage != "" { | ||||
| 					// 不管文本长度,直接生成音频 | ||||
| 					s_msg := strings.TrimSpace(initialSessage) | ||||
| 					// 定义标点符号map | ||||
| 					punctuations := map[string]bool{ | ||||
| 						",": true, ",": true, // 逗号 | ||||
| 						".": true, "。": true, // 句号 | ||||
| 						"!": true, "!": true, // 感叹号 | ||||
| 						"?": true, "?": true, // 问号 | ||||
| 						";": true, ";": true, // 分号 | ||||
| 						":": true, ":": true, // 冒号 | ||||
| 						"、": true, | ||||
| 					} | ||||
| 
 | ||||
| 					// 删除字符串前后的标点符号 | ||||
| 					trimPunctuation := func(s string) string { | ||||
| 						if len(s) > 0 { | ||||
| 							lastRune, size := utf8.DecodeLastRuneInString(s) | ||||
| 							if punctuations[string(lastRune)] { | ||||
| 								s = s[:len(s)-size] | ||||
| 							} | ||||
| 						} | ||||
| 						return s | ||||
| 					} | ||||
| 
 | ||||
| 					new_message := trimPunctuation(s_msg) | ||||
| 					fmt.Println("最后一段文本生成音频:", new_message) | ||||
| 
 | ||||
| 					// 生成语音 | ||||
| 					var audio string | ||||
| 					for i := 0; i < 1; i++ { | ||||
| 						speechResp, err := s.SynthesizeSpeech(new_message, audio_type) | ||||
| 						if err != nil { | ||||
| 							fmt.Printf("Error synthesizing speech: %v\n", err) | ||||
| 							break | ||||
| 						} | ||||
| 						fmt.Println("语音:", speechResp) | ||||
| 						audio = speechResp.Data.Audio | ||||
| 						if audio != "" { | ||||
| 							// 下载并处理音频 | ||||
| 							resp, err := http.Get(audio) | ||||
| 							if err != nil { | ||||
| 								fmt.Printf("Error downloading audio: %v\n", err) | ||||
| 							} else { | ||||
| 								defer resp.Body.Close() | ||||
| 								audioBytes, err := io.ReadAll(resp.Body) | ||||
| 								if err != nil { | ||||
| 									fmt.Printf("Error reading audio data: %v\n", err) | ||||
| 								} else { | ||||
| 									// 保存原始音频 | ||||
| 									originalPath := fmt.Sprintf("audio/original_%d.wav", time.Now().UnixNano()) | ||||
| 									if err := os.WriteFile(originalPath, audioBytes, 0644); err != nil { | ||||
| 										fmt.Printf("Error saving original audio: %v\n", err) | ||||
| 									} | ||||
| 
 | ||||
| 									// 静音裁剪 | ||||
| 									audioBase64 := base64.StdEncoding.EncodeToString(audioBytes) | ||||
| 									trimmedAudio, err := s.TrimAudioSilence(audioBase64) | ||||
| 									if err != nil { | ||||
| 										fmt.Printf("Error trimming audio silence: %v\n", err) | ||||
| 									} else { | ||||
| 										audio_path := fmt.Sprintf("trimmed_%d.wav", time.Now().UnixNano()) | ||||
| 										outputPath := "audio/" + audio_path | ||||
| 										if err := s.SaveBase64AsWAV(trimmedAudio, outputPath); err != nil { | ||||
| 											fmt.Printf("Error saving trimmed WAV file: %v\n", err) | ||||
| 										} | ||||
| 										audio = s.config.FILE_URL + audio_path | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 							break | ||||
| 						} | ||||
| 					} | ||||
| 
 | ||||
| 					// 发送最后一段文本的消息 | ||||
| 					messageChan <- Message{ | ||||
| 						Answer:         s_msg, | ||||
| 						IsEnd:          false, | ||||
| 						ConversationID: getString(jsonData, "conversation_id"), | ||||
| 						TaskID:         getString(jsonData, "task_id"), | ||||
| 						ClientID:       getString(data, "conversation_id"), | ||||
| 						AudioData:      audio, | ||||
| 					} | ||||
| 
 | ||||
| 					// 清空剩余文本 | ||||
| 					initialSessage = "" | ||||
| 				} | ||||
| 
 | ||||
| 				// 发送结束消息 | ||||
| 				messageChan <- Message{ | ||||
| 					Answer:         "", | ||||
| 					IsEnd:          true, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Song367
						Song367