1. 从「AI 会写代码」到「AI 能交付任务」执行断层到底卡在哪LazyCodex 是一套面向 AI 编程 Agent 的执行系统思路核心不是让模型更聪明而是让 Agent 按「规划 → 执行 → 验证」的工程流程把任务真正跑完。它适合已经在用 Claude Code、Cursor、Copilot 这类工具却经常遇到「代码写了一半、上下文丢了、改完没验证」的开发者也适合想自己搭 Agent 工作流的团队。过去一年AI 编程工具的普及速度确实快。补全一行代码、解释一个报错、重构一个小函数这些场景的体验已经相当顺滑。但只要任务稍微长一点问题就冒出来了让它改三个文件它改了两个就说完成了让它修一个跨模块的 bug它在中途忘了前面定好的约束让它实现一个完整功能它给你一段「看起来能跑」的代码实际一运行就报错。我把这类现象叫做「执行断层」。模型本身不缺生成能力缺的是把一次工程任务从头到尾闭环的能力。传统聊天式交互里用户说一句话模型直接吐代码中间没有规划、没有状态、没有验证。任务一长模型就像一个人在没有清单的情况下搬家搬到一半忘了还有什么没搬。LazyCodex 这类执行系统的价值就在这里它把 AI 从「生成代码的模型」变成「按流程执行任务的系统节点」。规划阶段先拆任务执行阶段按步骤走验证阶段检查结果是否真的满足条件不满足就回到循环里继续。这套机制不依赖提示词技巧而是靠结构化的角色分工和状态管理。下面我会给出一套可复制的 Agent 配置骨架配合 TaoToken 的 API 接入在本地跑通一次完整的「规划 → 执行 → 验证」链路。你可以跟着操作也可以只取其中的工作流设计思路用到自己的项目里。2. 前置准备用 TaoToken 给 Agent 接上模型能力要让 Agent 工作流跑起来第一步是有一个稳定的模型调用入口。TaoToken 提供的是兼容 OpenAI 风格的 APIAgent 里的 planner、executor、verifier 三个角色都可以通过同一个入口调用不同模型省去分别对接多家 SDK 的麻烦。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 。注意 API 地址后面不加 UTM 参数直接用于代码里的 base_url。你需要先拿到一个 API Key。进入控制台创建密钥的页面在这里https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制保存后面配置环境变量会用到。如果你只是想先验证模型能不能正常对话可以用模型对话页面快速试一句https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。确认返回正常后再进入下面的代码配置。对于长期跑编码任务和 Agent 循环的场景Coding Plan 会更合适因为 loop 机制会反复调用模型按量计费容易失控https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面列出了兼容的模型名和参数格式配置前建议扫一眼。环境变量这样设置Linux/macOS 用 exportWindows 用 setexport TAOTOKEN_API_KEY你的_API_Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意API Key 不要写进代码提交到仓库用环境变量或本地 .env 文件并把 .env 加进 .gitignore。3. 可复制的 Agent 配置骨架planner / executor / verifier 三段式这套骨架用 Python 写依赖只有 openai 官方 SDK因为 TaoToken 兼容 OpenAI 接口。整个文件分成三部分模型客户端、三个角色的提示词、以及主循环。你可以直接复制成一个 agent_loop.py 运行。先装依赖pip install openai然后是完整代码import os import json from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ[TAOTOKEN_BASE_URL], ) MODEL gpt-4o-mini # 按接入文档替换成你账号可用的模型名 PLANNER_PROMPT 你是一个任务规划器。用户会给你一个工程任务。 请把它拆成有序的、可独立执行的步骤每步必须包含 - step_id: 序号 - action: 要做什么 - target: 涉及的文件或模块 - done_when: 什么条件下算这一步完成 只输出 JSON 数组不要输出其他内容。 EXECUTOR_PROMPT 你是一个执行器。你会收到一个步骤和当前上下文。 请完成该步骤输出 - result: 你做了什么 - artifacts: 产出的代码或文件变更如有 - status: done 或 blocked 只输出 JSON 对象。 VERIFIER_PROMPT 你是一个验证器。你会收到原始任务、规划步骤和执行结果。 请判断任务是否真正完成输出 - passed: true 或 false - reason: 判断理由 - missing: 如果未完成列出还缺什么 只输出 JSON 对象。 def call_model(system_prompt, user_content): resp client.chat.completions.create( modelMODEL, messages[ {role: system, content: system_prompt}, {role: user, content: user_content}, ], temperature0.2, ) return resp.choices[0].message.content def plan(task): raw call_model(PLANNER_PROMPT, task) return json.loads(raw) def execute(step, context): payload json.dumps({step: step, context: context}, ensure_asciiFalse) raw call_model(EXECUTOR_PROMPT, payload) return json.loads(raw) def verify(task, steps, results): payload json.dumps( {task: task, steps: steps, results: results}, ensure_asciiFalse, ) raw call_model(VERIFIER_PROMPT, payload) return json.loads(raw) def run(task, max_loops3): steps plan(task) print(规划结果, json.dumps(steps, ensure_asciiFalse, indent2)) results [] for loop in range(max_loops): for step in steps: out execute(step, results) results.append({step: step, output: out}) print(f执行 step {step[step_id]}: {out[status]}) check verify(task, steps, results) print(验证结果, json.dumps(check, ensure_asciiFalse)) if check.get(passed): print(任务闭环完成) return results print(f第 {loop 1} 轮未通过原因{check.get(reason)}) print(达到最大循环次数任务仍未闭环) return results if __name__ __main__: task 在 utils 目录下新增一个 format_date 函数支持传入时间戳返回 YYYY-MM-DD并补一个单元测试 run(task)这段代码的关键设计点有三个。第一planner 强制输出 JSON 数组每个步骤带 done_when 字段这就是「可验证」的基础。第二executor 每步只处理一个 step上下文通过 results 列表传递避免一次性塞太多信息导致模型跳步。第三verifier 独立于 executor用不同视角判断任务是否真的完成不通过就进入下一轮 loop。提示temperature 设成 0.2 是为了让规划结果稳定如果你发现规划太死板可以调到 0.4 左右但不要太高否则步骤顺序会乱。4. 跑通验证一次完整任务链路的执行与结果把上面的代码保存后运行python agent_loop.py你会看到类似这样的输出。规划阶段返回一个 JSON 数组比如[ {step_id: 1, action: 创建 format_date 函数, target: utils/date.py, done_when: 函数存在且能处理时间戳}, {step_id: 2, action: 编写单元测试, target: tests/test_date.py, done_when: 测试覆盖正常和边界输入}, {step_id: 3, action: 运行测试确认通过, target: tests/test_date.py, done_when: 测试全部通过} ]执行阶段每步打印状态验证阶段返回 passed 为 true 时任务闭环。如果 verifier 发现测试没写或没跑会返回 passed 为 false 并列出 missing主循环进入下一轮executor 会针对缺失部分继续执行。这里有个实际踩过的坑第一轮 verifier 经常因为「没有实际运行测试」而判不通过因为 executor 只是生成了测试代码没有执行。解决办法是在 executor 的提示词里明确要求「如果步骤涉及运行命令请在 artifacts 里给出命令和预期输出」或者在 verifier 提示词里加上「检查是否有执行证据」。我试过在 executor 提示词末尾加一句「涉及验证的步骤必须给出可复现的命令」通过率明显提升。如果你想先确认模型调用本身没问题可以单独跑一句最小请求resp client.chat.completions.create( modelMODEL, messages[{role: user, content: 回复 ok}], ) print(resp.choices[0].message.content)返回 ok 说明 API Key 和 base_url 配置正确。如果这一步就报错先排查环境变量和网络不要急着调 Agent 逻辑。5. 本篇常见错排查报错 401 UnauthorizedAPI Key 没读到或写错了。检查echo $TAOTOKEN_API_KEY是否有值注意不要有多余空格或引号。如果用的是 .env 文件确认加载逻辑生效。报错 model not found模型名写错或账号没有该模型权限。对照接入文档里的模型列表替换 MODEL 变量不要凭记忆写。planner 返回的不是合法 JSON模型偶尔会在 JSON 前后加解释文字。可以在 call_model 里加一层清洗用正则提取第一个[到最后一个]之间的内容再 json.loads。更稳的做法是在提示词里加「不要输出 markdown 代码块标记」。executor 跳步或重复执行上下文传得太多或太少都会导致。results 列表建议只保留最近两轮的输出太长的历史会稀释当前步骤的注意力。另外每个 step 的 action 要足够具体像「优化代码」这种模糊描述一定会出问题。verifier 永远返回 passed 为 false检查 done_when 是否可客观判断。如果写成「代码质量好」这种主观条件verifier 无法给出确定结论。改成「函数存在且测试通过」这类可验证条件。loop 次数用完还没闭环max_loops 设成 3 是保守值复杂任务可以调到 5。但如果 5 轮还不行通常是任务本身拆得不够细回到 planner 提示词要求每个步骤不超过一个文件的改动。调用超时或限流loop 机制会短时间内多次请求如果遇到 429在 call_model 里加指数退避重试。长期高频使用建议走 Coding Plan避免按量计费下的额度波动。6. 执行系统对 AI 编程方式的重构潜力把上面这套骨架跑通之后你会发现变化不在于模型变强了而在于 AI 的工作方式变了。传统模式下你给一句话模型直接给代码中间是黑盒。执行系统模式下规划、执行、验证三个阶段各自独立每一步都有明确的输入输出和完成条件AI 从「对话对象」变成了「可编排的执行单元」。这也是 LazyCodex 这类思路真正值得关注的地方。它代表的趋势是 AI 编程从「生成能力竞争」进入「执行系统竞争」。Copilot 解决的是「怎么写代码」Cursor 和 Claude Code 解决的是「怎么帮你写代码」而执行系统要解决的是「AI 应该按什么工程规则来写代码」。决定上限的不再只是模型参数而是 harness也就是执行框架本身。如果你想继续深入可以从两个方向走。一是把 verifier 换成真实测试命令让验证不依赖模型判断而是跑 pytest 看退出码这样闭环更硬。二是把单 Agent 拆成多 Agentplanner、executor、verifier 各自独立进程通过消息队列通信这就是更完整的 Agent 工作流编排。接入文档里有兼容接口的完整参数说明配合 API Keys 页面创建的密钥你可以把这套骨架直接接到自己的项目里跑起来。
阅读完成 · 觉得有帮助?