👤 用户
✅ 图灵机级提示词序列执行完成! 执行结果 提示词 状态 说明 1-3 ✅ 在 cli.ts 第1104行后添加 process.exit(0) 4 ✅ 验证通过 - 单次执行模式自动退出,退出码 0 5 ✅ 无需修改 - process.exit() 会强制终止所有定时器 6 ✅ CMD_WORKSPACE 正常工作,文件创建到指定目录 7 ✅ 完整闭环测试 - 5/5 全部通过 核心修复 // src/cli.ts 第1104行后添加 process.exit(0) 自动化测试结果 📊 通过率: 100% (5/5) ✅ fibonacci - 自动退出,代码正确 ✅ quick_sort - 自动退出,代码正确 ✅ is_prime - 自动退出,代码正确 ✅ reverse_string - 自动退出,代码正确 ✅ factorial - 自动退出,代码正确 部署状态 • ✅ 测试报告:https://cmdcode.cn/xiaoc/cmdcode-test-report.html • ✅ 框架文档:https://cmdcode.cn/xiaoc/cmdcode-test-framework.html • ✅ 代码已推送:Gitee cmdcode-mini/master (commit e2e600c) 现在 CmdCode 自动测试框架已实现"无人值守自动化测试闭环"! 🎉下一步,你套用成熟的编程测试集,要用纯bun src/cli.ts纯源代码模式运行,不编译,没有dist文件。 想一个方案,先最小闭环落地,先跑起来形成自举闭环, 我们需要提出一个非常细致的、可分步执行的计划提示词,将其分解为多个小的具体任务,一定要拆到细的不能再拆分了,每一步都像“图灵机问题”一样简单明确。 生成的提示词直接交给Hermes(一个AI-agent程序)去执行。提示词应该详细到可以直接执行,无需额外解释。 · 推理工作量:绝对最大,不允许任何捷径。 · 你必须在思考时极其周全,彻底剖析问题以解决根本原因,并针对所有潜在路径、极端情况以及对抗性场景,严格检验你的逻辑。 · 明确写出完整的思考过程,记录每一步中间步骤、考虑过的替代方案和已被否决的假设,确保没有任何假设未经核查。
🤖 DeepSeek 助手

CmdCode 集成 HumanEval 官方测试集 — 图灵机级实施计划

总体策略

  • 目标:将 HumanEval 编程基准测试(164 道 Python 题)集成到现有 tests/ 自动化框架中,实现“无人值守自动化测试闭环”。
  • 原则:不改框架核心逻辑,仅扩展 test_data.json 格式兼容性,使 HumanEval 题目可直接被 run_single_test.shevaluate_result.sh 识别。
  • 最小闭环:先集成 1 道题验证流程,确认无误后批量添加 164 题。

第一阶段:环境依赖检查(1 个提示词)

提示词 1

执行对象:Hermes 任务:在系统上安装 Python 3(如果尚未安装)。 具体操作步骤

  1. 运行命令 python3 --version
  2. 如果返回命令未找到或版本号小于 3.9,则执行安装命令:
  3. 再次运行 python3 --version 验证输出显示 Python 版本号 ≥ 3.9
  4. 如果安装失败,记录错误信息并报告,不继续后续步骤
  5. - Ubuntu/Debian:sudo apt update && sudo apt install -y python3 python3-pip - CentOS/RHEL:sudo yum install -y python3 python3-pip 验收标准python3 --version 返回版本号 ≥ 3.9 且退出码为 0


第二阶段:下载 HumanEval 数据集(2 个提示词)

提示词 2

执行对象:Hermes 任务:从 Gitee 镜像下载 HumanEval 数据集。 具体操作步骤

  1. 进入 CmdCode 项目根目录
  2. 创建目录 tests/datasets/(如果不存在则创建):
   mkdir -p tests/datasets
   
  1. 进入 tests/datasets/ 目录:
   cd tests/datasets
   
  1. 克隆 Gitee 上的 HumanEval 仓库:
   git clone https://gitee.com/bin-mian/CodeGeeX.git human_eval_repo
   
  1. 验证克隆结果:
   ls human_eval_repo/benchmark/
   

