优化: 项目文件树/依赖图组件 + 灵感对抗校验 + 小程序脚本 + 模块管理
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
//! 对抗评估 — 纯函数 / 类型 / 常量(自 adversarial.rs 抽离,纯搬迁,零行为变更)。
|
||||
//!
|
||||
//! 本文件承载 [`AdversarialEval`] 及其字段类型、LLM prompt 构造与 JSON 解析等无副作用
|
||||
//! 逻辑;有状态的引擎 [`AdversarialEngine`](含 evaluate / evaluate_with_llm 主入口与
|
||||
//! ARC-260618-01-e 待决策逻辑)仍留在 `adversarial.rs`,二者经 [`use`] 互相引用。
|
||||
//! 本文件承载 [`AdversarialEval`] 及其字段类型、LLM prompt 构造、JSON 解析与自洽性校验
|
||||
//! 等无副作用逻辑;有状态的引擎 [`AdversarialEngine`](含 evaluate / evaluate_with_llm
|
||||
//! 主入口,经 [`enforce_score_consistency`] 落地 ARC-260618-01-e 自洽性校验)仍留在
|
||||
//! `adversarial.rs`,二者经 [`use`] 互相引用。
|
||||
//!
|
||||
//! 抽离边界:类型定义(非 impl)+ 常量 + 顶层 free function。impl 主体不动,外部
|
||||
//! 已用路径(`df_ideas::adversarial::{AdversarialEngine, AdversarialEval, Recommendation}` 等)
|
||||
@@ -336,6 +337,69 @@ pub(crate) fn parse_recommendation(s: &str) -> Result<Recommendation> {
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// 自洽性校验(ARC-260618-01-e 已实施)— 综合评分分档 / 修正矛盾字段
|
||||
// ============================================================
|
||||
|
||||
/// 评估等级 → 最终建议(与启发式 recommendation 映射同一套,收敛于此单点实现)。
|
||||
pub(crate) fn recommendation_for_level(level: &AssessmentLevel) -> Recommendation {
|
||||
match level {
|
||||
AssessmentLevel::StrongGo => Recommendation::ImmediateAction,
|
||||
AssessmentLevel::Recommended => Recommendation::Soon,
|
||||
AssessmentLevel::Conditional => Recommendation::WithResources,
|
||||
AssessmentLevel::Revised => Recommendation::ResearchMore,
|
||||
AssessmentLevel::Defer => Recommendation::Monitor,
|
||||
}
|
||||
}
|
||||
|
||||
/// 综合评分 → 评估等级(分档与启发式 analyst_analysis 一致;自洽性校验复用,单源防两处漂移)。
|
||||
pub(crate) fn assessment_for_score(score: f64) -> AssessmentLevel {
|
||||
if score >= 7.5 {
|
||||
AssessmentLevel::StrongGo
|
||||
} else if score >= 6.0 {
|
||||
AssessmentLevel::Recommended
|
||||
} else if score >= 4.5 {
|
||||
AssessmentLevel::Conditional
|
||||
} else if score >= 3.0 {
|
||||
AssessmentLevel::Revised
|
||||
} else {
|
||||
AssessmentLevel::Defer
|
||||
}
|
||||
}
|
||||
|
||||
/// 综合评分 → 最终建议(先分档再映射)。
|
||||
pub(crate) fn recommendation_for_score(score: f64) -> Recommendation {
|
||||
recommendation_for_level(&assessment_for_score(score))
|
||||
}
|
||||
|
||||
/// 自洽性校验: LLM 解析结果可能 final_score 与 recommendation / analyst.final_assessment
|
||||
/// 互相矛盾(如高分配 Monitor、低分配 ImmediateAction),parse 只校验枚举合法性不校验语义。
|
||||
/// 以 final_score 为准重新判定这两个结构化字段消除矛盾;LLM 生成的论点/证据/summary 等
|
||||
/// 自由文本原样保留。不改 LLM 调用/输出结构,只在解析后修正字段值(ARC-260618-01-e)。
|
||||
pub(crate) fn enforce_score_consistency(mut eval: AdversarialEval) -> AdversarialEval {
|
||||
let expected_rec = recommendation_for_score(eval.final_score);
|
||||
let expected_level = assessment_for_score(eval.final_score);
|
||||
if eval.recommendation != expected_rec {
|
||||
tracing::warn!(
|
||||
score = eval.final_score,
|
||||
from = ?eval.recommendation,
|
||||
to = ?expected_rec,
|
||||
"LLM 评估自洽性修正: recommendation 与 final_score 矛盾,按 final_score 重新判定"
|
||||
);
|
||||
eval.recommendation = expected_rec;
|
||||
}
|
||||
if eval.analyst.final_assessment != expected_level {
|
||||
tracing::warn!(
|
||||
score = eval.final_score,
|
||||
from = ?eval.analyst.final_assessment,
|
||||
to = ?expected_level,
|
||||
"LLM 评估自洽性修正: final_assessment 与 final_score 矛盾,按 final_score 重新判定"
|
||||
);
|
||||
eval.analyst.final_assessment = expected_level;
|
||||
}
|
||||
eval
|
||||
}
|
||||
|
||||
pub(crate) fn priority_label(p: &Priority) -> &'static str {
|
||||
match p {
|
||||
Priority::Critical => "紧急",
|
||||
|
||||
Reference in New Issue
Block a user