新增: 音频可视化8种新模式+节拍检测+鼠标交互

This commit is contained in:
2026-06-06 18:06:57 +08:00
parent 0302546267
commit bbbc32142d
2 changed files with 206 additions and 1 deletions

View File

@@ -48,6 +48,25 @@ func initKnowledgeDB() {
if err != nil {
log.Println("知识库建表失败:", err)
}
cleanPromptLeakedCards()
}
// cleanPromptLeakedCards 清理数据库中 prompt 泄露的垃圾卡片
func cleanPromptLeakedCards() {
if knowledgeDB == nil {
return
}
for _, sig := range promptLeakSignals {
result, err := knowledgeDB.Exec(
"DELETE FROM knowledge_cards WHERE content LIKE ?",
"%"+sig+"%",
)
if err == nil {
if n, _ := result.RowsAffected(); n > 0 {
log.Printf("清理 prompt 泄露卡片: 特征=%q, 删除=%d条", sig, n)
}
}
}
}
func saveKnowledgeCard(keyword, content string) {
@@ -312,12 +331,27 @@ var weakPhrases = []string{
"可以帮助", "广泛应用", "具有重要作用", "不可忽视", "具有重要意义",
}
// isQualityKnowledgeCard 检查质量字数≥120、有空泛表述上限、必须含数字、信息密度
// promptLeakSignals prompt 泄露特征词,命中任意一条即判定为 prompt 而非知识内容
var promptLeakSignals = []string{
"围绕「", "写一条", "角度写", "面向资深开发者",
"信息密度极高", "120-180字", "必须包含至少一个精确数值",
"必须讲清因果链", "不要写常见知识点", "不要复述官方文档",
"附加风格要求", "围绕「", "从「", "」角度",
}
// isQualityKnowledgeCard 检查质量字数≥120、有空泛表述上限、必须含数字、信息密度、prompt 泄露检测
func isQualityKnowledgeCard(content string) bool {
runes := utf8.RuneCountInString(content)
if runes < minKnowledgeRunes {
return false
}
// prompt 泄露检测:包含 prompt 指令特征的内容直接拒绝
for _, sig := range promptLeakSignals {
if strings.Contains(content, sig) {
log.Printf("知识卡片 prompt 泄露检测命中 %q丢弃", sig)
return false
}
}
// 必须包含数字(确保有具体数值)
if !numberRe.MatchString(content) {
return false