💻 源码
import json
from pathlib import Path
from typing import Any

DATA_DIR = Path(__file__).resolve().parent.parent / "data"


def load_attack_samples() -> dict[str, Any]:
    with open(DATA_DIR / "attack_samples.json", encoding="utf-8") as f:
        return json.load(f)


def load_fake_secrets() -> dict[str, Any]:
    with open(DATA_DIR / "fake_secrets.json", encoding="utf-8") as f:
        return json.load(f)


def get_scenario(scenario_id: str) -> dict[str, Any] | None:
    samples = load_attack_samples()
    return samples.get(scenario_id)


def get_sample(scenario_id: str, sample_id: str) -> dict[str, Any] | None:
    scenario = get_scenario(scenario_id)
    if not scenario:
        return None
    for sample in scenario.get("samples", []):
        if sample["id"] == sample_id:
            return sample
    return None


def resolve_attack_meta(scenario_id: str, sample_id: str | None) -> dict[str, Any]:
    scenario = get_scenario(scenario_id) or {}
    meta: dict[str, Any] = {
        "scenario": scenario_id,
        "scenario_name": scenario.get("name", scenario_id),
        "sample_id": sample_id,
        "sample_name": None,
        "intent": None,
        "expected_consequences": [],
    }
    if sample_id:
        sample = get_sample(scenario_id, sample_id)
        if sample:
            meta["sample_name"] = sample.get("name")
            meta["intent"] = sample.get("intent")
            meta["expected_consequences"] = sample.get("consequences", [])
    return meta