开始使用

完成第一个任务, 亲自验证结果。

在 MonkeyCode 中打开一个小项目,提交一次修复,再检查结果。选择网页端或桌面端,跟着下面的步骤开始。

开始操作

选择运行方式

选择你想在哪里操作。两种方式使用相同的示例和完成条件。

通过仓库开始

需要 MonkeyCode 账号、自己拥有的 GitHub 仓库,以及可用的模型和额度。

打开 MonkeyCode

链接打开国际服务的中文界面,可通过 GitHub 登录或 Google 登录继续。

当前界面操作提示

如果出现地区提示,选择“Stay on International”保留国际版。

在登录页保持“普通用户”标签,选择登录方式,并在继续前阅读服务条款。

MonkeyCode 中文登录页,显示普通用户标签,以及 GitHub、Google 和账号密码登录按钮。
实际公开登录页面,截图日期 .

通过本地文件夹开始

需要 MonkeyCode 桌面客户端、可用的账号或已配置的模型连接,以及本地任务环境中的 Python。

获取桌面客户端

链接打开国际服务的中文界面,可通过 GitHub 登录或 Google 登录继续。

当前界面操作提示

如果出现地区提示,选择“Stay on International”保留国际版。

链接直接打开桌面下载区。选择自己电脑对应的 Windows、macOS 或 Linux 安装包,再按安装器提示操作。

准备在自己的服务器上运行? 查看自托管指南 →

打开示例项目

下载起始文件,解压到新建的 monkeycode-first-task 文件夹。保留原始 ZIP,方便重新开始。

下载起始文件 ZIP

这个文件夹中应直接包含 intervals.py、retry.py、两个测试文件、README.md 和 TASKS.md。

Python 3.10+

初始检查需要电脑上安装 Python 3.10+;MonkeyCode 的任务环境也需要 Python 才能验证修复。示例只使用标准库。在本地手动运行示例无需账号或 API 密钥。 获取 Python ↗

在 MonkeyCode 中打开项目之前,先在本地终端进入包含 intervals.py 的解压文件夹,运行下面的检查命令。

检查命令
python3 -m unittest discover -v

Windows 上如果没有 python3,但已安装 Python 启动器,请将所有命令和提示词中的 python3 替换为 py -3。

修复前的预期结果
Ran 8 tests
FAILED (failures=1)

共运行 8 项测试,仅 test_touching_is_not_overlap 失败。这是练习预设的起点。

显示“Ran 0 tests”?请检查当前文件夹。没有运行测试不代表这个练习已经通过。

在 MonkeyCode 中打开这些文件

使用网页端

  1. 把解压后的示例文件放入自己新建的 GitHub 仓库。
  2. 在 MonkeyCode 设置中连接 GitHub 身份,仅授权这个示例仓库。
  3. 创建项目,填写名称,选择已连接的身份和示例仓库。
查看详细配置步骤 →

使用桌面端

  1. 从官方产品网站下载并安装桌面客户端。
  2. 选择本地 Agent,打开包含 intervals.py 的解压文件夹。
  3. 确认任务使用的是这个文件夹,并选好可用模型。
查看详细配置步骤 →

提交修复任务

为示例项目创建任务,核对所选仓库和模型,再把下方提示词粘贴到任务输入框。

在示例文件夹中创建本地任务。核对文件夹和模型后,把下方提示词粘贴到任务输入框。

将这段提示词粘贴到 MonkeyCode
修复 intervals.py 中半开区间的缺陷:(1, 3) 与 (3, 5) 不应重叠。只修改 intervals.py,不得弱化测试。运行 python3 -m unittest discover -v。返回差异、完整命令及结果。完成条件:现有 8 项测试全部通过,包括端点相接、空区间和反向区间。

等待任务完成,然后查看文件修改和检查输出。保留原有测试。

检查运行结果

再次运行相同的检查命令,并查看修改差异。用下面三个条件决定是否接受修改。

检查命令
python3 -m unittest discover -v

  • 仅编辑了 intervals.py;自动生成的缓存文件不计入源码修改。
  • 原有测试未变,8 项全部通过,包括端点相接、空区间和反向区间。
  • 任务说明了修改内容、完整检查命令和运行结果。
修复后的预期结果
Ran 8 tests
OK

同时确认测试数量和“OK”。只要符合任务要求,其他正确实现也可以接受。

三个条件都满足?你的第一个任务完成了。

你已打开项目、提交一次明确的修改,并亲自检查了结果。开始下个任务前,保存这次差异。

准备好了,再试两步