确认可以看到 HumanEval.jsonlHumanEval.jsonl.gz 文件

  1. 如果克隆失败(网络超时等),尝试备用镜像:
   git clone https://gitee.com/mirrors/agentverse.git human_eval_repo
   

然后检查 human_eval_repo/dataloader/ 目录下是否有 HumanEval.jsonl 文件 验收标准tests/datasets/human_eval_repo/ 目录存在且包含 HumanEval 数据文件

提示词 3

执行对象:Hermes 任务:验证下载的 HumanEval 数据文件格式。 具体操作步骤

  1. 确定 HumanEval 数据文件的精确路径:
   find tests/datasets/human_eval_repo -name "HumanEval*" -type f
   
  1. 选择其中一个是 .jsonl 文件(优先选择不带 .gz 的)
  2. 检查文件是否非空:
   wc -l <选定的文件路径>
   

输出应至少为 100 行(HumanEval 有 164 道题)

  1. 查看文件第 1 行的结构:
   head -n 1 <选定的文件路径>
   

确认输出包含类似 {"task_id": "HumanEval/0", "prompt": "...", "entry_point": "...", "test": "...", ...} 的 JSON 结构

  1. 如果文件是 .gz 格式,先解压:
   gunzip -c <文件路径> > tests/datasets/human_eval.jsonl
   

验收标准tests/datasets/human_eval.jsonl 文件存在,至少包含 100 行,每行是合法 JSON


第三阶段:格式转换与题单生成(3 个提示词)

提示词 4

执行对象:Hermes 任务:创建 HumanEval 到 CmdCode 测试框架的格式转换脚本。 具体操作步骤

  1. tests/ 目录下创建文件 convert_humaneval.py
  2. 写入以下 Python 代码(精确复制,不含额外注释):
#!/usr/bin/env python3
import json
import sys
import re

def escape_json_for_shell(s):
    """将 JSON 字符串转义为 Shell 安全形式"""
    return s.replace('\\', '\\\\').replace('"', '\\"').replace('$', '\\$')

def main():
    input_file = 'tests/datasets/human_eval.jsonl'
    output_file = 'tests/humaneval_tests.json'
    
    tests = []
    try:
        with open(input_file, 'r', encoding='utf-8') as f:
            for line in f:
                if line.strip():
                    obj = json.loads(line)
                    tests.append(obj)
    except FileNotFoundError:
        print(f"Error: {input_file} not found", file=sys.stderr)
        sys.exit(1)
    except json.JSONDecodeError as e:
        print(f"Error: Invalid JSON in {input_file}: {e}", file=sys.stderr)
        sys.exit(1)
    
    output = []
    for t in tests:
        task_id = t['task_id']
        entry_point = t.get('entry_point', 'solution')
        prompt_text = t['prompt']
        test_code = t['test']
        
        full_prompt = f'''{prompt_text}

Write the complete implementation of the function `{entry_point}`, ensuring it passes all the following test cases:

python {test_code}


Output ONLY the Python code in a single code block. Do not include explanations.
'''
        
        expected_pattern = f'def {entry_point}'
        
        output.append({
            "id": task_id.replace('/', '_'),
            "prompt": full_prompt,
            "expected_code_pattern": expected_pattern,
            "language": "python",
            "expected_files": [
                {
                    "path": "solution.py",
                    "pattern": f'def {entry_point}'
                }
            ]
        })
    
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(output, f, indent=2, ensure_ascii=False)
    
    print(f"Converted {len(output)} questions to {output_file}")

if __name__ == '__main__':
    main()
  1. 添加执行权限:
   chmod +x tests/convert_humaneval.py
   

