import { useState } from 'react'; import { Check, Play, Wand2, X } from 'lucide-react'; import { api, errorText } from '../api'; import { CATEGORY_LABEL, SCOPE_LABEL, type Scope } from '../types'; interface Plan { id: number; key: string; value: string; category: string; school_count: number; observations: number; action: 'verify' | 'reject' | 'hold'; scope: Scope | null; reason: string; } interface Result { dry_run: boolean; examined: number; verified: number; rejected: number; held: number; policy: { min_schools: number; min_observations: number; require_llm: boolean; auto_reject: boolean; max_actions: number }; plans: { verify: Plan[]; reject: Plan[]; hold: Plan[] }; } function PlanList({ title, plans, tone }: { title: string; plans: Plan[]; tone: string }) { if (plans.length === 0) return null; return (
{title} · {plans.length}
); } export function AutoReview({ llmReady, onApplied, onMessage }: { llmReady: boolean; onApplied: () => void; onMessage: (text: string) => void; }) { const [minSchools, setMinSchools] = useState(2); const [minObservations, setMinObservations] = useState(3); const [requireLlm, setRequireLlm] = useState(true); const [autoReject, setAutoReject] = useState(true); const [result, setResult] = useState(null); const [busy, setBusy] = useState(false); async function run(dryRun: boolean): Promise { setBusy(true); try { const body = { dry_run: dryRun, min_schools: minSchools, min_observations: minObservations, require_llm: requireLlm, auto_reject: autoReject, }; const data = await api.post('/api/entries/auto-review', body); setResult(data); if (!dryRun) { onMessage(`已自动采纳 ${data.verified} 条、驳回 ${data.rejected} 条,留给人工 ${data.held} 条`); onApplied(); } } catch (error) { onMessage(errorText(error)); } finally { setBusy(false); } } return (

智能采纳

只对证据够硬的条目动手。系统规则和其他类永远留给人,因为一条错的规则会让 Agent 以后一直绕开正确操作。 自动驳回只是暂缓,那条知识再被观察到会退回队列;人工驳回才是终局。 {llmReady ? '模型已配置,会参与判断。' : '未配模型 Key,只用规则层,能自动处理的会少很多。'}

{busy && 模型逐条判断中,几十条要半分钟左右…}
{result && (

{result.dry_run ? '干跑结果(还没改任何状态)' : '已执行'}:检查 {result.examined} 条 → 采纳 {result.verified}、驳回 {result.rejected}、留给人工 {result.held}

)}

自动处理过的条目会标记来源为 auto,在队列里能筛出来复查,审错了点「退回待审」即可, 退回会分配新版本号推回各校。 单次最多处理 {result?.policy.max_actions ?? 50} 条。

); }