免费 AI 编程工具链:OpenCode + 三层约束让免费模型写出生产级代码
本文最后更新于 2026年7月9日 晚上
免费 AI 编程工具链:OpenCode + 三层约束让免费模型写出生产级代码
背景:免费模型能写代码吗?
市面上有大量”免费 AI 编程工具”——Cursor、Windsurf、Trae-CN……它们提供免费的模型额度,让开发者零成本用 AI 写代码。但免费模型(GLM、DeepSeek、MiniMax 等)的代码能力参差不齐,直接用经常翻车:改了不该改的文件、删除已有功能、留下半成品代码。
问题不是模型不够强,而是没有给模型足够的约束。同一个免费模型,没有约束时改出 bug,加了约束后一次到位。区别在于:你是否把”项目架构””改动范围””编码规范”这些上下文喂给了模型。
本文记录一套经过反复验证的工具链:用 OpenCode CLI 作为执行器,配合三层 AGENTS.md 约束机制,让免费模型产出生产级代码——零 API 费用,可控可验收。
工具链全景
1 | |
核心组件
| 组件 | 角色 | 费用 |
|---|---|---|
| OpenCode CLI | 代码执行器,支持多种模型 | 免费(开源) |
| 免费模型 | 实际写代码的 LLM | 免费(有速率限制) |
| AGENTS.md | 项目上下文 + 编码规范 | 需手动编写 |
| TASK 文件 | 单次任务的精准指令 | 需手动编写 |
关键分工:AI Agent 负责策划和检查,OpenCode 负责执行。Agent 不直接写代码(节省自己的 Token 额度),而是写任务规格书(TASK-*.md),交给 OpenCode 执行,然后验收。
三层约束机制:核心创新
OpenCode 启动时会读取多个 AGENTS.md 文件,通过并集(Union)合并注入 LLM 的 system prompt。这不是覆盖,是叠加——三层约束同时生效。
第一层:全局 AGENTS.md(行为准则)
路径:~/.config/opencode/AGENTS.md
内容:Karpathy 四原则——编码前思考、简洁优先、精准修改、目标驱动执行。
作用:告诉模型怎么改代码——不准乱动没坏的东西,只改要求改的,改完必须验证。
1 | |
第二层:项目 AGENTS.md(架构认知)
路径:<project>/AGENTS.md
内容:技术栈、API 端点清单、目录结构、数据库模型、关键约定。
作用:告诉模型改哪里——知道项目的模块边界、已有的设计模式、哪些文件不能碰。
一个典型的项目 AGENTS.md 会包含:
1 | |
第三层:TASK 文件(精准指令)
路径:<project>/TASK-YYYYMMDD-feature.md
内容:本次任务的具体改动清单、禁止改动清单、验收标准。
作用:告诉模型这次只改这些——精确到文件名和行为。
1 | |
三层缺一不可
| 症状 | 缺哪层 | 根因 |
|---|---|---|
| 改了不该改的文件 | 第一层(全局) | 模型不知道”只改要求改的” |
| 改了错误的模块 | 第二层(项目) | 模型不知道项目结构 |
| 改了多余的行号 | 第三层(TASK) | 模型不知道本次任务的精确范围 |
实测案例:同一个任务,Round 1 全局 AGENTS.md 为空(四原则未注入),模型改了一堆不该改的文件,前端白屏。Round 2 补全三层约束后,模型只改了预期的 3 个文件,1 小时完成,零 regression。
免费模型实测:哪个能用
OpenCode 内置多个免费模型,能力差异巨大:
| 模型 | 编码能力 | 适用场景 |
|---|---|---|
| DeepSeek V4 Flash | ★★★★★ | 复杂多文件任务、全局重构 |
| GLM-4.6 (big-pickle) | ★★★☆☆ | 简单单文件改动 |
| MiniMax M3 | ★★★☆☆ | 通用任务 |
关键教训:模型选择决定返工量
同一个 bug 修复任务:
- GLM-4.6 做:改了一半,留下重复的 return 代码块(dead code),还误改了 CSS 文件导致前端白屏。需要人工补修。
- DeepSeek V4 Flash 做:正确诊断根因(缺少入口文件导致 tree-shaking),一次创建完整修复(4 处改动),构建验证部署一条龙。
结论:编码任务无脑选 DeepSeek V4 Flash。 GLM-4.6 只用于最简单的单文件改动。跳过模型选择直接用默认模型 = 流程违规。
模型可用性会波动
免费模型随时可能返回 400 “Model does not exist” 或 429 速率限制。正确流程:
opencode models列出当前可用模型- 按能力排序选最强的
- 首选模型不可用,直接换次强的,不要问用户
- 所有免费模型都不可用时,才考虑付费 provider
代码审查实战:report-only 模式
除了写代码,免费模型还能做代码审查。最佳实践是 report-only 模式:让模型只报告问题,不改代码。
1 | |
为什么要分离审查和修复?
| 模式 | 模型行为 | 风险 |
|---|---|---|
| 审查+修复一起做 | 边查边改 | 容易改过头,误删功能 |
| 只审查(report-only) | 只输出报告 | 无风险,报告质量高 |
| 单独修复 | 按报告逐项修 | 可控,每步可验收 |
实测:report-only 模式下,GLM-4.6 在 api.py(2000+ 行)中找到 9 个 bug,含 3 个 P1 全部准确。然后再写单独的修复 TASK,逐项修复,每步验收。
完整工作流
1 | |
典型调用示例
1 | |
踩坑总结
| 坑 | 症状 | 修复 |
|---|---|---|
| 全局 AGENTS.md 路径写错 | 四原则不生效,模型乱改 | ~/.config/opencode/(不是 ~/.opencode/) |
| 模型选错 | 复杂任务改一半留垃圾 | 无脑用 DeepSeek V4 Flash |
| TASK 文件在 workdir 外 | OpenCode 拒绝读取 | TASK 放项目目录内 |
~ 路径解析错误 |
文件写到错误位置 | 一律用绝对路径 |
| 审查修复一起做 | 误删已有功能 | 分离审查(report-only)和修复 |
总结
| 维度 | 方案 |
|---|---|
| 执行器 | OpenCode CLI(开源、免费) |
| 约束机制 | 三层 AGENTS.md 并集合并 |
| 首选模型 | DeepSeek V4 Flash(免费最强) |
| 代码审查 | report-only 模式,审查与修复分离 |
| 成本 | $0(全部使用免费模型额度) |
免费模型不是不能用,关键在于约束。三层 AGENTS.md 机制把”项目架构””编码规范””任务范围”三层上下文叠加注入,让免费模型在充分约束下的产出质量,逼近甚至超过无约束的付费模型。
核心心法:Agent 策划,OpenCode 执行,免费模型干活,人工验收。 每一层各司其职,成本为零。