eduevidence 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +506 -0
- package/README.zh-CN.md +434 -0
- package/SKILL.md +195 -0
- package/bin/eduevidence.js +127 -0
- package/domains/education/manifest.json +183 -0
- package/domains/education/outcome_taxonomy.json +127 -0
- package/domains/manifest.json +26 -0
- package/domains/policy/frame.schema.json +234 -0
- package/domains/policy/manifest.json +10 -0
- package/domains/policy/methodology_checklist.json +109 -0
- package/domains/policy/outcome_taxonomy.json +53 -0
- package/domains/policy/references/causal-identification.md +45 -0
- package/domains/policy/references/cost-evidence.md +44 -0
- package/domains/policy/references/equity.md +42 -0
- package/domains/policy/references/evidence-hierarchy.md +41 -0
- package/domains/policy/references/implementation-evidence.md +47 -0
- package/eduevidence_cli.py +26 -0
- package/engine/__init__.py +11 -0
- package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
- package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
- package/engine/__pycache__/bias.cpython-312.pyc +0 -0
- package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
- package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
- package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
- package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
- package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
- package/engine/__pycache__/events.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
- package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
- package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
- package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
- package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
- package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
- package/engine/__pycache__/ids.cpython-312.pyc +0 -0
- package/engine/__pycache__/library.cpython-312.pyc +0 -0
- package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
- package/engine/__pycache__/living.cpython-312.pyc +0 -0
- package/engine/__pycache__/log.cpython-312.pyc +0 -0
- package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
- package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
- package/engine/__pycache__/migration.cpython-312.pyc +0 -0
- package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
- package/engine/__pycache__/paths.cpython-312.pyc +0 -0
- package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
- package/engine/__pycache__/planner.cpython-312.pyc +0 -0
- package/engine/__pycache__/project.cpython-312.pyc +0 -0
- package/engine/__pycache__/projections.cpython-312.pyc +0 -0
- package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
- package/engine/__pycache__/run.cpython-312.pyc +0 -0
- package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
- package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
- package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
- package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
- package/engine/__pycache__/update.cpython-312.pyc +0 -0
- package/engine/__pycache__/versions.cpython-312.pyc +0 -0
- package/engine/analysis.py +308 -0
- package/engine/bias.py +178 -0
- package/engine/briefs.py +106 -0
- package/engine/capabilities.py +99 -0
- package/engine/citation_check.py +192 -0
- package/engine/contracts.py +117 -0
- package/engine/datasets.py +165 -0
- package/engine/events.py +67 -0
- package/engine/evidence_graph.py +571 -0
- package/engine/evidence_review.py +88 -0
- package/engine/evidencecore.py +182 -0
- package/engine/gap_lens.py +132 -0
- package/engine/gaps.py +169 -0
- package/engine/graph_store.py +335 -0
- package/engine/graph_validate.py +87 -0
- package/engine/ids.py +77 -0
- package/engine/library.py +268 -0
- package/engine/library_builtin.py +301 -0
- package/engine/living.py +671 -0
- package/engine/log.py +39 -0
- package/engine/meta_analysis.py +333 -0
- package/engine/meta_synthesis.py +111 -0
- package/engine/migration.py +397 -0
- package/engine/mode_router.py +72 -0
- package/engine/paths.py +15 -0
- package/engine/pilot.py +368 -0
- package/engine/planner.py +126 -0
- package/engine/project.py +118 -0
- package/engine/projections.py +240 -0
- package/engine/robustness.py +109 -0
- package/engine/run.py +85 -0
- package/engine/semantics.py +135 -0
- package/engine/study_design.py +87 -0
- package/engine/synthesis.py +187 -0
- package/engine/tribunal.py +408 -0
- package/engine/update.py +113 -0
- package/engine/versions.py +12 -0
- package/install.sh +510 -0
- package/integrations/__init__.py +1 -0
- package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
- package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
- package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
- package/integrations/agent_mcp.py +856 -0
- package/integrations/smart_web_fetch.py +59 -0
- package/package.json +50 -0
- package/pyproject.toml +55 -0
- package/references/applicability-policy.md +88 -0
- package/references/education-framing.md +132 -0
- package/references/effect_size_formulas.md +35 -0
- package/references/evaluation-design.md +111 -0
- package/references/evidence-quality.md +79 -0
- package/references/grade_framework.md +29 -0
- package/references/intervention-design.md +98 -0
- package/references/methodology-audit.md +103 -0
- package/references/outcome-taxonomy.md +106 -0
- package/references/retrieval-protocol.md +142 -0
- package/references/skeptic-protocol.md +93 -0
- package/references/social_science_pitfalls.md +48 -0
- package/references/source-validity.md +140 -0
- package/references/tribunal-policy.md +112 -0
- package/references/wwc_standards.md +29 -0
- package/retrieval/__init__.py +1 -0
- package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
- package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
- package/retrieval/corpus_store.py +181 -0
- package/retrieval/dedupe.py +127 -0
- package/retrieval/failures.py +90 -0
- package/retrieval/fetch.py +435 -0
- package/retrieval/search.py +493 -0
- package/retrieval/source.py +160 -0
- package/retrieval/validate.py +257 -0
- package/schemas/agent-mcp-approval.schema.json +57 -0
- package/schemas/chart-spec.schema.json +88 -0
- package/schemas/cross-model-review.schema.json +28 -0
- package/schemas/education-frame.schema.json +106 -0
- package/schemas/evaluation.schema.json +35 -0
- package/schemas/evidence.schema.json +81 -0
- package/schemas/fetch-result.schema.json +119 -0
- package/schemas/intervention.schema.json +46 -0
- package/schemas/methodology.schema.json +102 -0
- package/schemas/report-result.schema.json +381 -0
- package/schemas/report-spec.schema.json +130 -0
- package/schemas/source.schema.json +311 -0
- package/schemas/v2/analysis-plan.schema.json +28 -0
- package/schemas/v2/analysis-run.schema.json +33 -0
- package/schemas/v2/claim.schema.json +26 -0
- package/schemas/v2/dataset-asset.schema.json +40 -0
- package/schemas/v2/decision-snapshot.schema.json +53 -0
- package/schemas/v2/evidence-link.schema.json +38 -0
- package/schemas/v2/finding.schema.json +47 -0
- package/schemas/v2/graph-revision.schema.json +30 -0
- package/schemas/v2/knowledge-gap.schema.json +40 -0
- package/schemas/v2/methodology-audit.schema.json +30 -0
- package/schemas/v2/outcome.schema.json +18 -0
- package/schemas/v2/project.schema.json +31 -0
- package/schemas/v2/research-intent.schema.json +24 -0
- package/schemas/v2/run.schema.json +43 -0
- package/schemas/v2/source.schema.json +24 -0
- package/schemas/v2/study-design.schema.json +67 -0
- package/schemas/v2/study.schema.json +37 -0
- package/schemas/v3/pilot-outcome.schema.json +132 -0
- package/schemas/v3/run-manifest.schema.json +193 -0
- package/schemas/v3/synthesis.schema.json +86 -0
- package/schemas/v4/drift-report.schema.json +66 -0
- package/schemas/v4/evidence-library.schema.json +42 -0
- package/schemas/v4/living-subscription.schema.json +55 -0
- package/schemas/v4/meta-analysis.schema.json +152 -0
- package/schemas/verdict.schema.json +56 -0
- package/scripts/__init__.py +0 -0
- package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
- package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
- package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
- package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
- package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
- package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
- package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
- package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
- package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
- package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
- package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
- package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
- package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
- package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
- package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
- package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
- package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
- package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
- package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
- package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
- package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
- package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
- package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
- package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
- package/scripts/audit_dois.py +292 -0
- package/scripts/bake_pack.sh +37 -0
- package/scripts/benchmark.py +183 -0
- package/scripts/benchmark_evaluator.py +371 -0
- package/scripts/benchmark_judge.py +535 -0
- package/scripts/benchmark_routing.py +120 -0
- package/scripts/benchmark_v2.py +304 -0
- package/scripts/benchmark_v3.py +552 -0
- package/scripts/build_esl_artifacts.py +1921 -0
- package/scripts/build_evidence_library.py +307 -0
- package/scripts/build_killer_demo.py +295 -0
- package/scripts/build_result.py +311 -0
- package/scripts/check_version_consistency.py +96 -0
- package/scripts/citation_check.py +123 -0
- package/scripts/claim_audit.py +157 -0
- package/scripts/complexity_gate.py +180 -0
- package/scripts/compute_confidence.py +176 -0
- package/scripts/dashboard_server.py +536 -0
- package/scripts/did_regression.py +315 -0
- package/scripts/effect_calculator.py +99 -0
- package/scripts/enrich_projects_human_and_lieflat.py +315 -0
- package/scripts/evidence_matrix.py +129 -0
- package/scripts/evidence_score.py +234 -0
- package/scripts/evidence_semantics.py +87 -0
- package/scripts/fetch_benchmark.py +177 -0
- package/scripts/generate_metrics.py +99 -0
- package/scripts/generate_new_projects.py +686 -0
- package/scripts/generate_promo.py +192 -0
- package/scripts/lint_report_layout.py +182 -0
- package/scripts/orchestrator.py +1456 -0
- package/scripts/pre_verdict_gate.py +513 -0
- package/scripts/quickstart.py +121 -0
- package/scripts/rebake_all_5themes.py +88 -0
- package/scripts/recompute_demo_quality.py +205 -0
- package/scripts/render_report.py +270 -0
- package/scripts/render_report_html.py +356 -0
- package/scripts/retraction_watch.py +110 -0
- package/scripts/run_workspace.py +337 -0
- package/scripts/serve_web.py +54 -0
- package/scripts/skill_lint.py +150 -0
- package/scripts/startup_probe.py +265 -0
- package/scripts/sync_killer_demo_report.py +270 -0
- package/scripts/test_adversarial_empirical.py +541 -0
- package/scripts/validate_schema.py +256 -0
- package/skill/agents/education-planner.md +80 -0
- package/skill/agents/evaluation-designer.md +74 -0
- package/skill/agents/evidence-analyst.md +106 -0
- package/skill/agents/evidence-judge.md +111 -0
- package/skill/agents/evidence-retriever.md +80 -0
- package/skill/agents/intervention-designer.md +82 -0
- package/skill/agents/method-reviewer.md +104 -0
- package/skill/agents/skeptic.md +89 -0
- package/skill/sub-skills/aihot-trend-analysis/SKILL.md +31 -0
- package/skill/sub-skills/contradiction-analysis/SKILL.md +17 -0
- package/skill/sub-skills/data-analysis/SKILL.md +23 -0
- package/skill/sub-skills/ethics-review/SKILL.md +25 -0
- package/skill/sub-skills/evidence-extraction/SKILL.md +19 -0
- package/skill/sub-skills/evidence-review/SKILL.md +18 -0
- package/skill/sub-skills/gap-analysis/SKILL.md +25 -0
- package/skill/sub-skills/literature-review/SKILL.md +21 -0
- package/skill/sub-skills/methodology-audit/SKILL.md +20 -0
- package/skill/sub-skills/report-generation/SKILL.md +51 -0
- package/skill/sub-skills/research-planning/SKILL.md +21 -0
- package/skill/sub-skills/study-design/SKILL.md +16 -0
- package/skill/task-briefs/adjudicate.md +17 -0
- package/skill/task-briefs/audit.md +15 -0
- package/skill/task-briefs/challenge.md +15 -0
- package/skill/task-briefs/evaluate.md +13 -0
- package/skill/task-briefs/extract.md +16 -0
- package/skill/task-briefs/frame.md +17 -0
- package/skill/task-briefs/intervene.md +14 -0
- package/skill/task-briefs/present.md +16 -0
- package/skill/task-briefs/retrieve.md +15 -0
- package/visualization/eduevidence-report/assets/base.css +337 -0
- package/visualization/eduevidence-report/motion/motion.css +157 -0
- package/visualization/eduevidence-report/motion/motion.js +107 -0
- package/visualization/eduevidence-report/references/bilingual-style.md +7 -0
- package/visualization/eduevidence-report/references/component-catalog.md +145 -0
- package/visualization/eduevidence-report/references/evidence-expansion.md +65 -0
- package/visualization/eduevidence-report/references/full-report-outline.md +86 -0
- package/visualization/eduevidence-report/references/layout-constraints.md +63 -0
- package/visualization/eduevidence-report/references/lieflat-composition.md +79 -0
- package/visualization/eduevidence-report/references/motion-system.md +31 -0
- package/visualization/eduevidence-report/schemas/adapter-envelope.schema.json +22 -0
- package/visualization/eduevidence-report/schemas/visual-layout.schema.json +87 -0
- package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
- package/visualization/eduevidence-report/scripts/adapter_contract.py +72 -0
- package/visualization/eduevidence-report/scripts/build_artifact_manifest.py +70 -0
- package/visualization/eduevidence-report/scripts/build_charts.py +283 -0
- package/visualization/eduevidence-report/scripts/build_figures.py +515 -0
- package/visualization/eduevidence-report/scripts/build_infographics.py +268 -0
- package/visualization/eduevidence-report/scripts/build_report.py +3211 -0
- package/visualization/eduevidence-report/scripts/charts_data.py +617 -0
- package/visualization/eduevidence-report/scripts/check_mobile_layout.js +220 -0
- package/visualization/eduevidence-report/scripts/lieflat_engine.py +852 -0
- package/visualization/eduevidence-report/scripts/zh_labels.py +245 -0
- package/visualization/eduevidence-report/themes/academic.css +94 -0
- package/visualization/eduevidence-report/themes/claude.css +96 -0
- package/visualization/eduevidence-report/themes/datalab-dark.css +147 -0
- package/visualization/eduevidence-report/themes/datalab.css +151 -0
- package/visualization/eduevidence-report/themes/presentation.css +140 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""smart_web_fetch.py — Smart Web Fetch integration wrapper (v3 方案).
|
|
3
|
+
|
|
4
|
+
Positioning: Fetch Reliability Layer, NOT a search layer. It reads a known URL
|
|
5
|
+
reliably through the provider degradation chain and records provenance.
|
|
6
|
+
|
|
7
|
+
Security principles (v3 §26):
|
|
8
|
+
- record provider, keep original_url
|
|
9
|
+
- NEVER send private/login/session pages to third-party cleaning services
|
|
10
|
+
- never send local files; never send private teaching data
|
|
11
|
+
- private materials are handled locally only
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
from integrations.smart_web_fetch import smart_fetch
|
|
15
|
+
result = smart_fetch("https://doi.org/10.xxxx", expect_title="...")
|
|
16
|
+
# result["fetch_status"] in {"FETCH_VALID", "FETCH_PARTIAL", "FETCH_FAILED"}
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
from retrieval.fetch import fetch_url
|
|
23
|
+
from retrieval.validate import is_private_url
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def is_private(url: str) -> bool:
|
|
27
|
+
"""Private/local URLs must never go through third-party cleaning providers.
|
|
28
|
+
|
|
29
|
+
Host-based judgement (urllib.parse.urlparse + ipaddress): loopback, private,
|
|
30
|
+
link-local, CGNAT, reserved ranges and local hostnames. URL path content —
|
|
31
|
+
e.g. a DOI's "10." prefix — never influences the verdict, so
|
|
32
|
+
https://doi.org/10.1145/... is NOT private. See retrieval.validate.is_private_url.
|
|
33
|
+
"""
|
|
34
|
+
return is_private_url(url)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def smart_fetch(url: str, *, expect_title: str | None = None, timeout: int = 20) -> dict[str, Any]:
|
|
38
|
+
"""Fetch a known URL through the Smart Web Fetch chain.
|
|
39
|
+
|
|
40
|
+
Private URLs are fetched natively only (no third-party cleaning).
|
|
41
|
+
"""
|
|
42
|
+
if is_private(url):
|
|
43
|
+
result = fetch_url(url, use_smart_fetch=False, timeout=timeout, expect_title=expect_title)
|
|
44
|
+
result["validation"]["checks"]["private_url_local_only"] = True
|
|
45
|
+
return result
|
|
46
|
+
return fetch_url(url, use_smart_fetch=True, timeout=timeout, expect_title=expect_title)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def fetch_summary(result: dict[str, Any]) -> dict[str, Any]:
|
|
50
|
+
"""Compact fetch provenance summary for report Sources & Provenance panel."""
|
|
51
|
+
return {
|
|
52
|
+
"original_url": result.get("original_url"),
|
|
53
|
+
"resolved_url": result.get("resolved_url"),
|
|
54
|
+
"fetch_provider": result.get("fetch_provider"),
|
|
55
|
+
"fetch_status": result.get("fetch_status"),
|
|
56
|
+
"fetched_at": result.get("fetched_at"),
|
|
57
|
+
"fallback_used": result.get("fallback_used", False),
|
|
58
|
+
"content_verified": result.get("validation", {}).get("passed", False),
|
|
59
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "eduevidence",
|
|
3
|
+
"version": "5.2.0",
|
|
4
|
+
"description": "Evidence-Based Education Decision Skill — from any education question to an auditable, evidence-grounded decision.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "EduEvidence Contributors",
|
|
7
|
+
"homepage": "https://github.com/37chengshan/eduevidence#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/37chengshan/eduevidence.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/37chengshan/eduevidence/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"education",
|
|
17
|
+
"evidence",
|
|
18
|
+
"skill",
|
|
19
|
+
"ai-agent",
|
|
20
|
+
"claude",
|
|
21
|
+
"cursor",
|
|
22
|
+
"codex",
|
|
23
|
+
"research"
|
|
24
|
+
],
|
|
25
|
+
"bin": {
|
|
26
|
+
"eduevidence": "bin/eduevidence.js"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin/",
|
|
30
|
+
"SKILL.md",
|
|
31
|
+
"install.sh",
|
|
32
|
+
"eduevidence_cli.py",
|
|
33
|
+
"pyproject.toml",
|
|
34
|
+
"LICENSE",
|
|
35
|
+
"README.md",
|
|
36
|
+
"README.zh-CN.md",
|
|
37
|
+
"engine/",
|
|
38
|
+
"domains/",
|
|
39
|
+
"skill/",
|
|
40
|
+
"references/",
|
|
41
|
+
"schemas/",
|
|
42
|
+
"scripts/",
|
|
43
|
+
"retrieval/",
|
|
44
|
+
"integrations/",
|
|
45
|
+
"visualization/eduevidence-report/"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18"
|
|
49
|
+
}
|
|
50
|
+
}
|
package/pyproject.toml
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "eduevidence"
|
|
7
|
+
version = "5.2.0"
|
|
8
|
+
description = "Evidence-Based Education Decision Skill — from any education question (teaching methods, curriculum, assessment, learning interventions, AI tools) to an evidence-based decision."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "EduEvidence Contributors" }]
|
|
13
|
+
keywords = ["education", "evidence", "skill", "evidence-based", "teaching", "ai-education"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Topic :: Education",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
dev = ["pytest>=7.0"]
|
|
22
|
+
|
|
23
|
+
[project.scripts]
|
|
24
|
+
eduevidence = "eduevidence_cli:main"
|
|
25
|
+
|
|
26
|
+
[tool.pytest.ini_options]
|
|
27
|
+
# scripts/ 只为收编历史遗留的红队压测 scripts/test_adversarial_empirical.py
|
|
28
|
+
# (E5:该文件是全仓唯一 test_*.py 命名的脚本,纳入默认收集后不再"死测试")。
|
|
29
|
+
testpaths = ["tests", "scripts"]
|
|
30
|
+
python_files = ["test_*.py"]
|
|
31
|
+
addopts = "-q"
|
|
32
|
+
filterwarnings = ["ignore::pytest.PytestReturnNotNoneWarning:scripts.*"]
|
|
33
|
+
|
|
34
|
+
# wheel 自包含 CLI:eduevidence_cli + engine + scripts(V1/V2 命令实现与
|
|
35
|
+
# validate_schema)+ schemas 数据文件(data-files 安装到 share/eduevidence/,
|
|
36
|
+
# engine.contracts / orchestrator 按回退路径解析)。Skill 本体(SKILL.md +
|
|
37
|
+
# skill/ + references/ + retrieval/ + integrations/ + visualization/ +
|
|
38
|
+
# assets/)由 install.sh 或源码包完整分发。
|
|
39
|
+
[tool.setuptools]
|
|
40
|
+
py-modules = ["eduevidence_cli"]
|
|
41
|
+
packages = ["engine", "scripts"]
|
|
42
|
+
|
|
43
|
+
[tool.setuptools.data-files]
|
|
44
|
+
"share/eduevidence/schemas" = ["schemas/*.json"]
|
|
45
|
+
"share/eduevidence/schemas/v2" = ["schemas/v2/*.json"]
|
|
46
|
+
"share/eduevidence/schemas/v3" = ["schemas/v3/*.json"]
|
|
47
|
+
"share/eduevidence/schemas/v4" = ["schemas/v4/*.json"]
|
|
48
|
+
"share/eduevidence/domains" = ["domains/manifest.json", "domains/education/manifest.json", "domains/education/outcome_taxonomy.json", "domains/policy/manifest.json", "domains/policy/frame.schema.json", "domains/policy/outcome_taxonomy.json", "domains/policy/methodology_checklist.json"]
|
|
49
|
+
"share/eduevidence/domains/policy/references" = ["domains/policy/references/*.md"]
|
|
50
|
+
"share/eduevidence/benchmarks" = ["benchmarks/evidence-library.json"]
|
|
51
|
+
|
|
52
|
+
[tool.ruff.lint]
|
|
53
|
+
# E5 最小守门集:语法层错误 + 未定义/重定义名。风格类规则不设(存量代码
|
|
54
|
+
# 不做一次性大规模格式化,避免淹没 review)。
|
|
55
|
+
select = ["E9", "F63", "F7", "F82"]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Applicability Analysis(适用性分析)
|
|
2
|
+
|
|
3
|
+
## 1. 目的
|
|
4
|
+
|
|
5
|
+
裁判庭(tribunal-policy.md)得出"结论可以成立"之后,还需回答最后一个问题:
|
|
6
|
+
**这个结论能用在我的场景吗?** 适用性分析把结论从其原研究情境映射到目标情境,
|
|
7
|
+
明确边界,避免盲目照搬。
|
|
8
|
+
|
|
9
|
+
## 2. 核心原则
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
证据只对其检验过的 learner × course × outcome × tool × context 组合严格成立;
|
|
13
|
+
组合中任一维度变化,成立强度都要降级。
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 3. 七问检查(Applicability Check)
|
|
17
|
+
|
|
18
|
+
对每条可成立结论逐一回答七个问题:
|
|
19
|
+
|
|
20
|
+
| 问题 | 检查内容 | 判定输出 |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| For whom? | 原研究学习者与目标学习者是否一致(层次/专业/先验/特征)? | 一致 / 部分一致 / 不一致 |
|
|
23
|
+
| Which course? | 学科、课程类型、时长、难度是否匹配? | 一致 / 部分一致 / 不一致 |
|
|
24
|
+
| Which outcome? | 结论的 Outcome 与你的目标结果是否同类(见 outcome-taxonomy.md)? | 同类 / 相关但不同类 / 不同类 |
|
|
25
|
+
| What conditions? | 班级规模、线上线下、教师支持是否可比? | 可比 / 部分可比 / 不可比 |
|
|
26
|
+
| How long? | 干预时长与研究时长是否可比(短期结论不宜外推到长期)? | 可比 / 更长 / 更短 |
|
|
27
|
+
| What teacher support? | 你能否提供与研究相当的教师/助教支持? | 具备 / 需额外投入 / 不具备 |
|
|
28
|
+
| What AI usage policy? | 你能执行的 AI 使用规范(allowed_usage)是否与研究一致? | 可执行 / 需调整 / 不可执行 |
|
|
29
|
+
|
|
30
|
+
## 4. 输出结构
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
applicability:
|
|
34
|
+
conclusion: <被评估的可成立结论>
|
|
35
|
+
suitable_for:
|
|
36
|
+
- <明确匹配的组合,如: 大一 C 语言、代码补全型工具、线下小班、有助教、8 周试点>
|
|
37
|
+
not_suitable_for:
|
|
38
|
+
- <明确不匹配的组合及其原因>
|
|
39
|
+
required_conditions:
|
|
40
|
+
- <要落地该结论必须具备的条件,如: 需要 AI 使用日志、需要受限账号>
|
|
41
|
+
teacher_requirements:
|
|
42
|
+
- <教师所需能力与投入,如: 教师需掌握工具配置、需每周答疑 2 小时>
|
|
43
|
+
student_prerequisites:
|
|
44
|
+
- <学生的先决条件,如: 需先完成顺序/分支/循环三大语法单元>
|
|
45
|
+
usage_constraints:
|
|
46
|
+
- <可执行的使用边界,如: 禁止完整代码生成、实验课外使用需登记>
|
|
47
|
+
risk_factors:
|
|
48
|
+
- <落地后需监控的风险,如: 依赖指标上升、代写行为增加>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 5. 执行规则
|
|
52
|
+
|
|
53
|
+
| 编号 | 规则 |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| AP-01 | 七问中任一"不一致",必须在输出中显式降级结论置信度或缩小 suitable_for 范围。 |
|
|
56
|
+
| AP-02 | `not_suitable_for` 不允许留空偷懒;即使无明确证据,也需列出"未验证的组合"作为待验证项。 |
|
|
57
|
+
| AP-03 | `usage_constraints` 必须与 Frame 的 `intervention.allowed_usage` 一致,不得凭空放宽。 |
|
|
58
|
+
| AP-04 | `risk_factors` 必须与 Frame 的 `outcomes.risk` 对应;新增风险需说明依据。 |
|
|
59
|
+
| AP-05 | 若目标场景与研究场景差异过大(如工具类型不同),即使原研究是 `strong`,也只能给 `moderate` 或 `low` 的外推置信度。 |
|
|
60
|
+
|
|
61
|
+
## 6. 示例:把"Copilot 提高作业正确率"结论应用到另一所学校
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
conclusion: "Copilot 可提高 AI 环境下大一 C 语言作业正确率(C2/accuracy)"
|
|
65
|
+
——原研究: 线下小班 60 人、有助教、8 周、受限账号 + 使用日志。
|
|
66
|
+
|
|
67
|
+
applicability:
|
|
68
|
+
suitable_for:
|
|
69
|
+
- 线下实验课、班级 ≤ 80 人、有助教、有 AI 使用日志监控的同类课程
|
|
70
|
+
- 能提供与 8 周相当的试点期的课程
|
|
71
|
+
not_suitable_for:
|
|
72
|
+
- 2000 人 MOOC(无教师监控,日志缺失)
|
|
73
|
+
- 纯线上自学课程(无对照班与监督)
|
|
74
|
+
- 要求学生"先独立完成再求助"的作业模式(与研究的使用方式冲突)
|
|
75
|
+
required_conditions:
|
|
76
|
+
- 为每个学生配置可审计的受限 AI 账号
|
|
77
|
+
- 保留每周作业的无 AI 独立版本以跟踪 C1
|
|
78
|
+
teacher_requirements:
|
|
79
|
+
- 教师须完成工具使用培训
|
|
80
|
+
- 助教每周 2 学时答疑,负责核查使用日志
|
|
81
|
+
student_prerequisites:
|
|
82
|
+
- 学生已掌握指针之前的语法基础(实验内容不超过研究覆盖范围)
|
|
83
|
+
usage_constraints:
|
|
84
|
+
- 仅允许代码补全与报错解释;禁止完整代码生成
|
|
85
|
+
- 实验课内使用,课外使用需登记
|
|
86
|
+
risk_factors:
|
|
87
|
+
- 每周跟踪 C4/ai_dependency;若独立题正确率连续 2 周下降则触发暂停
|
|
88
|
+
```
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Education Research Framing(教育研究框架)
|
|
2
|
+
|
|
3
|
+
## 1. 为什么先 Frame 再回答
|
|
4
|
+
|
|
5
|
+
教育问题的答案高度依赖上下文:同一个干预(例如"允许学生使用 AI 编程助手")
|
|
6
|
+
在一个班级是脚手架,在另一个班级可能变成依赖源。脱离 Frame 直接回答,
|
|
7
|
+
等于把某篇论文的结论盲目套用到一个未必匹配的课堂。因此本框架规定:
|
|
8
|
+
|
|
9
|
+
- **任何最终教学建议都必须由一个完整的 EducationResearchFrame 推导而来。**
|
|
10
|
+
- Frame 不完整时,只能给出"需要补充哪些信息"的中间反馈,禁止生成最终建议。
|
|
11
|
+
|
|
12
|
+
### 执行规则(必须遵守)
|
|
13
|
+
|
|
14
|
+
| 规则编号 | 内容 |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| FR-01 | 回答教育问题前,先输出 EducationResearchFrame;缺失任一必填字段则框架不完整。 |
|
|
17
|
+
| FR-02 | 框架完整前,禁止输出最终教学建议(含"建议允许/不允许""建议调整策略"等结论性语句)。 |
|
|
18
|
+
| FR-03 | 框架内不得出现"待定""TBD""占位符";未知信息应明确标注 `unknown + 如何获取`。 |
|
|
19
|
+
| FR-04 | Frame 与证据(Evidence)必须一起呈现:先 Frame,再 Evidence,最后结论。 |
|
|
20
|
+
|
|
21
|
+
## 2. EducationResearchFrame 字段清单
|
|
22
|
+
|
|
23
|
+
### question(研究问题)
|
|
24
|
+
|
|
25
|
+
- 用一句话表述,必须包含"干预 × 学习者 × 结果"三要素。
|
|
26
|
+
- 示例:`"在 Python 入门课中,允许使用 AI 代码补全是否会影响学生的独立编程能力?"`
|
|
27
|
+
|
|
28
|
+
### decision_target(决策目标)
|
|
29
|
+
|
|
30
|
+
- 本次回答要支持的具体决策,例如"是否允许某工具""是否采用某教学法""是否调整某门课的评分规则"。
|
|
31
|
+
- 一个 Frame 只服务一个 decision_target;多目标请拆分为多个 Frame。
|
|
32
|
+
|
|
33
|
+
### learner(学习者)
|
|
34
|
+
|
|
35
|
+
- `education_level`:小学 / 初中 / 高中 / 大学本科(大一…大四)/ 研究生 / 成人 / 职业培训。
|
|
36
|
+
- `major`:专业或院系背景(如计算机、非计算机、人文社科),影响先前经验假设。
|
|
37
|
+
- `prior_knowledge`:目标技能的前测水平描述(如"未系统学过编程,仅会打字与上网")。
|
|
38
|
+
- `special_characteristics`:特殊特征(如高年级占比、性别比例、民族/语言差异、学习障碍、班内基础两极分化)。
|
|
39
|
+
|
|
40
|
+
### course(课程)
|
|
41
|
+
|
|
42
|
+
- `subject`:学科(如 C 语言、数据结构、线性代数)。
|
|
43
|
+
- `course_type`:课程类型(必修/选修、理论/实验/混合、项目制、MOOC)。
|
|
44
|
+
- `duration`:课程总时长(如 16 周、一学期 48 学时、两周集训营)。
|
|
45
|
+
|
|
46
|
+
### intervention(干预)
|
|
47
|
+
|
|
48
|
+
- `teaching_method`:教学方法(讲授、翻转课堂、项目式、同伴教学等)。
|
|
49
|
+
- `ai_tool`:具体 AI 工具及版本(如 GitHub Copilot v1.x、ChatGPT GPT-4o、Cursor;未指定版本视为不完整)。
|
|
50
|
+
- `allowed_usage`:允许的使用方式(禁止使用 / 仅解释报错 / 局部生成须注释 / 完全放开)。
|
|
51
|
+
- `frequency`:使用频率(每节课几次、每周上限)。
|
|
52
|
+
- `duration`:干预持续时长(如 4 周、一整个学期)。
|
|
53
|
+
|
|
54
|
+
### comparison(对照组)
|
|
55
|
+
|
|
56
|
+
- 与什么比较:无 AI 传统教学 / 无 AI 但加强练习 / 不同 AI 策略。
|
|
57
|
+
- 若缺失对照,只能得到描述性结果,不能得到因果结论。
|
|
58
|
+
|
|
59
|
+
### outcomes(结果)
|
|
60
|
+
|
|
61
|
+
- `primary`:主要结果,通常是"学习效果"类指标(见 outcome-taxonomy.md),一个为佳。
|
|
62
|
+
- `secondary`:次要结果(任务表现、学习过程指标)。
|
|
63
|
+
- `risk`:风险指标(AI 依赖、学术诚信风险等),必须至少列出并监控一项。
|
|
64
|
+
|
|
65
|
+
### context(情境)
|
|
66
|
+
|
|
67
|
+
- `teacher_support`:教师支持程度(有无助教、教师是否懂 AI、答疑频次)。
|
|
68
|
+
- `class_size`:班级规模(20 人小班 / 100 人大班 / 2000 人 MOOC)。
|
|
69
|
+
- `online_or_offline`:线上 / 线下 / 混合。
|
|
70
|
+
|
|
71
|
+
### scope(证据检索范围)
|
|
72
|
+
|
|
73
|
+
- `time_range`:文献时间范围(如 2015–2025,AI 教育研究时效性强,优先近 3 年)。
|
|
74
|
+
- `geography`:地域范围(国内 / 欧美 / 全球;注意文化差异)。
|
|
75
|
+
- `study_types`:纳入的研究类型(RCT、准实验、观察性、质性)。
|
|
76
|
+
|
|
77
|
+
### inclusion_criteria / exclusion_criteria(纳入/排除标准)
|
|
78
|
+
|
|
79
|
+
- 纳入标准示例:`样本为本科编程入门课;干预与 AI 工具相关;报告至少一个学习结果指标。`
|
|
80
|
+
- 排除标准示例:`仅报告满意度或工具使用时长;样本为研究生及以上;干预时长不足 2 周。`
|
|
81
|
+
|
|
82
|
+
### success_condition(成功条件)
|
|
83
|
+
|
|
84
|
+
- 判断"该干预值得继续/推广"的可操作标准,例如:
|
|
85
|
+
`"迁移测试成绩无显著下降(效应量 -0.1 以内)且 AI 依赖风险指标不升高,即可继续试点。"`
|
|
86
|
+
|
|
87
|
+
## 3. 示例 Frame:大一C语言课是否允许使用AI编程助手
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
question: 在大一 C 语言程序设计必修课中,允许学生使用 AI 编程助手
|
|
91
|
+
(自动补全 + 完整代码生成)是否会影响其独立编程能力与课堂作业诚信?
|
|
92
|
+
decision_target: 决定该课程本学期的 AI 使用政策(禁止 / 受限允许 / 放开)
|
|
93
|
+
learner:
|
|
94
|
+
education_level: 大学本科一年级
|
|
95
|
+
major: 非计算机专业(电子信息类)
|
|
96
|
+
prior_knowledge: 无编程基础;高中信息课仅接触 Office;前测 0-1 道题可独立完成
|
|
97
|
+
special_characteristics: 班内基础差异大,约 30% 学生畏难、倾向直接抄答案
|
|
98
|
+
course:
|
|
99
|
+
subject: C 语言程序设计
|
|
100
|
+
course_type: 必修、含 2 学时/周实验课
|
|
101
|
+
duration: 16 周(一学期)
|
|
102
|
+
intervention:
|
|
103
|
+
teaching_method: 讲授 + 上机实验 + 每周编程作业
|
|
104
|
+
ai_tool: GitHub Copilot(指定版本)+ 课堂专用受限账号(无登录历史)
|
|
105
|
+
allowed_usage: 待评估——本次回答的决策对象
|
|
106
|
+
frequency: 每周作业 1 次,实验课 2 学时
|
|
107
|
+
duration: 8 周(试点阶段)
|
|
108
|
+
comparison: 同期不启用 AI 的平行班(同教材同教师)
|
|
109
|
+
outcomes:
|
|
110
|
+
primary: 期末独立编程题得分(无 AI 环境考试)
|
|
111
|
+
secondary: 作业正确率、完成时间、课堂参与度
|
|
112
|
+
risk: 脱离 AI 后能否独立改错;作业代写检测;学生对 AI 的依赖自评
|
|
113
|
+
context:
|
|
114
|
+
teacher_support: 1 名教师 + 1 名研究生助教;教师已通过 AI 工具培训
|
|
115
|
+
class_size: 约 60 人 / 班
|
|
116
|
+
online_or_offline: 线下实验课 + 线上提交作业
|
|
117
|
+
scope:
|
|
118
|
+
time_range: 2019–2025
|
|
119
|
+
geography: 国内高校 + 欧美本科入门编程课研究
|
|
120
|
+
study_types: RCT、准实验、有对照的前后测研究
|
|
121
|
+
inclusion_criteria: 本科入门编程课;干预涉及代码补全/生成类 AI;报告学习或迁移指标
|
|
122
|
+
exclusion_criteria: 仅报告"学生满意度"或"使用时长";干预不足 2 周;样本为研究生
|
|
123
|
+
success_condition: 8 周试点后,独立编程题得分与对照班无显著差异(下降不超 5%),
|
|
124
|
+
且 AI 依赖风险指标不高于对照组,则允许受限使用;否则维持禁止。
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 4. 框架使用顺序
|
|
128
|
+
|
|
129
|
+
1. 用户提出教育问题 → 先把问题翻译成 `question + decision_target`。
|
|
130
|
+
2. 逐一核对全部字段;缺信息时向用户提问或标注 `unknown + 获取途径`。
|
|
131
|
+
3. 字段齐全后,才允许检索证据、构建 Evidence Matrix。
|
|
132
|
+
4. 最后基于 Frame 输出建议,并明示该建议仅对该 Frame 有效(见 applicability-policy.md)。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Effect Size Formulas & Statistical Reference
|
|
2
|
+
|
|
3
|
+
> **Standardized Mean Differences (Cohen's d, Hedges' g) & Difference-in-Differences (DID)**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Standardized Mean Difference: Cohen's d and Hedges' g
|
|
8
|
+
|
|
9
|
+
Given Treatment Group (n1, mean1, sd1) and Control Group (n2, mean2, sd2):
|
|
10
|
+
|
|
11
|
+
### Pooled Standard Deviation (s_pooled):
|
|
12
|
+
s_pooled = sqrt(((n1 - 1)*sd1^2 + (n2 - 1)*sd2^2) / (n1 + n2 - 2))
|
|
13
|
+
|
|
14
|
+
### Cohen's d:
|
|
15
|
+
d = (mean1 - mean2) / s_pooled
|
|
16
|
+
|
|
17
|
+
### Hedges' g (Small-Sample Bias Correction J):
|
|
18
|
+
J(df) = 1 - (3 / (4 * (n1 + n2 - 2) - 1))
|
|
19
|
+
g = J(df) * d
|
|
20
|
+
|
|
21
|
+
### Variance and Standard Error of g:
|
|
22
|
+
Var(g) = (n1 + n2)/(n1 * n2) + (g^2) / (2 * (n1 + n2))
|
|
23
|
+
SE(g) = sqrt(Var(g))
|
|
24
|
+
95% CI(g) = [g - 1.96 * SE(g), g + 1.96 * SE(g)]
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 2. Difference-in-Differences (DID) Regression Model
|
|
29
|
+
|
|
30
|
+
For panel/classroom trial data across pre- and post-periods:
|
|
31
|
+
Y_ist = beta0 + beta1 * Treat_i + beta2 * Post_t + delta * (Treat_i * Post_t) + epsilon_ist
|
|
32
|
+
|
|
33
|
+
- beta1: Baseline difference between treatment and control cohorts.
|
|
34
|
+
- beta2: Shared secular trend over time.
|
|
35
|
+
- delta: The causal DID treatment effect parameter ((Y_T_post - Y_T_pre) - (Y_C_post - Y_C_pre)).
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Evaluation Design(评价设计)
|
|
2
|
+
|
|
3
|
+
## 1. 目的与核心区分
|
|
4
|
+
|
|
5
|
+
评价设计回答:**试点是否成功?** 评价必须同时区分两组维度,禁止混为一谈:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
即时效果(immediate) ≠ 保持(retention) ≠ 迁移(transfer)
|
|
9
|
+
任务表现(task performance, C2) ≠ 学习(learning, C1)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
任何"成功"判定必须说明它来自哪个维度。只用任务表现定成功 → 无效评价。
|
|
13
|
+
|
|
14
|
+
## 2. EvaluationPlan 字段
|
|
15
|
+
|
|
16
|
+
| 字段 | 说明 |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| `research_question` | 与 Frame.question 一致的一句话问题 |
|
|
19
|
+
| `groups` | `treatment`(试点组)与 `comparison`(对照/基线组)的定义与人数 |
|
|
20
|
+
| `baseline` | 前测内容与时间点(无 AI 环境,测 C1 基线) |
|
|
21
|
+
| `post_test` | 干预结束时的即时后测(仍按阶段 AI 政策执行) |
|
|
22
|
+
| `retention_test` | 结课后 2–4 周的延迟测验(无 AI) |
|
|
23
|
+
| `transfer_test` | 新题型/新环境/无 AI 的迁移任务 |
|
|
24
|
+
| `process_metrics` | 学习过程数据(C3:engagement、help_seeking、cognitive_load 等) |
|
|
25
|
+
| `learning_metrics` | 学习效果数据(C1:knowledge_gain、independent_problem_solving 等) |
|
|
26
|
+
| `risk_metrics` | 风险数据(C4:ai_dependency、over_reliance、academic_integrity_risk) |
|
|
27
|
+
| `analysis_plan` | 统计方法、效应量与置信区间、多重比较控制 |
|
|
28
|
+
| `success_threshold` | 判定成功的预注册阈值(必须同时看学习与风险) |
|
|
29
|
+
| `stop_conditions` | 立即终止/回退的阈值(与 intervention-design.md 一致) |
|
|
30
|
+
|
|
31
|
+
## 3. 测量时间轴(推荐模板)
|
|
32
|
+
|
|
33
|
+
| 时间点 | 测量 | 维度 |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| T0(试点前) | 前测(无 AI):语法知识 + 独立编程题 + 学习动机问卷 | C1 基线、C3 |
|
|
36
|
+
| T1(每阶段末) | 阶段小测、AI 使用日志、求助行为记录 | C2、C3、C4 |
|
|
37
|
+
| T2(第 8 周末) | 后测:即时独立编程测验 + 满意度/依赖自评 | C1(即时)、C2、C4 |
|
|
38
|
+
| T3(+2~4 周) | 保持测验(无 AI,新题但同难度) | C1/retention |
|
|
39
|
+
| T4(+2~4 周内) | 迁移任务(新题型或换语言,无 AI) | C1/transfer、C4 |
|
|
40
|
+
|
|
41
|
+
## 4. 指标绑定规则
|
|
42
|
+
|
|
43
|
+
- `learning_metrics` 只收 C1 指标;`process_metrics` 只收 C3;`risk_metrics` 只收 C4;
|
|
44
|
+
C2(任务表现)单列,不得混入 learning_metrics。
|
|
45
|
+
- 每条数据记录格式:`指标名(类别)— 时间点 — 组别 — 值/变化`。
|
|
46
|
+
- 缺失 retention/transfer 测量的评价报告不得包含"长期有效""能迁移"字样。
|
|
47
|
+
|
|
48
|
+
## 5. 分析与成功判定
|
|
49
|
+
|
|
50
|
+
### 5.1 analysis_plan(示例)
|
|
51
|
+
|
|
52
|
+
- 主要比较:treatment vs comparison 在 T2 的 C1 后测差;效应量 Cohen's d 与 95% CI。
|
|
53
|
+
- 保持与迁移:T3、T4 两组差异(若 T2 有差异但 T3/T4 消失 → 即时红利假象)。
|
|
54
|
+
- 风险联动:C1 提升的同时检查 C4 是否上升;上升则成功判定需打折。
|
|
55
|
+
- 多重比较:涉及多个学习指标时做 Bonferroni 或 FDR 校正。
|
|
56
|
+
- 缺失值:报告 dropout 率;> 20% 需做敏感性分析。
|
|
57
|
+
|
|
58
|
+
### 5.2 success_threshold(示例)
|
|
59
|
+
|
|
60
|
+
成功 = 以下**全部**满足:
|
|
61
|
+
|
|
62
|
+
1. T2 无 AI 独立测验:treatment 不显著低于 comparison(d ≥ -0.1);
|
|
63
|
+
2. T3 保持测验:无显著差异(d ≥ -0.15);
|
|
64
|
+
3. T4 迁移测验:treatment 不显著低于 comparison(d ≥ -0.2);
|
|
65
|
+
4. C4 风险指标不高于 comparison(ai_dependency 无上升);
|
|
66
|
+
5. 代写命中率 ≤ 5%。
|
|
67
|
+
|
|
68
|
+
> 注意:允许阈值用"不显著低于对照"而不是"显著高于",因为目标常是"在不损害学习的
|
|
69
|
+
> 前提下获得效率红利",高估是更危险的错误。
|
|
70
|
+
|
|
71
|
+
## 6. 常见陷阱与检查
|
|
72
|
+
|
|
73
|
+
| 陷阱 | 检查 |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| 只用 AI 环境成绩定成功 | 必须有无 AI 的 post/retention/transfer 测量 |
|
|
76
|
+
| 后测即用训练题 | 后测、保持、迁移必须与训练题不同 |
|
|
77
|
+
| 无基线对照 | T0 必须测量,否则不能归因 |
|
|
78
|
+
| 只报平均分不报方差 | 报告分布与效应量,警惕少数人拉高均值 |
|
|
79
|
+
| 实验组额外获得辅导 | 记录辅导时间,作为 confounder 控制 |
|
|
80
|
+
|
|
81
|
+
## 7. 评价示例(C 语言 4 阶段试点)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
research_question: 8 周分阶段 AI 使用政策是否影响大一 C 语言学生
|
|
85
|
+
的独立编程能力、保持、迁移与 AI 依赖?
|
|
86
|
+
groups:
|
|
87
|
+
treatment: 试点班 60 人(4 阶段政策)
|
|
88
|
+
comparison: 平行班 60 人(全程禁止 AI,同教材同教师)
|
|
89
|
+
baseline: T0 无 AI 前测(语法知识 20 题 + 独立编程 3 题),两组基线可比性卡方检验
|
|
90
|
+
post_test: T2 无 AI 独立编程测验(新题 4 道,覆盖指针/数组/函数)
|
|
91
|
+
retention_test: T3(+3 周)同难度新题 4 道(无 AI)
|
|
92
|
+
transfer_test: T4 用 C++ 实现链表反转(无 AI,教师未教过该语法)
|
|
93
|
+
process_metrics: 上机活跃时长、求助 AI 次数、Phase2/3 越界使用次数、NASA-TLX
|
|
94
|
+
learning_metrics: T2/T3/T4 得分(C1);T2 与 T0 差 = knowledge_gain
|
|
95
|
+
risk_metrics: 撤除 AI 后独立完成率、代写检测率、依赖自评(4 题量表)
|
|
96
|
+
analysis_plan: 独立样本 t 检验 + Cohen's d;risk 指标做秩和检验;
|
|
97
|
+
T3/T4 为关键检验(防即时红利假象);FDR 校正
|
|
98
|
+
success_threshold:
|
|
99
|
+
- T2 d ≥ -0.1 且 T3 d ≥ -0.15 且 T4 d ≥ -0.2(treatment 不低于 comparison)
|
|
100
|
+
- C4 无上升(依赖自评与撤除后完成率不劣于 comparison)
|
|
101
|
+
- 代写命中率 ≤ 5%
|
|
102
|
+
stop_conditions:
|
|
103
|
+
- 任意阶段无 AI 独立题正确率低于基线 15% 连续 2 周
|
|
104
|
+
- 越界使用完整代码生成比例 > 40%
|
|
105
|
+
- 代写命中率 > 10%
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 8. 报告最小清单
|
|
109
|
+
|
|
110
|
+
评价报告必须包含:测量时间轴、各组人数与 dropout、每条指标的组间差(含效应量与
|
|
111
|
+
置信区间)、retention 与 transfer 结果、C4 风险结果、对照 success_threshold 的逐条判定。
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Evidence Quality(证据质量评估)
|
|
2
|
+
|
|
3
|
+
## 1. 五维质量框架(每维 0/1/2 分)
|
|
4
|
+
|
|
5
|
+
每条证据按以下五个维度独立打分,各维得分相加,总分 0–10。
|
|
6
|
+
|
|
7
|
+
### D1 Study Design(研究设计)
|
|
8
|
+
|
|
9
|
+
- 2 分:随机对照试验(RCT)或有清晰匹配的准实验,含对照且干预与测量分离。
|
|
10
|
+
- 1 分:有对照但非随机(如自然班对照);或前后测无对照;或仅有单组重复测量。
|
|
11
|
+
- 0 分:纯观察 / 调查 / 主观报告 / 无对照的描述性研究。
|
|
12
|
+
|
|
13
|
+
> 对照缺失时该维至多 0 分,整条证据通常无法支撑因果结论。
|
|
14
|
+
|
|
15
|
+
### D2 Sample Quality(样本质量)
|
|
16
|
+
|
|
17
|
+
- 2 分:样本与目标 learner 匹配(如同为本科大一编程入门)、样本量足够(每组 ≥ 30)、报告了基线差异并处理。
|
|
18
|
+
- 1 分:样本基本匹配但有偏差(如报名制、自选实验组)、样本量偏小(每组 10–30)。
|
|
19
|
+
- 0 分:样本严重不匹配(如用研究生推本科结论)、样本量 < 10、无任何样本描述。
|
|
20
|
+
|
|
21
|
+
### D3 Measurement Validity(测量有效性)
|
|
22
|
+
|
|
23
|
+
- 2 分:测量工具已验证(标准量表、标准题型)、前后测等价、评分有规范(如盲评、双人评卷)。
|
|
24
|
+
- 1 分:测量合理但未验证(自编题目、自评量表)、评分主观且未盲评。
|
|
25
|
+
- 0 分:测量与声称结果不对应(如用满意度代替学习效果)、或测量就是任务表现却被当作学习效果。
|
|
26
|
+
|
|
27
|
+
> 参考 outcome-taxonomy.md:把 C2 当 C1 测量属于测量无效,D3 记 0 分。
|
|
28
|
+
|
|
29
|
+
### D4 Temporal Strength(时间强度)
|
|
30
|
+
|
|
31
|
+
- 2 分:干预 ≥ 8 周,且包含保持测试(retention test)或迁移测试(transfer test)。
|
|
32
|
+
- 1 分:干预 2–8 周,有后测但无保持/迁移测量。
|
|
33
|
+
- 0 分:单次实验/单课时干预,或只有即时效果无任何后续测量。
|
|
34
|
+
|
|
35
|
+
### D5 Directness(直接性)
|
|
36
|
+
|
|
37
|
+
- 2 分:证据的 干预×学习者×课程×工具×结果 与目标 Frame 完全对应(如同是"大一 C 语言 + 代码生成工具 + 独立编程")。
|
|
38
|
+
- 1 分:大致对应但有偏差(不同课程但同难度、不同工具同类型、仅指标相近)。
|
|
39
|
+
- 0 分:仅在变量名称上相关(如用"编程课满意度"支撑"编程能力"结论)。
|
|
40
|
+
|
|
41
|
+
> 直接性越低,外推风险越高,需在结论中明确限定范围(见 applicability-policy.md)。
|
|
42
|
+
|
|
43
|
+
## 2. 总分与等级
|
|
44
|
+
|
|
45
|
+
| 总分 | 等级 | 含义 | 使用方式 |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| 8–10 | `strong` | 设计、样本、测量、时间、直接性均强 | 可支撑较高置信度的建议 |
|
|
48
|
+
| 5–7 | `moderate` | 基本可信但有一两处明显不足 | 可作支持性证据,需限范围 |
|
|
49
|
+
| 2–4 | `weak` | 设计或测量存在硬伤 | 仅作参考线索,不单独支撑结论 |
|
|
50
|
+
| 0–1 | `very_weak` | 几乎不可用 | 不进入 Evidence Matrix 或仅作"反例提示" |
|
|
51
|
+
|
|
52
|
+
## 3. 评分示例
|
|
53
|
+
|
|
54
|
+
### 示例 A:某 RCT,大一 C 语言,Copilot vs 无 AI,8 周,含 4 周保持测试与无 AI 迁移测试
|
|
55
|
+
|
|
56
|
+
- D1=2(RCT 有对照);D2=2(每组 45 人、基线匹配);D3=2(标准题本 + 盲评);
|
|
57
|
+
- D4=2(8 周 + 保持 + 迁移);D5=2(与目标 Frame 完全对应)。
|
|
58
|
+
- **总分 10 = strong**。
|
|
59
|
+
|
|
60
|
+
### 示例 B:某班用 AI 后"作业提交率上升",教师自评"教学效果变好"
|
|
61
|
+
|
|
62
|
+
- D1=0(无对照);D2=1(一个班 28 人);D3=0(满意度/提交率当学习效果);
|
|
63
|
+
- D4=0(无保持/迁移测量);D5=1(班级相似但测量不对应)。
|
|
64
|
+
- **总分 1 = very_weak**,不得进入结论。
|
|
65
|
+
|
|
66
|
+
### 示例 C:某研究用"高中 Python 课 + 代码补全"替代"本科 C 语言",其余条件一致
|
|
67
|
+
|
|
68
|
+
- D1=2;D2=2;D3=2;D4=1(只有后测无保持测试);D5=1(课程与学习者层面有偏差)。
|
|
69
|
+
- **总分 8 = strong**,但直接性扣分意味着结论必须限定"对高中 Python 场景强、对本科 C 场景中等"。
|
|
70
|
+
|
|
71
|
+
## 4. 使用规则(必须遵守)
|
|
72
|
+
|
|
73
|
+
| 编号 | 内容 |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| EQ-01 | 每条证据必须给出五维逐项得分与总分,禁止只给一个模糊的"质量高/低"。 |
|
|
76
|
+
| EQ-02 | 任何维度证据不足时记 0 分,禁止用"大概""据经验"补分。 |
|
|
77
|
+
| EQ-03 | 总分 < 5 的证据不能单独支撑教学建议;`very_weak` 证据不进 Evidence Matrix。 |
|
|
78
|
+
| EQ-04 | 结论的置信度与证据等级联动:`strong` 可给高置信度建议,`moderate` 必须附条件,`weak` 只能给"待验证"。 |
|
|
79
|
+
| EQ-05 | 质量评估针对"证据",不针对"研究作者";同一研究的不同结论需分别评分。 |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# GRADE (Grading of Recommendations Assessment, Development and Evaluation)
|
|
2
|
+
|
|
3
|
+
> **GRADE Certainty of Evidence Rating Framework for Social & Educational Science**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Four Levels of Evidence Certainty
|
|
8
|
+
|
|
9
|
+
1. **High (++++)**: We are very confident that the true effect lies close to that of the estimate of the effect.
|
|
10
|
+
2. **Moderate (+++o)**: We are moderately confident in the effect estimate; the true effect is likely to be close, but there is a possibility that it is substantially different.
|
|
11
|
+
3. **Low (++oo)**: Our confidence in the effect estimate is limited; the true effect may be substantially different from the estimate.
|
|
12
|
+
4. **Very Low (+ooo)**: We have very little confidence in the effect estimate; the true effect is likely to be substantially different from the estimate.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Five Downgrading Criteria (1 to 2 Levels Down per domain)
|
|
17
|
+
|
|
18
|
+
1. **Risk of Bias (Study Limitations)**: Flawed randomization, allocation concealment failure, lack of blinding in subjective assessments, selective outcome reporting.
|
|
19
|
+
2. **Inconsistency (Heterogeneity)**: High unexplained heterogeneity across studies (I^2 > 50%, Cochran Q p < 0.10, conflicting effect directions).
|
|
20
|
+
3. **Indirectness**: Population mismatch (e.g. university CS majors vs K-12 primary students), intervention mismatch, surrogate outcomes (task completion instead of delayed transfer).
|
|
21
|
+
4. **Imprecision**: Wide 95% confidence intervals crossing clinical/educational decision thresholds, small pooled sample size (N < 200).
|
|
22
|
+
5. **Publication Bias**: Funnel plot asymmetry (Egger regression p < 0.10), missing negative trial results, Rosenthal Fail-Safe N < 5k + 10.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 3. Three Upgrading Criteria (Only for Observational/QED without initial downgrades)
|
|
27
|
+
1. **Large Effect Size**: g > 0.80 (upgrade 1 level); g > 1.20 (upgrade 2 levels).
|
|
28
|
+
2. **Dose-Response Gradient**: Clear monotonic relationship between exposure dose and outcome gain.
|
|
29
|
+
3. **Plausible Residual Confounding**: All plausible unmeasured confounders would diminish the observed effect rather than explain it.
|