{"record":{"id":"3082f3a53719e681","repo":"Tencent/WeKnora","slug":"error-3082f3","errorCode":null,"errorMessage":"答案不能全为空","messagePattern":"答案不能全为空","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/application/service/knowledge_faq_import.go","lineNumber":979,"sourceCode":"\tif entry == nil {\n\t\treturn fmt.Errorf(\"条目不能为空\")\n\t}\n\tstandardQ := strings.TrimSpace(entry.StandardQuestion)\n\tif standardQ == \"\" {\n\t\treturn fmt.Errorf(\"标准问不能为空\")\n\t}\n\tif len(entry.Answers) == 0 {\n\t\treturn fmt.Errorf(\"答案不能为空\")\n\t}\n\thasValidAnswer := false\n\tfor _, a := range entry.Answers {\n\t\tif strings.TrimSpace(a) != \"\" {\n\t\t\thasValidAnswer = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !hasValidAnswer {\n\t\treturn fmt.Errorf(\"答案不能全为空\")\n\t}\n\treturn nil\n}\n\ntype faqMergeOperation struct {\n\tEntry         types.FAQEntryPayload\n\tExistingChunk *types.Chunk\n\tOldMeta       *types.FAQChunkMetadata\n\tMergedMeta    *types.FAQChunkMetadata\n\tDetail        types.FAQMergeDetail\n}\n\n// calculateAppendOperations 计算 Append 模式下的操作（支持智能合并）。\n// 如果 entry 的标准问在 KB 中已存在，则视为合并操作（相似问 / 反例并集，\n// 答案 / 策略以新条目为准）；否则视为新建。无变化（hash 一致且操作位\n// 也未变）的合并目标会被 skip 掉，避免无效写库 / 重建索引。\n//\n// 内部 master 行为，对应开源版仅 \"重复 = 失败\" 的简化逻辑。FAQ 导入的","sourceCodeStart":961,"sourceCodeEnd":997,"githubUrl":"https://github.com/Tencent/WeKnora/blob/988cbb03305e055d8ebb7d46d9ac6cc0803cd074/internal/application/service/knowledge_faq_import.go#L961-L997","documentation":"Basic FAQ import validation (validateFAQEntryPayloadBasic): the Answers slice is non-empty but every answer is blank after trimming, so there is no usable answer text. This fires after the hasValidAnswer loop fails, catching payloads that try to satisfy 'answers required' with whitespace-only entries.","triggerScenarios":"Thrown at internal/application/service/knowledge_faq_import.go:979 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure at least one answer contains non-whitespace content","Strip empty-string answers when building the payload client-side","Check dry-run CSV output for rows flagged with this reason"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"988cbb03305e055d8ebb7d46d9ac6cc0803cd074","analyzedAt":"2026-09-02T14:41:08.344Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}