update
鸿迁智评(ArkMigrate-Eval) 面向“基于大模型 Coding Agent 的复杂移动应用自动迁移与评测”赛题,提供一套用于 Android / iOS 应用向 OpenHarmony / HarmonyOS ArkTS 迁移的评测与对照实验框架。
本作品目前重点解决“如何客观评估迁移方案”的问题:通过场景级 benchmark、结构化 context 消融实验、可复现评分指标和报告生成能力,量化比较不同 Coding Agent、不同迁移 Pipeline、不同上下文组织方式在复杂移动应用迁移任务中的效果。
作品关注的迁移难点包括:
module.json5
当前版本已经实现可运行的 MVP,并原生兼容 SWE-Harmony/SWE-OpenHarmony benchmark 原型:
spec_only
spec+plan
spec+plan+callchain
full_source
structured_priority_context
/v1/chat/completions
base_commit
. ├── benchmarks/ │ └── synthetic/cases.json # 自建场景级 benchmark 样例 ├── makememoryempty/ # 核心实现代码 │ ├── cli.py # 命令行入口 │ ├── agent.py # mock / model agent 调用封装 │ ├── context.py # context ablation 配置与构造 │ ├── dataset.py # benchmark 加载与校验 │ ├── evaluator.py # 多维度评分逻辑 │ ├── official_metrics.py # SWE-Harmony 官方指标聚合 │ ├── patch_builder.py # 完整文件到 Git patch 的确定性转换 │ ├── source_retrieval.py # base_commit 源码检索 │ ├── static_analysis.py # OS 语义与 patch 静态检查 │ ├── prediction_validation.py # prediction/patch 应用性检查 │ ├── providers.py # mock 与 OpenAI-compatible provider │ ├── reports.py # JSON / CSV / Markdown 报告输出 │ ├── dashboard.py # 无服务器 HTML 实验仪表盘 │ └── runner.py # ablation 运行主流程 ├── experiments/preliminary/ # 初赛真实模型消融结果与补丁验证证据 ├── tests/ # 单元测试与集成测试 ├── documents/ # 赛题说明与提交模板 ├── pyproject.toml # Python 项目配置 └── README.md # 作品简介与运行说明
在仓库根目录执行:
python -m pip install -e .[dev]
安装后可使用新的命令入口:
arkmigrate-eval --help
也可使用模块方式运行:
python -m makememoryempty --help
arkmigrate-eval validate --benchmark benchmarks/synthetic/cases.json
预期输出:
OK: loaded 10 benchmark cases from benchmarks/synthetic/cases.json
也可以直接传入 SWE-Harmony release 根目录、metadata/suite_manifest.json 或单个 track JSONL:
metadata/suite_manifest.json
arkmigrate-eval validate ` --benchmark documents/SWE-OpenHarmony ` --track a2h-page-15
查看数据集组成、仓库数和公开动态测试覆盖情况:
arkmigrate-eval inspect --benchmark documents/SWE-OpenHarmony
当前本地原型应识别出 65 个任务:incremental-dev-50 50 条、a2h-page-15 15 条;其中前者公开 190 个评分方法,后者的 Hypium 测试暂不公开。
incremental-dev-50
a2h-page-15
arkmigrate-eval list-contexts
内置配置包括:
spec+retrieved_source
structured_retrieved_context
后两种配置需要预先准备应用仓库,并通过 --repos-dir 指定路径。检索器使用 git show <base_commit>:<path> 读取源码,不 checkout 工作区,也不会读取 final_commit。
--repos-dir
git show <base_commit>:<path>
final_commit
无需 API key 即可运行:
arkmigrate-eval run ` --benchmark benchmarks/synthetic/cases.json ` --output runs/demo ` --provider mock
生成文件:
runs/demo/results.json
runs/demo/results.csv
runs/demo/report.md
runs/demo/dashboard.html
runs/demo/agent_outputs/<context>/<case>.json
runs/demo/predictions-<context>.jsonl
model_patch
runs/demo/analysis.json
runs/demo/run_manifest.json
arkmigrate-eval run ` --benchmark documents/SWE-OpenHarmony ` --output runs/quick ` --provider mock ` --contexts spec_only structured_priority_context ` --track a2h-page-15 ` --limit 3 ` --repetitions 3
该命令会对前 3 个 case 分别运行 spec_only 与 structured_priority_context,用于快速验证 context 消融效果。
准备好官方应用仓库后,可运行真正的源码检索消融:
arkmigrate-eval run ` --benchmark documents/SWE-OpenHarmony ` --track a2h-page-15 ` --repos-dir documents/SWE-OpenHarmony/repos ` --contexts spec_only spec+plan+callchain spec+retrieved_source structured_retrieved_context ` --source-max-files 8 ` --source-max-chars 12000 ` --repetitions 3 ` --provider openai ` --output runs/a2h-ablation
支持任何兼容 /v1/chat/completions 的模型服务:
$env:OPENAI_BASE_URL="https://api.openai.com/v1" $env:OPENAI_API_KEY="替换为实际密钥" $env:OPENAI_MODEL="gpt-4.1-mini" arkmigrate-eval run ` --benchmark benchmarks/synthetic/cases.json ` --output runs/model ` --provider openai ` --contexts structured_priority_context
也可以使用本地 JSON 配置文件。
模型名也可以通过命令行覆盖,适合先用轻量模型做 smoke test:
arkmigrate-eval run ` --benchmark documents/SWE-OpenHarmony ` --track a2h-page-15 ` --repos-dir documents/SWE-OpenHarmony/repos ` --provider openai ` --model-config config/keys.json ` --model qwen3-coder-flash ` --model-timeout 180 ` --contexts structured_retrieved_context ` --limit 1 ` --output runs/a2h-smoke
--model-timeout 控制单次请求超时,默认 180 秒。大源码 context 的生成时间 可能超过 60 秒,正式实验应记录统一的 timeout,超时 case 会被隔离为 agent_error,不会中断整批任务。
--model-timeout
agent_error
推荐模型返回 JSON,字段包括:
migration_plan
generated_files
[{"path": "...", "content": "..."}]
notes
如果模型返回非结构化文本,框架仍会保存原始输出,并按原始迁移产物进行代理评分。 对于仓库任务,只要模型返回 generated_files,框架会基于任务 base_commit 重新构造标准 Git patch,避免将 Markdown 或非 Git 格式 diff 误当作正式提交物。
python -m pytest
当前测试覆盖:
git apply --check
初赛小样本实验使用 qwen3-coder-flash,选择 3 个公开 A2H case: mihon-more-tab、mihon-statistics、anki-card-browser。每个 case 分别运行:
qwen3-coder-flash
mihon-more-tab
mihon-statistics
anki-card-browser
共完成 9 次真实模型调用,无 Agent 请求错误。实验结果保存在 experiments/preliminary,其中 dashboard.html 可直接打开用于演示。
experiments/preliminary
dashboard.html
相对 spec_only,结构化检索上下文的平均代理分提升 0.102(约 13.9%), ArkTS 产物完整度提升 66.7 个百分点,平均缺口数由 1.67 降至 1.33;代价是 token 增加约 199.5%、平均耗时增加约 138.7%。这说明结构化源码检索提高了质量上限, 但不是最省 token 的方案。spec+plan+callchain 在该小样本中没有稳定超过 spec_only,提示调用链需要与相关源码按需组合,而不是单纯增加提示文字。
0.102
独立补丁验证结果:spec_only 和 spec+plan+callchain 的格式率、应用率均为 100%;structured_retrieved_context 的格式率为 66.7%,格式有效补丁的 git apply --check 通过率为 100%。详细实验方法、指标定义和限制见 技术报告.md。
技术报告.md
上述编译、功能和调用链指标均为确定性静态代理指标,不是 DevEco 构建或官方 Hypium 隐藏测试成绩。A2H 公共发布包不提供动态测试,最终功能正确率以赛事方 统一环境和隐藏测试为准。
项目 pytest 仅收集 tests/;documents/SWE-OpenHarmony/hypium/ 中的设备测试由官方 runner 执行,不参与本地 Python 单元测试收集。
tests/
documents/SWE-OpenHarmony/hypium/
当迁移 Agent 已输出 patch,并经 SWE-Harmony matrix runner/Hypium runner 评测后,可按原型的 leaderboard 公式统一汇总:
arkmigrate-eval score-official ` --hypium-results results/hypium/agent_model/results.json ` --matrix-summary results/matrix/run_id/matrix_summary.json ` --track incremental-dev-50 ` --output runs/official-metrics.json
a2h-page-15 的公开包没有 Hypium 测试,因此现阶段只公开复现 patch 产出、构建和成本指标。
arkmigrate-eval doctor ` --benchmark documents/SWE-OpenHarmony ` --track a2h-page-15 ` --repos-dir documents/SWE-OpenHarmony/repos ` --model-config config/keys.json ` --model qwen3-coder-flash
该命令只报告凭据是否配置,不输出密钥内容;同时检查 Git、Node.js、hvigor、hdc、SDK 环境变量和各应用仓库。 当前仅执行 A2H 时应带上 --track a2h-page-15,否则 doctor 会同时检查 incremental-dev-50 所需的其他仓库。
--track a2h-page-15
arkmigrate-eval validate-predictions ` --benchmark documents/SWE-OpenHarmony ` --predictions runs/a2h-ablation/predictions-structured_retrieved_context-run1.jsonl ` --repos-dir documents/SWE-OpenHarmony/repos ` --track a2h-page-15 ` --output runs/a2h-ablation/patch-validation.json
校验器会创建临时 detached Git worktree,在对应 base_commit 上执行 git apply --check,不会修改主工作区。
当前 synthetic benchmark 位于:
benchmarks/synthetic/cases.json
每个 case 包含:
android
ios
SWE-Harmony adapter 支持三种入口:完整 release 目录、suite manifest、track JSONL。它会读取 spec_file 的完整自然语言任务说明,并保留 repo、base_commit、final_commit、hypium_file、fixture 与可见性等溯源信息。其中 final_commit 不会写入模型 context,防止参考实现泄漏。
spec_file
repo
hypium_file
adapter 同时兼容 site/*_flat.jsonl 的 SWE-bench 风格字段,包括 problem_statement、patch、test_cases、FAIL_TO_PASS 和 PASS_TO_PASS。其中参考 patch 仅保留作离线误差分析与数据 sanity check,不会进入 Agent context;正式运行仍以 base_commit + problem_statement/spec 为输入。
site/*_flat.jsonl
problem_statement
patch
test_cases
FAIL_TO_PASS
PASS_TO_PASS
base_commit + problem_statement/spec
本地 documents/SWE-OpenHarmony 原型包含我们需要的四类核心数据:
documents/SWE-OpenHarmony
metadata/
specs/
hypium/
trajectories/
应用源码不随 release 直接存放,需要根据 metadata/repo_sources.json 克隆到 repos/<repo>,并在每个任务的 base_commit 上运行 Agent。标准提交物是 unified diff patch,而不是孤立的 ArkTS 文件。
metadata/repo_sources.json
repos/<repo>
当前 evaluator 使用确定性代理指标,便于在没有 DevEco/设备时做 context 消融和预评测:
plan_quality
dependency_satisfaction
call_chain_completeness
arkts_artifact_completeness
permission_consistency
ability_lifecycle_correctness
static_compile_proxy
build()
functional_equivalence_proxy
distributed_adoption
patch_submission_readiness
报告会明确标注 proxy_only,避免将代理分数误报为官方成绩。正式对齐 SWE-Harmony 的指标包括:动态功能正确率、SPEC 全通过率、SPEC 至少一项通过率、最终编译率、DIFF 产出率、token、耗时和单 SPEC 成本;其中动态功能正确率是主指标。
proxy_only
仓库级任务采用硬门槛:缺少 unified diff、必要权限、生命周期实现或基本 ArkTS 结构时,即使综合代理分较高也不能标记为通过。
报告按 provider、track、context 分组,并给出相对 spec_only 的成对得分差、token 差、胜/平/负和 bootstrap 95% 置信区间。mock 结果只用于验证流程,不能作为比赛实验结论。
mock
使用 mock agent 运行完整 synthetic benchmark 时,预期能够观察到:
这组结果仅验证评分、报告和消融管线能正常工作。正式结论必须来自真实模型 patch、真实仓库构建和官方 Hypium/隐藏测试,不能引用 mock 分数作为优化证据。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
鸿迁智评(ArkMigrate-Eval)
作品简介
鸿迁智评(ArkMigrate-Eval) 面向“基于大模型 Coding Agent 的复杂移动应用自动迁移与评测”赛题,提供一套用于 Android / iOS 应用向 OpenHarmony / HarmonyOS ArkTS 迁移的评测与对照实验框架。
本作品目前重点解决“如何客观评估迁移方案”的问题:通过场景级 benchmark、结构化 context 消融实验、可复现评分指标和报告生成能力,量化比较不同 Coding Agent、不同迁移 Pipeline、不同上下文组织方式在复杂移动应用迁移任务中的效果。
作品关注的迁移难点包括:
module.json5权限声明和调用行为一致性;当前版本已经实现可运行的 MVP,并原生兼容 SWE-Harmony/SWE-OpenHarmony benchmark 原型:
spec_only、spec+plan、spec+plan+callchain、full_source、structured_priority_context等 context 配置;/v1/chat/completions的大模型服务;base_commit进行预算受控的相关源码检索,不读取参考提交;目录结构
环境要求
运行说明
1. 安装依赖
在仓库根目录执行:
安装后可使用新的命令入口:
也可使用模块方式运行:
2. 校验 benchmark 数据
预期输出:
也可以直接传入 SWE-Harmony release 根目录、
metadata/suite_manifest.json或单个 track JSONL:查看数据集组成、仓库数和公开动态测试覆盖情况:
当前本地原型应识别出 65 个任务:
incremental-dev-5050 条、a2h-page-1515 条;其中前者公开 190 个评分方法,后者的 Hypium 测试暂不公开。3. 查看内置 context 配置
内置配置包括:
spec_onlyspec+planspec+plan+callchainfull_sourcestructured_priority_contextspec+retrieved_sourcestructured_retrieved_context后两种配置需要预先准备应用仓库,并通过
--repos-dir指定路径。检索器使用git show <base_commit>:<path>读取源码,不 checkout 工作区,也不会读取final_commit。4. 使用 mock agent 运行完整评测
无需 API key 即可运行:
生成文件:
runs/demo/results.json:完整机器可读结果;runs/demo/results.csv:便于表格分析的结果;runs/demo/report.md:Markdown 实验报告。runs/demo/dashboard.html:可直接用浏览器打开的实验仪表盘;runs/demo/agent_outputs/<context>/<case>.json:每次 Agent 的计划、生成文件和 token 记录;runs/demo/predictions-<context>.jsonl:当模型返回model_patch时生成的 SWE-Harmony 提交文件。runs/demo/analysis.json:分组统计、成对 context 对比和置信区间;runs/demo/run_manifest.json:模型、context、重复次数、源码预算、运行环境和代码版本。5. 只运行部分 case 或部分 context
该命令会对前 3 个 case 分别运行
spec_only与structured_priority_context,用于快速验证 context 消融效果。准备好官方应用仓库后,可运行真正的源码检索消融:
6. 接入 OpenAI-compatible 模型服务
支持任何兼容
/v1/chat/completions的模型服务:也可以使用本地 JSON 配置文件。
模型名也可以通过命令行覆盖,适合先用轻量模型做 smoke test:
--model-timeout控制单次请求超时,默认 180 秒。大源码 context 的生成时间 可能超过 60 秒,正式实验应记录统一的 timeout,超时 case 会被隔离为agent_error,不会中断整批任务。推荐模型返回 JSON,字段包括:
migration_plan:迁移计划步骤数组;generated_files:仓库相对路径到完整文件内容的映射;框架也兼容常见的[{"path": "...", "content": "..."}]数组形式;notes:模型补充说明数组;model_patch:可应用到任务base_commit的 unified diff,正式 benchmark 运行时应提供。如果模型返回非结构化文本,框架仍会保存原始输出,并按原始迁移产物进行代理评分。 对于仓库任务,只要模型返回
generated_files,框架会基于任务base_commit重新构造标准 Git patch,避免将 Markdown 或非 Git 格式 diff 误当作正式提交物。7. 运行测试
当前测试覆盖:
git apply --check。真实模型实验
初赛小样本实验使用
qwen3-coder-flash,选择 3 个公开 A2H case:mihon-more-tab、mihon-statistics、anki-card-browser。每个 case 分别运行:spec_only;spec+plan+callchain;structured_retrieved_context。共完成 9 次真实模型调用,无 Agent 请求错误。实验结果保存在
experiments/preliminary,其中dashboard.html可直接打开用于演示。spec_onlyspec+plan+callchainstructured_retrieved_context相对
spec_only,结构化检索上下文的平均代理分提升0.102(约 13.9%), ArkTS 产物完整度提升 66.7 个百分点,平均缺口数由 1.67 降至 1.33;代价是 token 增加约 199.5%、平均耗时增加约 138.7%。这说明结构化源码检索提高了质量上限, 但不是最省 token 的方案。spec+plan+callchain在该小样本中没有稳定超过spec_only,提示调用链需要与相关源码按需组合,而不是单纯增加提示文字。独立补丁验证结果:
spec_only和spec+plan+callchain的格式率、应用率均为 100%;structured_retrieved_context的格式率为 66.7%,格式有效补丁的git apply --check通过率为 100%。详细实验方法、指标定义和限制见技术报告.md。项目 pytest 仅收集
tests/;documents/SWE-OpenHarmony/hypium/中的设备测试由官方 runner 执行,不参与本地 Python 单元测试收集。8. 汇总 SWE-Harmony 官方指标
当迁移 Agent 已输出 patch,并经 SWE-Harmony matrix runner/Hypium runner 评测后,可按原型的 leaderboard 公式统一汇总:
a2h-page-15的公开包没有 Hypium 测试,因此现阶段只公开复现 patch 产出、构建和成本指标。9. 检查外部环境
该命令只报告凭据是否配置,不输出密钥内容;同时检查 Git、Node.js、hvigor、hdc、SDK 环境变量和各应用仓库。 当前仅执行 A2H 时应带上
--track a2h-page-15,否则 doctor 会同时检查incremental-dev-50所需的其他仓库。10. 校验真实 Agent patch
校验器会创建临时 detached Git worktree,在对应
base_commit上执行git apply --check,不会修改主工作区。Benchmark 数据说明
当前 synthetic benchmark 位于:
每个 case 包含:
android或ios;SWE-Harmony adapter 支持三种入口:完整 release 目录、suite manifest、track JSONL。它会读取
spec_file的完整自然语言任务说明,并保留repo、base_commit、final_commit、hypium_file、fixture 与可见性等溯源信息。其中final_commit不会写入模型 context,防止参考实现泄漏。adapter 同时兼容
site/*_flat.jsonl的 SWE-bench 风格字段,包括problem_statement、patch、test_cases、FAIL_TO_PASS和PASS_TO_PASS。其中参考patch仅保留作离线误差分析与数据 sanity check,不会进入 Agent context;正式运行仍以base_commit + problem_statement/spec为输入。本地
documents/SWE-OpenHarmony原型包含我们需要的四类核心数据:metadata/:65 条任务 manifest、仓库地址、基线/参考提交和测试可见性;specs/:15 条 Android 页面迁移 spec 与 50 条 ArkTS 增量开发 spec;hypium/:50 条增量开发任务的公开动态测试,A2H 测试隐藏;trajectories/:多 Agent/模型运行轨迹健康度报告,可用于后续 Agent 行为效率研究。应用源码不随 release 直接存放,需要根据
metadata/repo_sources.json克隆到repos/<repo>,并在每个任务的base_commit上运行 Agent。标准提交物是 unified diff patch,而不是孤立的 ArkTS 文件。评测指标
当前 evaluator 使用确定性代理指标,便于在没有 DevEco/设备时做 context 消融和预评测:
plan_quality:迁移计划完整度;dependency_satisfaction:依赖 case 满足情况;call_chain_completeness:关键调用链覆盖率;arkts_artifact_completeness:ArkTS /module.json5产物完整度;permission_consistency:权限声明与调用需求一致性;ability_lifecycle_correctness:Ability / 页面生命周期语义覆盖;static_compile_proxy:ETS 括号、组件build()、残留 Android import 等结构检查;functional_equivalence_proxy:功能等价性的轻量代理指标;distributed_adoption:OpenHarmony 分布式能力采纳情况;patch_submission_readiness:是否产生官方可接收的 unified diff。报告会明确标注
proxy_only,避免将代理分数误报为官方成绩。正式对齐 SWE-Harmony 的指标包括:动态功能正确率、SPEC 全通过率、SPEC 至少一项通过率、最终编译率、DIFF 产出率、token、耗时和单 SPEC 成本;其中动态功能正确率是主指标。仓库级任务采用硬门槛:缺少 unified diff、必要权限、生命周期实现或基本 ArkTS 结构时,即使综合代理分较高也不能标记为通过。
报告按 provider、track、context 分组,并给出相对
spec_only的成对得分差、token 差、胜/平/负和 bootstrap 95% 置信区间。mock结果只用于验证流程,不能作为比赛实验结论。Mock 流程预期
使用 mock agent 运行完整 synthetic benchmark 时,预期能够观察到:
spec_only分数最低,常出现调用链缺失、生命周期缺失和级联失败;spec+plan相比spec_only明显提升;spec+plan+callchain能提升调用链完整性;full_source能进一步提高 API 与功能代理指标;structured_priority_context在当前 synthetic benchmark 中得分最高,但 token 成本也更高。这组结果仅验证评分、报告和消融管线能正常工作。正式结论必须来自真实模型 patch、真实仓库构建和官方 Hypium/隐藏测试,不能引用 mock 分数作为优化证据。