TASKS.md 中还有两个可选练习。分别提交任务,每一步都与上一步的结果比较修改范围。

  1. 不修改 retry.py,新增四项重试策略测试。完成后应有 12 项测试通过。
  2. 只为 README.md 增加“How it works”一节,不修改代码。12 项测试应继续通过。
参考答案与检查记录

先尝试,再对照。这些经过本地检查的参考文件展示预期行为,并非 MonkeyCode 的实际任务录像或运行记录。

下载参考答案与证据 ↓
修改前 · 一项测试失败return a[0] <= b[1] and b[0] <= a[1]

[1, 3) + [3, 5) → True

修改后 · 八项测试通过return a[0] < b[1] and b[0] < a[1]

[1, 3) + [3, 5) → False

下方结果来自 Codex 在本地编写和检查的参考练习,不是 MonkeyCode 产品运行或客户基准。本站没有宣称耗时、token 成本或 Agent 成功率。

1. 修复缺陷

端点相接的区间不重叠,只修改 intervals.py。

查看记录的输出与差异
--- a/intervals.py
+++ b/intervals.py
@@ -2,4 +2,4 @@
 def overlaps(a, b):
     if a[0] >= a[1] or b[0] >= b[1]:
         return False
-    return a[0] <= b[1] and b[0] <= a[1]
+    return a[0] < b[1] and b[0] < a[1]
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 8 tests in 0.000s

OK

2. 补充测试

四项测试覆盖限流、永久错误、次数边界和非法参数。

查看记录的输出与差异
--- a/test_retry.py
+++ b/test_retry.py
@@ -9,5 +9,18 @@
     def test_budget(self):
         self.assertFalse(should_retry(503, 3))
 
+class AddedRetryTests(unittest.TestCase):
+    def test_rate_limit(self):
+        self.assertTrue(should_retry(429, 1))
+    def test_permanent_error(self):
+        self.assertFalse(should_retry(400, 1))
+    def test_before_budget(self):
+        self.assertTrue(should_retry(503, 2))
+    def test_invalid_attempts(self):
+        for attempt, maximum in [(0, 3), (-1, 3), (1, 0)]:
+            with self.subTest(attempt=attempt, maximum=maximum):
+                with self.assertRaises(ValueError):
+                    should_retry(503, attempt, maximum)
+
 if __name__ == "__main__":
     unittest.main()
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK

3. 解释代码

README 说明两个模块的行为,并保留复现命令。

查看记录的输出与差异
--- a/README.md
+++ b/README.md
@@ -9,3 +9,11 @@
 ```
 
 The initial interval test intentionally fails. Work on a copy.
+
+## How it works
+
+- `intervals.py` checks half-open intervals: touching endpoints do not overlap.
+- Empty or reversed intervals never overlap.
+- `retry.py` retries 408, 429, 500, 502, 503 and 504 responses only.
+- A retry is allowed only while `attempt < max_attempts`; attempts start at 1.
+- Non-positive attempt values or budgets raise `ValueError`.
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK
环境、文件哈希与全部阶段结果 →

复现参考结果

解压参考包,进入顶层目录执行 python3 verify.py。它使用临时副本检查预期失败、修复、文档和一次变异。答案公开,因此不能把它当作盲测基准。

检查命令
python3 verify.py

遇到问题?

需要账号或 API 密钥吗?
本地 Python 练习本身不需要。让 MonkeyCode 执行任务时,网页端需要账号和可用的模型额度;桌面端需要可用账号或已配置的模型连接。
没有 Python 怎么办?
在运行测试的环境安装 Python 3.10 或更高版本,并运行 python3 --version 确认。Windows 已安装 Python 启动器时,可运行 py -3 --version,并把命令和提示词中的 python3 替换为 py -3。
为什么第一次检查会失败?
起始文件故意保留了一个边界缺陷。预期运行 8 项测试,仅 test_touching_is_not_overlap 失败。如果没有运行任何测试或出现其他错误,先核对文件夹、Python 安装和起始文件。
为什么看不到 GitHub 仓库?
核对已连接的 GitHub 账号和应用的仓库访问范围。组织仓库可能需要所有者批准。修改授权后,刷新仓库选择列表。
任务没有修好怎么办?
保留失败输出,要求在原定文件范围内继续修复。如果测试或无关源码被修改,请重新解压一份起始文件。原有 8 项测试全部通过后再接受结果。

Cookie 设置

我们仅使用 cookie 用于统计分析(GA4 和 Matomo),不会投放广告或跨站追踪。