刘立冬 пре 2 недеља
родитељ
комит
2dc712a67f
1 измењених фајлова са 122 додато и 37 уклоњено
  1. 122 37
      visualization/knowledge_search_traverse/index.js

+ 122 - 37
visualization/knowledge_search_traverse/index.js

@@ -546,33 +546,66 @@ function NoteNode({ id, data, sourcePosition, targetPosition }) {
           </div>
         </div>
 
-        {/* 评估信息区域 */}
-        {(data.is_knowledge !== undefined && data.is_knowledge !== null || data.post_relevance_score !== undefined && data.post_relevance_score !== null) && (
+        {/* 评估信息区域 (V2) */}
+        {(data.knowledge_score !== undefined || data.post_relevance_score !== undefined || data.is_knowledge !== undefined) && (
           <div style={{
             marginBottom: '10px',
             paddingBottom: '8px',
             borderBottom: '1px solid #fce7f3',
           }}>
-            {/* 知识判定标签 */}
-            {(data.is_knowledge !== undefined && data.is_knowledge !== null) && (
+            {/* 知识评估 (V2) */}
+            {(data.knowledge_score !== undefined || data.is_knowledge !== undefined) && (
               <div style={{ marginBottom: '8px' }}>
-                <span style={{
-                  display: 'inline-block',
-                  padding: '3px 10px',
-                  borderRadius: '12px',
-                  fontSize: '11px',
-                  fontWeight: '600',
-                  background: data.is_knowledge ? '#dcfce7' : '#fee2e2',
-                  color: data.is_knowledge ? '#166534' : '#991b1b',
-                }}>
-                  {data.is_knowledge ? '✓ 知识内容' : '✗ 非知识'}
-                </span>
-                {data.knowledge_reason && (
+                <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '4px' }}>
+                  {/* 星级评分 */}
+                  {data.knowledge_level && (
+                    <span style={{ fontSize: '12px', lineHeight: '1' }}>
+                      {'⭐'.repeat(data.knowledge_level)}
+                    </span>
+                  )}
+                  {/* 综合得分 */}
+                  {data.knowledge_score != null && (
+                    <span style={{
+                      fontSize: '11px',
+                      fontWeight: '700',
+                      color: data.knowledge_score >= 70 ? '#166534' : data.knowledge_score >= 40 ? '#854d0e' : '#991b1b',
+                    }}>
+                      知识: {data.knowledge_score.toFixed(0)}分
+                    </span>
+                  )}
+                  {/* 兼容旧版: 知识判定标签 */}
+                  {!data.knowledge_score && data.is_knowledge !== undefined && (
+                    <span style={{
+                      display: 'inline-block',
+                      padding: '3px 10px',
+                      borderRadius: '12px',
+                      fontSize: '11px',
+                      fontWeight: '600',
+                      background: data.is_knowledge ? '#dcfce7' : '#fee2e2',
+                      color: data.is_knowledge ? '#166534' : '#991b1b',
+                    }}>
+                      {data.is_knowledge ? '✓ 知识' : '✗ 非知识'}
+                    </span>
+                  )}
+                </div>
+                {/* 知识评估总结 */}
+                {data.knowledge_evaluation?.summary && (
                   <div style={{
+                    fontSize: '10px',
+                    color: '#9f1239',
+                    lineHeight: '1.4',
                     marginTop: '4px',
+                  }}>
+                    {data.knowledge_evaluation.summary}
+                  </div>
+                )}
+                {/* 兼容旧版: 知识理由 */}
+                {!data.knowledge_evaluation?.summary && data.knowledge_reason && (
+                  <div style={{
                     fontSize: '10px',
                     color: '#9f1239',
                     lineHeight: '1.4',
+                    marginTop: '4px',
                   }}>
                     {data.knowledge_reason}
                   </div>
@@ -580,8 +613,8 @@ function NoteNode({ id, data, sourcePosition, targetPosition }) {
               </div>
             )}
 
-            {/* 相关性得分 */}
-            {(data.post_relevance_score !== undefined && data.post_relevance_score !== null) && (
+            {/* 相关性评估 (V2) */}
+            {data.post_relevance_score != null && (
               <div>
                 <div style={{
                   display: 'flex',
@@ -589,14 +622,33 @@ function NoteNode({ id, data, sourcePosition, targetPosition }) {
                   gap: '6px',
                   marginBottom: '4px',
                 }}>
+                  {/* V2: 0-100分制 (统一显示分数) */}
                   <span style={{
                     fontSize: '11px',
                     fontWeight: '600',
                     color: '#9f1239',
                   }}>
-                    相关性: {(data.post_relevance_score * 100).toFixed(0)}%
+                    相关性: {data.post_relevance_score.toFixed(0)}分
                   </span>
-                  {data.relevance_level && (
+                  {/* V2结论标签 */}
+                  {data.relevance_conclusion && (
+                    <span style={{
+                      padding: '2px 8px',
+                      borderRadius: '10px',
+                      fontSize: '10px',
+                      fontWeight: '600',
+                      background:
+                        data.relevance_conclusion.includes('高度') ? '#dcfce7' :
+                        data.relevance_conclusion.includes('中度') ? '#fef3c7' : '#fee2e2',
+                      color:
+                        data.relevance_conclusion.includes('高度') ? '#166534' :
+                        data.relevance_conclusion.includes('中度') ? '#854d0e' : '#991b1b',
+                    }}>
+                      {data.relevance_conclusion}
+                    </span>
+                  )}
+                  {/* V1兼容: 显示旧的相关性等级 */}
+                  {!data.relevance_conclusion && data.relevance_level && (
                     <span style={{
                       padding: '2px 8px',
                       borderRadius: '10px',
@@ -613,7 +665,30 @@ function NoteNode({ id, data, sourcePosition, targetPosition }) {
                     </span>
                   )}
                 </div>
-                {data.relevance_reason && (
+                {/* 相关性评估总结 (V2) */}
+                {data.relevance_evaluation?.summary && (
+                  <div style={{
+                    fontSize: '10px',
+                    color: '#9f1239',
+                    lineHeight: '1.4',
+                  }}>
+                    {data.relevance_evaluation.summary}
+                  </div>
+                )}
+                {/* 目的性和品类得分 (V2) */}
+                {data.relevance_evaluation?.purpose_score != null && data.relevance_evaluation?.category_score != null && (
+                  <div style={{
+                    fontSize: '9px',
+                    color: '#9f1239',
+                    marginTop: '3px',
+                    opacity: 0.8,
+                  }}>
+                    目的性:{data.relevance_evaluation.purpose_score.toFixed(0)}分(70%) |
+                    品类:{data.relevance_evaluation.category_score.toFixed(0)}分(30%)
+                  </div>
+                )}
+                {/* 兼容旧版: 相关性理由 */}
+                {!data.relevance_evaluation?.summary && data.relevance_reason && (
                   <div style={{
                     fontSize: '10px',
                     color: '#9f1239',
@@ -794,19 +869,7 @@ function NoteNode({ id, data, sourcePosition, targetPosition }) {
                 {data.matchLevel}
               </span>
             )}
-            {data.score && (
-              <span style={{
-                display: 'inline-block',
-                padding: '2px 8px',
-                borderRadius: '12px',
-                background: '#fff7ed',
-                color: '#c2410c',
-                fontSize: '10px',
-                fontWeight: '500',
-              }}>
-                Score: {data.score}
-              </span>
-            )}
+            {/* Score标签已隐藏 - V2不再需要 */}
           </div>
         )}
 
@@ -1167,7 +1230,22 @@ function TreeNode({ node, level, children, isCollapsed, onToggle, isSelected, on
   // 计算字体颜色:根据分数提升幅度判断
   let fontColor = '#374151'; // 默认颜色
   if (node.type === 'note') {
-    fontColor = node.data.matchLevel === 'unsatisfied' ? '#ef4444' : '#374151';
+    // V2评估:基于知识得分和相关性得分判断颜色
+    const knowledgeScore = node.data.knowledge_score;
+    const relevanceScore = node.data.post_relevance_score;
+
+    if (knowledgeScore != null && relevanceScore != null) {
+      if (knowledgeScore <= 40) {
+        fontColor = '#ef4444'; // 红色 - 知识得分低
+      } else if (knowledgeScore > 40 && relevanceScore > 40) {
+        fontColor = '#22c55e'; // 绿色 - 知识和相关性都高
+      } else {
+        fontColor = '#eab308'; // 黄色 - 知识得分高但相关性低
+      }
+    } else {
+      // V1兼容:如果没有V2评估数据,使用matchLevel判断
+      fontColor = node.data.matchLevel === 'unsatisfied' ? '#ef4444' : '#374151';
+    }
   } else if (node.data.seed_score !== undefined) {
     const parentScore = parseFloat(node.data.seed_score);
     const gain = score - parentScore;
@@ -1544,12 +1622,19 @@ function transformData(data) {
             evaluationReason: node.evaluationReason || node.evaluation_reason || '',
             interact_info: node.interact_info || {},
             nodeType: nodeType,
-            // 🆕 添加评估字段
+            // 🆕 评估字段 (V2)
+            // 知识评估
             is_knowledge: node.is_knowledge !== undefined ? node.is_knowledge : null,
             knowledge_reason: node.knowledge_reason || '',
+            knowledge_score: node.knowledge_score !== undefined ? node.knowledge_score : null,
+            knowledge_level: node.knowledge_level !== undefined ? node.knowledge_level : null,
+            knowledge_evaluation: node.knowledge_evaluation || null,
+            // 相关性评估
             post_relevance_score: node.post_relevance_score !== undefined ? node.post_relevance_score : null,
             relevance_level: node.relevance_level || '',
-            relevance_reason: node.relevance_reason || ''
+            relevance_reason: node.relevance_reason || '',
+            relevance_conclusion: node.relevance_conclusion || '',
+            relevance_evaluation: node.relevance_evaluation || null
           },
           position: { x: 0, y: 0 },
         });