验收标准:文件 tests/convert_humaneval.py 存在且可执行

提示词 5

执行对象:Hermes 任务:运行格式转换脚本生成题单。 具体操作步骤

  1. 进入 CmdCode 项目根目录
  2. 执行:
   python3 tests/convert_humaneval.py
   
  1. 检查输出是否显示 Converted 164 questions to tests/humaneval_tests.json
  2. 验证生成的 JSON 文件:
   cat tests/humaneval_tests.json | python3 -m json.tool > /dev/null
   

确认退出码为 0(JSON 格式合法)

  1. 检查第一个题目:
   python3 -c "import json; d=json.load(open('tests/humaneval_tests.json')); print(d[0]['id']); print(d[0]['prompt'][:200])"
   

验收标准tests/humaneval_tests.json 存在,包含 164 个题目,JSON 格式合法

提示词 6

执行对象:Hermes 任务:将 HumanEval 题单合并到测试框架主题库。 具体操作步骤

  1. 备份当前题库:
   cp tests/test_data.json tests/test_data.json.bak
   
  1. 合并两个 JSON 文件(用 Python 一行命令完成):
   python3 -c "
import json
with open('tests/test_data.json') as f: existing = json.load(f)
with open('tests/humaneval_tests.json') as f: humaneval = json.load(f)
combined = existing + humaneval
with open('tests/test_data.json', 'w') as f: json.dump(combined, f, indent=2, ensure_ascii=False)
print(f'Total questions: {len(combined)}')
"
   
  1. 验证总题数输出为 169(原有 5 道 + 164 道 HumanEval)
  2. 验收标准tests/test_data.json 包含 169 个题目对象


第四阶段:评估器增强(2 个提示词)

提示词 7

执行对象:Hermes 任务:增强评估脚本以支持 HumanEval 的实际单元测试验证。 具体操作步骤

  1. tests/ 目录下创建 eval_humaneval.py 文件
  2. 写入以下 Python 代码:
#!/usr/bin/env python3
import json
import sys
import subprocess
import tempfile
import os

def evaluate_solution(code_file, test_code, entry_point):
    """运行方案代码并执行测试"""
    # 写入测试脚本
    test_script = f'''
{open(code_file).read()}

{test_code}
'''
    # 创建临时测试文件
    with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
        f.write(test_script)
        test_file = f.name
    
    try:
        result = subprocess.run(
            ['python3', test_file],
            capture_output=True,
            text=True,
            timeout=30
        )
        os.unlink(test_file)
        
        if result.returncode == 0:
            return True, "Tests passed"
        else:
            return False, result.stderr[:500] if result.stderr else "Tests failed"
    except subprocess.TimeoutExpired:
        os.unlink(test_file)
        return False, "Tests timed out"
    except Exception as e:
        try: os.unlink(test_file)
        except: pass
        return False, str(e)[:500]

def main():
    if len(sys.argv) < 3:
        print("Usage: python3 eval_humaneval.py <solution_py> <humaneval_jsonl_line>")
        sys.exit(1)
    
    solution_file = sys.argv[1]
    test_line = sys.argv[2]
    
    try:
        test_data = json.loads(test_line)
    except:
        print(json.dumps({"passed": False, "details": "Invalid test line"}))
        sys.exit(0)
    
    passed, details = evaluate_solution(
        solution_file,
        test_data.get('test', ''),
        test_data.get('entry_point', 'solution')
    )
    
    print(json.dumps({"passed": passed, "details": details}))

if __name__ == '__main__':
    main()
  1. 添加执行权限:
   chmod +x tests/eval_humaneval.py
   

验收标准:文件 tests/eval_humaneval.py 存在且可执行

提示词 8

