增加未达到字数处理
	
		
			
	
		
	
	
		
	
		
			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
					
				| @ -460,16 +460,19 @@ func (s *LLMService) handleStreamingResponse(req *http.Request, data map[string] | |||||||
| 							new_message = strings.Join(segments[:len(segments)-1], "") | 							new_message = strings.Join(segments[:len(segments)-1], "") | ||||||
| 							// initialSessage = "" | 							// initialSessage = "" | ||||||
| 						} else { | 						} else { | ||||||
| 							continue | 							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 { | 					} else { | ||||||
| 
 | 
 | ||||||
| 						if utf8.RuneCountInString(initialSessage) > 15 { | 						if utf8.RuneCountInString(initialSessage) > 15 { | ||||||
| 							new_message = initialSessage | 							new_message = initialSessage | ||||||
| 							initialSessage = "" | 							initialSessage = "" | ||||||
| 						} else if utf8.RuneCountInString(initialSessage) <= 15 && containsPunctuation(initialSessage) { |  | ||||||
| 							new_message = initialSessage |  | ||||||
| 							initialSessage = "" |  | ||||||
| 						} else { | 						} else { | ||||||
| 							continue | 							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 | 					AudioData:      audio, // Update to use the correct path to audio data | ||||||
| 				} | 				} | ||||||
| 			case "message_end": | 			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{ | 				messageChan <- Message{ | ||||||
| 					Answer:         "", | 					Answer:         "", | ||||||
| 					IsEnd:          true, | 					IsEnd:          true, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Song367
						Song367