LeetCode Hard Gym 简介
LeetCode Hard Gym 是一个专门用于评估代码生成代理在 LeetCode 困难题目上表现的强化学习环境。该项目由 GammaTauAI 团队开发,旨在为研究人员和开发者提供一个标准化的平台,以测试和比较不同代码生成模型的性能。
主要特点
-
多语言支持:LeetCode Hard Gym 支持多种编程语言,包括 Python、Java、C++、JavaScript 等 18 种主流编程语言。这使得研究人员可以在不同语言环境下评估代码生成模型的表现。
-
基于 OpenAI Gym:项目建立在 OpenAI 的 Gym 框架之上,这使得它能够与现有的强化学习算法和工具无缝集成。
-
实时评估:通过与 LeetCode 的提交服务器接口,LeetCode Hard Gym 能够实时评估生成的代码,提供即时反馈。
-
标准化评估指标:项目提供了 Pass@1 等标准化的评估指标,便于不同模型之间的横向比较。
使用指南
环境设置
要开始使用 LeetCode Hard Gym,您需要按照以下步骤进行设置:
- 克隆项目仓库:
git clone https://github.com/GammaTauAI/leetcode-hard-gym.git
cd leetcode-hard-gym
- 创建虚拟环境并安装依赖:
python -m venv venv
source venv/bin/activate
python -m pip install -e .
- 设置环境变量:
您需要设置LEETCODE_SESSION
和LEETCODE_CSRF_TOKEN
环境变量。这些可以从已登录的 LeetCode 会话中获取。
export LEETCODE_SESSION=...
export LEETCODE_CSRF_TOKEN=...
示例用法
以下是一个简单的示例,展示如何使用 LeetCode Hard Gym:
from leetcode_env.types import LeetCodeSubmission, ProgrammingLanguage
from leetcode_env.environment import LeetCodeEnv
# 编写代码
code = """
class Solution:
def twoSum(self, nums, target):
l = len(nums)
for i in range(l - 1):
for j in range(i + 1, l):
if nums[i] + nums[j] == target:
return [i, j]
"""
# 创建提交
sub = LeetCodeSubmission(code=code,
lang=ProgrammingLanguage.PYTHON3,
question_slug='two-sum',
timeout=5)
# 实例化环境
env = LeetCodeEnv()
# 执行提交
status, reward, done, submission_result = env.step(sub)
print(status, reward, done, submission_result)
LeetCode Hard Gym 数据集
除了提供评估环境,LeetCode Hard Gym 项目还包含了一个用于构建未被污染的 LeetCode 困难题目数据集的脚本。这个数据集的格式类似于 HumanEval,可以用于进一步的研究和模型训练。
数据集构建
要构建数据集,您可以使用以下命令:
python build.py --langs python3 rust --log_level INFO --output_dir ./build
这个脚本会执行以下操作:
- 获取 LeetCode 困难题目
- 过滤掉依赖类、无返回值和类实现问题
- 为指定的编程语言格式化问题
- 可选地使用 GPT 从问题描述中提取测试用例
数据集特点
- 未被污染:数据集经过精心筛选,确保问题的纯净性。
- 多语言支持:可以为不同的编程语言生成数据集。
- 灵活性:提供了多个选项来定制数据集的构建过程。
性能评估
LeetCode Hard Gym 提供了一个标准化的评估指标:Pass@1。以下是一些主要模型在 Python 语言的 LeetCode 困难题目上的表现:
- OpenAI GPT-4: 10.7%
- OpenAI Codex: 3.6%
- OpenAI GPT-3.5: 0.0%
- Reflexion + GPT-4: 15.0%
这些结果表明,即使是最先进的模型在解决 LeetCode 困难题目时仍面临着巨大挑战。LeetCode Hard Gym 为研究人员提供了一个宝贵的工具,以推动代码生成技术的进步。
结论
LeetCode Hard Gym 项目为代码生成和程序合成领域的研究提供了一个强大而灵活的工具。通过标准化的评估环境和数据集,它使得不同模型和方法的比较变得更加容易和公平。随着人工智能和机器学习技术在编程领域的不断进步,我们可以期待看到更多创新的解决方案来应对 LeetCode 困难题目的挑战。
对于有兴趣深入研究或使用 LeetCode Hard Gym 的开发者和研究人员,项目的 GitHub 仓库 提供了详细的文档和使用说明。我们鼓励社区贡献者参与到项目的改进和扩展中来,共同推动代码生成技术的发展。
引用
如果您在研究中使用了 LeetCode Hard Gym,请引用以下论文:
@misc{shinn2023reflexion,
title={Reflexion: Language Agents with Verbal Reinforcement Learning},
author={Noah Shinn and Federico Cassano and Edward Berman and Ashwin Gopinath and Karthik Narasimhan and Shunyu Yao},
year={2023},
eprint={2303.11366},
archivePrefix={arXiv},
primaryClass={cs.AI}
}
通过 LeetCode Hard Gym,我们期待看到更多突破性的研究成果,推动代码生成技术向着更高效、更准确的方向发展。🚀👨💻👩💻