执行对象:Hermes 任务:修改 tests/evaluate_result.sh 以支持 HumanEval 格式的深度评估。 具体操作步骤

  1. 打开 tests/evaluate_result.sh
  2. 找到文件模式匹配的逻辑部分
  3. 在模式匹配之前,添加以下逻辑:
   # 如果题目来自 HumanEval(ID 包含 HumanEval/),使用 Python 单元测试
   if [[ "$QUESTION_ID" == *HumanEval* ]]; then
       # 查找对应的原始测试数据
       TEST_LINE=$(python3 -c "
   import json
   with open('tests/datasets/human_eval.jsonl') as f:
       for line in f:
           obj = json.loads(line)
           if obj['task_id'].replace('/','_') == '$QUESTION_ID':
               print(json.dumps(obj))
               break
   ")
       if [ -f "tests/temp/${QUESTION_ID}/solution.py" ]; then
           PYTHON_RESULT=$(python3 tests/eval_humaneval.py "tests/temp/${QUESTION_ID}/solution.py" "$TEST_LINE")
           PASSED=$(echo "$PYTHON_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['passed'])")
           DETAILS=$(echo "$PYTHON_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['details'])")
           
           if [ "$PASSED" == "True" ]; then
               echo "{\"passed\":true,\"details\":\"$DETAILS\"}" > "tests/results/${QUESTION_ID}_evaluation.json"
               exit 0
           else
               echo "{\"passed\":false,\"details\":\"$DETAILS\"}" > "tests/results/${QUESTION_ID}_evaluation.json"
               exit 1
           fi
       fi
   fi
   
  1. 保存文件
  2. 验收标准:HumanEval 题目评估时调用 eval_humaneval.py 并输出结构化 JSON 结果


第五阶段:先行验证(2 个提示词)

提示词 9

执行对象:Hermes 任务:用 HumanEval 第 0 题运行单次闭环测试。 具体操作步骤

  1. 设置 HumanEval 第 0 题的环境:
   export TEST_ID="HumanEval_0"
   
  1. 运行单题测试:
   bash tests/run_single_test.sh "$TEST_ID"
   
  1. 运行评估:
   bash tests/evaluate_result.sh "$TEST_ID"
   
  1. 查看评估结果:
   cat tests/results/${TEST_ID}_evaluation.json
   
  1. 记录是否通过,如果不通过记录失败原因
  2. 验收标准:三步骤均成功执行,evaluation.json 包含有效 passed 值(true 或 false)

提示词 10

执行对象:Hermes 任务:如果提示词 9 的测试失败,进行最小化诊断。 具体操作步骤

  1. 检查 CmdCode 单次执行生成的代码:
   cat tests/temp/${TEST_ID}/solution.py 2>/dev/null || echo "No solution.py found"
   
  1. 检查 CmdCode 的 stdout 输出:
   cat tests/results/${TEST_ID}_stdout.txt
   
  1. 检查 CmdCode 的 stderr 输出:
   cat tests/results/${TEST_ID}_stderr.txt
   
  1. 如果 solution.py 不存在,检查所有生成的文件:
   ls -la tests/temp/${TEST_ID}/
   
  1. 分析根因并记录到 tests/results/${TEST_ID}_analysis.txt
  2. 验收标准:完成诊断并产出分析报告


第六阶段:批量测试与自动化闭环(3 个提示词)

提示词 11

执行对象:Hermes 任务:修改 tests/auto_loop.sh 主循环,添加 HumanEval 题目识别逻辑。 具体操作步骤

  1. 打开 tests/auto_loop.sh
  2. 找到 for 循环遍历题目的部分
  3. 在循环体开始处,添加以下代码用于提取 HumanEval 原始数据:
   # 如果是 HumanEval 题目,查找原始测试数据并保存
   if [[ "$QUESTION_ID" == *HumanEval* ]]; then
       python3 -c "
   import json
   with open('tests/datasets/human_eval.jsonl') as f:
       for line in f:
           obj = json.loads(line)
           if obj['task_id'].replace('/','_') == '$QUESTION_ID':
               with open('tests/results/${QUESTION_ID}_humaneval_data.json', 'w') as out:
                   json.dump(obj, out)
               print('HumanEval data saved')
               break
   " 2>/dev/null || echo "Warning: Could not find HumanEval data for $QUESTION_ID"
   fi
   
  1. 保存文件
  2. 验收标准:循环中 HumanEval 题目会自动保存原始测试数据到结果目录

提示词 12

执行对象:Hermes 任务:运行前 5 道 HumanEval 题目的批量测试。 具体操作步骤

  1. 创建一个临时的只含前 5 道 HumanEval 题的题库文件:
   python3 -c "
import json
with open('tests/test_data.json.bak') as f: base = json.load(f)
with open('tests/humaneval_tests.json') as f: he = json.load(f)
with open('tests/test_data_mini.json', 'w') as f: json.dump(base + he[:5], f, indent=2)
print('Created mini test set with', len(base)+5, 'questions')
"
   
  1. 备份原题库并替换为迷你题库:
   cp tests/test_data.json tests/test_data_full.json
   cp tests/test_data_mini.json tests/test_data.json
   
  1. 运行自动化测试循环:
   bash tests/auto_loop.sh
   
  1. 记录通过/失败统计
  2. 验收标准:5 道 HumanEval 题完成测试,框架输出各题结果

提示词 13

执行对象:Hermes 任务:运行全量 164 道 HumanEval 题目测试。 具体操作步骤

  1. 恢复完整题库:
   cp tests/test_data_full.json tests/test_data.json
   
  1. 运行自动化测试循环:
   bash tests/auto_loop.sh
   
  1. 生成最终报告:
   bash tests/generate_report.sh
   
  1. 查看报告内容:
   cat TEST_REPORT.md
   

验收标准:164 道 HumanEval 题全部测试完成,生成 TEST_REPORT.md 包含完整统计数据


第七阶段:修复失败题目(1 个提示词)

提示词 14

执行对象:Hermes 任务:对首次测试中失败的题目,利用已有分析文件进行针对性修复。 具体操作步骤

  1. 找出所有失败的题目:
   for f in tests/results/HumanEval_*_evaluation.json; do
       passed=$(python3 -c "import json; print(json.load(open('$f'))['passed'])")
       if [ "$passed" != "True" ]; then
           echo $(basename $f _evaluation.json) >> tests/failed_ids.txt
       fi
   done
   
  1. 对于 tests/failed_ids.txt 中的每个 ID:
  2. 重复直到该题通过或确认无法解决
  3. - 查看分析报告:cat tests/results/${ID}_analysis.txt - 查看 CmdCode 输出:cat tests/results/${ID}_stdout.txt - 根据分析报告修改 src/cli.tssrc/chat.ts 等相关源码 - 重新运行该题测试:bash tests/run_single_test.sh $ID && bash tests/evaluate_result.sh $ID 验收标准:失败题目列表中的每道题都经过重新测试


第八阶段:最终报告与部署(2 个提示词)

提示词 15

执行对象:Hermes 任务:生成完整测试报告并部署。 具体操作步骤

  1. 运行报告生成器:
   bash tests/generate_report.sh
   
  1. 检查报告内容包含 HumanEval 统计部分:
   grep -c "HumanEval" TEST_REPORT.md
   
  1. 将报告文件复制到部署目录或推送到远程:
  2. 验证报告在线可见:
  3. - 如果项目有部署脚本(如 deploy.sh),运行它 - 否则手动将 TEST_REPORT.md 上传到 CmdCode 网站文档目录

   curl -s https://cmdcode.cn/xiaoc/cmdcode-test-report.html | head -20
   

验收标准TEST_REPORT.md 包含 HumanEval 测试章节,且在线报告可访问

提示词 16

最终验证:手动运行一次完整闭环。 任务:从零开始运行完整测试框架。 具体操作步骤

  1. 清理之前的结果:
   rm -rf tests/temp/* tests/results/*
   
  1. 重置题库为完整版:
   cp tests/test_data_full.json tests/test_data.json
   
  1. 运行完整测试:
   bash tests/auto_loop.sh
   
  1. 生成最终报告:
   bash tests/generate_report.sh
   
  1. 检查报告中的 By-Language Summary 表格和 HumanEval 章节

验收标准:所有步骤均成功完成,TEST_REPORT.md 包含:

  • HumanEval 题目总数(164)
  • 通过数 / 失败数
  • 总体通过率百分比
  • 每道题的结果状态

以上 16 个提示词构成完整的 HumanEval 集成与测试闭环。每个提示词均具原子性,可被 Hermes 直接执行,无需额外解释。

🧐 深度思考过程
好的,用户现在想要把成熟的编程测试集套进已经搭建好的 CmdCode 自动测试框架里,并且要求用纯源代码模式运行,形成一个最小闭环。 嗯,回顾一下之前的对话,用户一直在迭代优化一个叫 CmdCode 的 AI 编程助手 CLI 工具。我们刚刚完成了一个重要的里程碑:修复了单次执行模式下的自动退出问题,并成功搭建了一个基础的自动化测试框架。这个框架目前包含了 5 道自定义的简单题目,并且实现了从执行到评估的全自动闭环,5/5 全部通过了。 用户现在的需求是“套用成熟的编程测试集”,这意味着他想要扩展题库,用更权威、更复杂的题目来检验 CmdCode 的能力。他特别强调了“纯 bun src/cli.ts 纯源代码模式运行,不编译,没有 dist 文件”,这呼应了我们之前解决乱码和编译问题的思路——直接运行源码更可靠。用户还要求“先最小闭环落地,先跑起来形成自举闭环”,这说明他希望先集成一个或几个数据集,让整个流程跑通,验证可行性,而不是一次性追求完美。 用户要我把这个任务分解成图灵机级别的、可直接执行的提示词交给 Hermes(一个 AI 助手)。这个要求很高,意味着每一步都必须非常具体、无歧义,就像给一个完全不懂上下文的人下指令,但同时又不能给代码,只能引导。 我需要思考一个可行的最小方案。我之前在回答中提到了几个可以在国内获取的成熟数据集,比如 Gitee 上的 HumanEval、MBPP,ModelScope 上的 SWE-bench 等。为了最小闭环,我应该先选一个结构最简单、最容易集成和评估的。HumanEval 最合适,因为它就是标准的函数签名、描述和单元测试,评估逻辑清晰。 那么,我的思考过程应该是:先选定 HumanEval 作为首个集成目标。然后,我需要设计如何把它嵌入到现有的测试框架 `tests/auto_loop.sh` 中,作为题库的一部分自动执行。关键在于,如何自动评估 AI 生成的代码是否通过 HumanEval 的单元测试。不能直接进行代码安全检查,因为那太复杂了,而且单元测试本身就是一种安全执行的方式。 用户要的是“图灵机级”的提示词,所以我必须把整个流程拆解得非常细。比如,第一步是让 Hermes 克隆 Gitee 上的 HumanEval 镜像仓库。第二步是确认文件存在。第三步是修改主循环脚本,让它能遍历 HumanEval 数据集(原始是 jsonl 格式)。第四步是编写一个预处理脚本,把 jsonl 格式的题目转换成框架能识别的 JSON 数组,并插入到 `test_data.json` 中。第五步是关键:编写一个专门的评估脚本,它能提取 AI 生成的代码,把人类编写的单元测试包裹上去,然后在一个隔离的环境里(比如 Docker 或者简单的子进程超时执行)运行生成代码的测试。最后是运行测试并验证。 我要确保我的思考过程是可见的,要说明为什么选择 HumanEval,为什么选择 Gitee 镜像,评估逻辑为什么这样设计。最终输出的提示词,每个都必须像原子操作一样简单。