File size: 2,628 Bytes
03c63b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# state.py
# ============================================================
# 类型:数据模型定义(乙负责,PPT 展示用)
# 功能:定义整个系统的核心数据结构
# 用途:PPT 中展示架构设计能力;代码中不需要 import,仅作为参考
# ============================================================

from dataclasses import dataclass, field
from typing import Optional


# ---- 第一层:研究方向 ----

@dataclass
class MethodFamily:
    """方法族"""
    family_name: str           # 如 "Embedding-based Anomaly Detection"
    description: str           # 一句话核心特点
    representative_work: str   # 代表论文,如 "PaDiM (2021)"
    search_queries: list[str]  # GitHub 搜索词


@dataclass
class DirectionAnalysis:
    """研究方向解析结果(Agent 1 的输出)"""
    subfield: str              # 子领域名
    subfield_trend: str        # 当前趋势
    method_families: list[MethodFamily]
    broad_queries: list[str]   # 宽泛搜索词


# ---- 第二层:候选仓库 ----

@dataclass
class CandidateRepo:
    """候选仓库(甲的 Workflow 输出)"""
    full_name: str             # "openvinotoolkit/anomalib"
    html_url: str
    description: str
    stars: int
    language: str
    updated_at: str
    topics: list[str]
    match_keyword: str         # 命中哪个搜索词
    method_family: str         # 归类到哪个方法族(可为空)
    readme: Optional[str] = None
    dependencies: dict[str, str] = field(default_factory=dict)


# ---- 第三层:评估结果 ----

@dataclass
class EvalResult:
    """单个仓库的评估结果(Agent 2 的输出)"""
    reproducibility_score: int   # 可复现性总分 (0-80)
    benchmark_fitness_score: int # 对比实验适配度总分 (0-20)
    overall_score: int           # 综合总分 (0-100)
    verdict: str                 # reproducible / partially / not_reproducible
    env_score: int               # 0-15
    doc_score: int               # 0-20
    code_score: int              # 0-20
    community_score: int         # 0-10
    dep_score: int               # 0-15
    benchmark_score: int         # 0-20
    reasoning: str               # 分析文本
    risks: list[str]             # 风险列表
    benchmark_readiness: str     # ready / partial / not_ready
    suggested_use: str           # 建议用途


# ---- 顶层:完整研报 ----

@dataclass
class ResearchReport:
    """完整研究方向全景研报(run.py 的最终输出)"""
    paper_info: dict
    direction: DirectionAnalysis
    repos: list[tuple[CandidateRepo, EvalResult]]