64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
|
|
package cache
|
||
|
|
|
||
|
|
import (
|
||
|
|
"crypto/sha256"
|
||
|
|
"encoding/hex"
|
||
|
|
"fmt"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
// GenerateCacheKey 生成缓存键
|
||
|
|
// 使用原文+语言对进行SHA256哈希
|
||
|
|
func GenerateCacheKey(originalText, fromLang, toLang string) string {
|
||
|
|
// 规范化语言代码
|
||
|
|
fromLang = normalizeLanguageCode(fromLang)
|
||
|
|
toLang = normalizeLanguageCode(toLang)
|
||
|
|
|
||
|
|
// 规范化原文
|
||
|
|
normalizedText := normalizeText(originalText)
|
||
|
|
|
||
|
|
// 生成缓存键
|
||
|
|
data := fmt.Sprintf("%s|%s|%s", normalizedText, fromLang, toLang)
|
||
|
|
hash := sha256.Sum256([]byte(data))
|
||
|
|
return hex.EncodeToString(hash[:])
|
||
|
|
}
|
||
|
|
|
||
|
|
// normalizeLanguageCode 规范化语言代码
|
||
|
|
func normalizeLanguageCode(lang string) string {
|
||
|
|
if lang == "" || lang == "auto" {
|
||
|
|
return "auto"
|
||
|
|
}
|
||
|
|
return strings.ToLower(strings.TrimSpace(lang))
|
||
|
|
}
|
||
|
|
|
||
|
|
// normalizeText 规范化文本
|
||
|
|
// 移除多余的空白字符,确保相同的文本生成相同的哈希
|
||
|
|
func normalizeText(text string) string {
|
||
|
|
// 移除首尾空白
|
||
|
|
text = strings.TrimSpace(text)
|
||
|
|
|
||
|
|
// 将多个连续空白字符替换为单个空格
|
||
|
|
text = strings.Join(strings.Fields(text), " ")
|
||
|
|
|
||
|
|
return text
|
||
|
|
}
|
||
|
|
|
||
|
|
// GenerateCacheKeyWithModel 生成包含模型信息的缓存键
|
||
|
|
// 如果需要更精确的缓存,可以使用这个函数
|
||
|
|
func GenerateCacheKeyWithModel(originalText, fromLang, toLang, model string) string {
|
||
|
|
// 规范化语言代码
|
||
|
|
fromLang = normalizeLanguageCode(fromLang)
|
||
|
|
toLang = normalizeLanguageCode(toLang)
|
||
|
|
|
||
|
|
// 规范化原文
|
||
|
|
normalizedText := normalizeText(originalText)
|
||
|
|
|
||
|
|
// 规范化模型名称
|
||
|
|
model = strings.ToLower(strings.TrimSpace(model))
|
||
|
|
|
||
|
|
// 生成缓存键
|
||
|
|
data := fmt.Sprintf("%s|%s|%s|%s", normalizedText, fromLang, toLang, model)
|
||
|
|
hash := sha256.Sum256([]byte(data))
|
||
|
|
return hex.EncodeToString(hash[:])
|
||
|
|
}
|