"use client"; import { CheckCircle2, CircleDashed, UserRound } from "lucide-react"; import { Badge } from "@/components/ui/Badge"; import type { CharacterizationIssue, CharacterizationReport } from "@/lib/review/sse"; interface CharacterizationPanelProps { characterization: CharacterizationReport | null; incomplete: boolean; } // 高置信度阈值:≥0.7 为主区常显,<0.7 折进「更多低置信度建议」抽屉(控作者注意力预算,灵感 §10)。 const HIGH_CONFIDENCE = 0.7; // 人物塑造报告区(灵感③ advisory 单维):只读建议、**无裁决 UI**(不进 conflicts/不阻断验收)。 // 以人物卡 motive/appearance 为客观锚点;每条带逐字引用 + 置信度。按置信度降序, // 低置信度折叠,避免维度噪声淹没作者。 export function CharacterizationPanel({ characterization, incomplete, }: CharacterizationPanelProps) { if (incomplete) { return (
); } const issues = characterization?.issues ?? []; if (characterization === null || issues.length === 0) { return (
); } // 置信度降序(优先级合并);高/低分区。 const sorted = [...issues].sort((a, b) => b.confidence - a.confidence); const high = sorted.filter((i) => i.confidence >= HIGH_CONFIDENCE); const low = sorted.filter((i) => i.confidence < HIGH_CONFIDENCE); return (

以下为人物塑造建议(仅供参考,不影响验收)。忽略文本长度与辞藻,只看人物是否写得立体。

{high.length > 0 && low.length > 0 ? (
更多低置信度建议({low.length})
) : null}
); } function CharacterizationIssueCard({ issue }: { issue: CharacterizationIssue }) { const pct = Math.round(Math.max(0, Math.min(1, issue.confidence)) * 100); return (
  • {pct}%
    {issue.where ?

    定位:{issue.where}

    : null} {issue.quote ? (
    「{issue.quote}」
    ) : null} {issue.diagnosis ?

    {issue.diagnosis}

    : null} {issue.suggestion ? (

    建议:{issue.suggestion}

    ) : null}
  • ); }