一个用于评估大语言模型在抽象推理任务上表现的提示词工程测试系统。该系统专门针对 ARC-AGI (Abstract Reasoning Challenge - Artificial General Intelligence) 挑战设计,通过精心设计的提示词框架测试 DeepSeek API 在网格变换谜题上的推理能力。
抽象与推理语料库 (ARC) 挑战被广泛认为是衡量通用人工智能 (AGI) 的关键基准之一。本项目通过构建一个完整的测试、分析、可视化系统,帮助研究人员:
- 🧠 少样本学习: 从 2-4 个训练示例中推断出网格转换规则
- 🎯 高维抽象归纳: 从像素级别的网格信息中抽象出通用变换规则
- ✅ 精确匹配验证: 要求模型输出与预期完全一致
- 📊 数据驱动迭代: 通过详细的日志分析和可视化优化提示词策略
┌─────────────────────────────────────────────────────────────┐
│ Template Layer (模板层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ template.py │ │
│ │ • construct_prompt(d): 构造多轮对话提示词 │ │
│ │ • parse_output(text): 解析 LLM 输出的网格预测 │ │
│ │ • 提示词版本管理 (prompt/v1.0.0/) │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Execution Layer (执行层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ test.py │ │
│ │ • test_sample(): 测试单个样本 │ │
│ │ • call_deepseek_api(): 调用 DeepSeek API │ │
│ │ • 时间戳日志记录 (log/run_TIMESTAMP/) │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Analysis Layer (分析层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ data_analysis.py │ │
│ │ • ARCLogAnalyzer: 日志分析与统计 │ │
│ │ • 生成可视化图表 (准确率、热力图、时长分布) │ │
│ │ • 生成 Markdown 报告 (错误分析、性能指标) │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
val.jsonl (测试数据)
↓
test.py (执行测试)
↓
DeepSeek API (模型推理)
↓
log/run_TIMESTAMP/
├── sample_00.json (单个样本完整日志)
├── sample_01.json
├── ...
└── summary.json (汇总统计)
↓
data_analysis.py (分析统计)
↓
log/analysis/analysis_TIMESTAMP/
├── images/
│ ├── overall_accuracy_trend.png (准确率趋势)
│ ├── question_heatmap.png (问题热力图)
│ ├── duration_distribution.png (时长分布)
│ └── ...
├── data/
│ ├── overall_stats.json (总体统计)
│ ├── per_run_stats.json (每次运行统计)
│ ├── per_question_stats.json (每题统计)
│ └── error_samples.json (错误样本)
└── report.md (详细报告)
- Python 3.8+
- DeepSeek API 密钥
- 依赖包: openai, matplotlib, seaborn, numpy
1. 克隆仓库
git clone <repository-url>
cd 提示词工程考试2. 安装依赖
pip install openai matplotlib seaborn numpy python-dotenv3. 配置 API 密钥
在项目根目录创建 .env 文件:
cp .env.example .env
# 编辑 .env 文件,填入你的 DeepSeek API 密钥
# DEEPSEEK_API_KEY=your_api_key_here4. 准备测试数据
确保 test_example/val.jsonl 文件存在。
运行测试
cd code
python test.py默认测试 20 个样本。修改 test.py 第 197 行可调整测试数量。
分析结果
cd code
python data_analysis.py可视化查看
cd code
python print_data.py| 指标 | 说明 |
|---|---|
| 准确率 | 预测网格与真实网格完全匹配的百分比 |
| 时长 | 单个样本的 API 调用延迟 |
| 难度分类 | 简单(≥80%)、中等(40-80%)、困难(<40%) |
- overall_accuracy_trend.png - 准确率与时长趋势
- question_accuracy_bar.png - 每题正确/错误统计
- question_heatmap.png - 运行×问题热力图
- duration_distribution.png - 每题用时分布
- pass_rate_by_question.png - 按难度排序的通过率
本系统采用 认知脚手架 方法,结合多种前沿提示词技术:
- Graph of Thoughts (GoT) / Tree of Thoughts (ToT) - 多路径探索
- Chain of Draft (CoD) - 简洁高效的中间步骤
- 原子工具集 - 降低推理难度,提升精确性
- 模拟 PAL - 显式列出中间结果
- 抽象与识别: Object Identification, FilterCol, Compress, SelectObjectByProperty, GetProperties
- 变换与操作: Rotate, Flip, Transpose, ColShape, UpdateColorByNeighbor, CropToBoundingBox, PackObjects, Scale, Move
- 结构与组合: ComposeGrowing, Arithmetic, Mask Generation, Tile, ConstructFromProperties
- 任务描述草稿
- 结构化特征提取
- 多假设生成 (至少5个)
- 评估与过滤
- 最优规则选择 (MDL引导)
- 详细转换步骤
- 最终预测 (JSON格式)
提示词工程考试/
├── code/ # 核心代码
│ ├── test.py # 测试执行脚本
│ ├── template.py # 提示词模板
│ ├── data_analysis.py # 数据分析
│ ├── print_data.py # 可视化工具
│ ├── prompt/v1.0.0/ # 提示词版本
│ └── log/ # 日志输出
├── test_example/ # 测试数据
│ └── val.jsonl # ARC验证集
├── paper/ # 参考文献
├── report/ # 项目报告
├── .env # API密钥(不提交)
├── .env.example # 配置模板
└── README.md # 本文件
编辑 code/template.py 中的 construct_prompt() 函数:
- 系统提示词: 第 21-68 行
- 用户提示词: 第 73-158 行
# code/test.py
total_samples = 20 # 测试样本数
api_timeout = 120 # API超时(秒)
max_retries = 3 # 重试次数- 小规模测试 - 初始10个样本
- 运行分析 - 查看性能指标
- 识别模式 - 检查error_samples.json
- 针对性优化 - 调整提示词
- 扩大测试 - 验证稳定性
- 版本记录 - 保存版本和数据
- ✅ 困难题推理链更长,需CoD优化
- ✅ 长提示词更稳定
⚠️ Few-shot位置敏感⚠️ 建议每版本测试3次取平均
确保 .env 文件在根目录,格式正确: DEEPSEEK_API_KEY=sk-xxx
确认 test_example/val.jsonl 存在
系统已配置中文字体,如有问题可重建字体缓存
在提示词中增强CoD指令,要求更简洁的步骤
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支
- 提交修改
- 推送到分支
- 开启 Pull Request
本项目采用 MIT 许可证
- ARC Challenge: https://github.com/fchollet/ARC-AGI
- DeepSeek API: https://platform.deepseek.com/
- 参考方案: Kaggle ARC 竞赛第一名解决方案
⭐ 如果这个项目对你有帮助,请给一个 Star!