新增: 音频可视化8种新模式+节拍检测+鼠标交互
This commit is contained in:
36
knowledge.go
36
knowledge.go
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user