一条推文,七百万围观,就说了四个字
前阵子 X 上有个帖子爆了。七百万人围观,转发评论炸成一片。内容就一个意思:
"开源大佬们,别再给 AI 写提示词了,你应该去设计 Loop。"
没完。Claude Code 的作者转发了,附了一句:"我也不写 Prompt,我也写 Loop。"
两个 AI 圈最会写代码的人,异口同声地说同一件事。这事值得琢磨。
Loop 是计算机最古老的本能
Loop,循环。写代码的第一课就学它。计算机诞生那天就有了。三件事:
从哪开始。重复做什么。什么时候停。
一万行数据要逐行检查格式,改完再存回去。让人干,一下午。让程序跑个 for 循环,几秒钟。
就这么个朴素到土里的概念,被搬到了 AI 协作上,突然变成了最前沿的工作流。
大模型本身就是 Loop 喂出来的
DeepSeek、Claude、Qwen、GPT......不管你用哪一个,它来到你面前之前,都经历过同一个过程:
拿一批数据 → 喂给模型 → 算一下错多少 → 调参数 → 再来一轮
万亿次。万亿次循环之后,一堆矩阵权重突然就学会了对话、推理、写代码。

训练的底层逻辑,从来没变过。就是一个巨大的 Loop。
你每天都在跑手动挡循环
停下来想三秒钟。你平时跟 AI 配合,是不是这个画风:
写一段 Prompt → 发给 AI → 看输出 → 好像不太行
→ 改 Prompt → 再发 → 还是差点意思
→ 再改 → 再发 → OK 这次能用了
恭喜你,你也是 Loop 大师。只不过------你是 Loop 里的人肉齿轮。
你把工作交给了 AI,但你被绑在椅子上盯着它干。AI 每吐一次,你的人脑就要跑一次 check,然后手动调 gen。你确实省了写文案、写代码的力气,但你付出了注意力。
Loop 要干的,就是把你从循环里面拽出来。让你从 "操作工" 变成 "设计师"。
拆开看,Loop 就两个零件
Completion。Check。
让 AI 生成。然后让它自己(或者另一个规则引擎)检查。检查过了,结束。没过,把失败原因塞回去,让它再生成一次。

就这么来回倒。简单到你觉得"这也能叫方法论?"------但一旦你真的写进代码,你会发现你回不去了。
实战:让 AI 自己跟自己较劲写小红书文案
说一万遍道理不如跑一遍代码。场景不搞复杂,就一件事:写一篇小红书美妆文案,四条硬指标,不达标就重写。
第一步:刹车装好,别让 Loop 变脱缰野马
Loop 最怕的不是跑得慢,是停不下来。开始写代码之前,先把退路铺好:
javascript
const limit = {
maxRound: 5, // 给你五次机会,多了没有
maxToken: 2000, // 钱不是大风刮来的,Token 烧到这里就认栽
sameStop: 2 // 连续两次吐一样的东西,说明脑子卡了,别浪费电
};
这三个边界各自盯一种翻车场景。maxRound 防的是 "每次检查都说差一点,永远通不过"。maxToken 防的是你第二天收到一张天价账单。sameStop 最妙------如果模型连续两次生成一模一样的内容,说明它已经想不出新招了,再跑下去就是同一个输出死循环。
第二步:把目标和规则摆上台面
javascript
const task = {
desc: "小红书美妆文案", // 为什么而写
rules: [ // 写出来得长这样
"标题带数字",
"正文小于300字",
"大爆款风格",
"结尾有行动号召"
]
};
这套 rules 是整个 Loop 的宪法。gen 照着它写,check 照着它审。 两边用同一把尺子量,不会出现 "生成的理解和检查的理解对不上" 的狗血剧情。
第三步:状态追踪
javascript
let round = 0, // 第几轮了
totalToken = 0, // 烧了多少钱
lastText = "", // 上一轮说了啥
sameCount = 0; // 卡了几次了
function needStop() {
return round >= limit.maxRound
|| totalToken >= limit.maxToken
|| sameCount >= limit.sameStop;
}
第四步:gen------让 AI 扮演博主
javascript
async function gen() {
const res = await client.chat.completions.create({
model: 'deepseek-v4-flash',
messages: [{
role: "user",
content: `假如你是一位资深小红书美妆博主,
写一篇${task.desc},严格遵守:
${task.rules.join("、")},只输出文案`
}]
});
console.log(res.usage.total_tokens, res.choices[0].message.content);
return {
text: res.choices[0].message.content.trim(),
token: res.usage.total_tokens
};
}
这里有个小设计:规则直接写进 gen 的 Prompt 里。 这样模型在生成时脑子里就装着这套标准,而不是写成什么样子全靠运气。
第五步:check------让 AI 自己当裁判
javascript
async function check(text) {
const res = await client.chat.completions.create({
model: 'deepseek-v4-flash',
messages: [{
role: "user",
content: `
校验文案:${text}
规则:${task.rules.join("、")},
仅输出json格式:{pass:布尔值, fail:数组}`
}]
});
return JSON.parse(res.choices[0].message.content.trim());
}
"仅输出 JSON" 这四个字是点睛之笔。你不用写正则去猜 "通过" 还是 "基本通过但有一个小问题"。代码直接
if (pass)判断,干净利落。fail 数组告诉你具体哪几条没达标,回头还能喂给下一轮 gen 做定向修正。
第六步:组装
javascript
async function runloop() {
console.log("开始循环");
while (!needStop()) {
round++;
console.log(`第 ${round} 轮`);
const { text, token } = await gen();
totalToken += token;
sameCount = text === lastText ? sameCount + 1 : 0;
lastText = text;
const { pass, fail } = await check(text);
if (pass) {
console.log("全部规则通过,循环结束 🎉");
console.log(`最终文案:${text}`);
return;
}
console.log("不通过,吊起来重写:", fail.join("、"));
}
console.log(`刹车踩死,最后一版文案:${text}`);
}
runloop();
跑起来看看
text
开始循环
第 1 轮
不通过,吊起来重写:标题不含数字、结尾缺少行动号召
第 2 轮
不通过,吊起来重写:正文超300字
第 3 轮
全部规则通过,循环结束 🎉
最终文案:【一篇合格的文案】
三轮,几十秒,人没动手。你自己手动调 Prompt,大概率也得改个两三次,而且得一直盯着屏幕等它吐完。
爽归爽,Loop 不是免费的午餐
手动调 Prompt,一轮几百 Token。Loop 每轮 gen + check,加起来也是几百。跑五轮就是上千。
这还没算上一些隐性代价:
- check 本身也会误判。 模型当裁判不是万无一失的,可能把合格的毙了、把不合格的放了。两个 LLM 互相配合,误差会叠加。
- 刹车设置太松,Token 直接飞走。 maxRound 设 20、maxToken 不设上限,跑一趟下来账单够你吃一顿海底捞。
- 任务越模糊,收敛越慢。 "写一篇爆款文案" 这种目标,check 函数都很难量化,Loop 还不如手动改。
所以别啥活都往 Loop 里扔。规则清晰、检查好量化、人工迭代成本高的任务,才是 Loop 的甜区。文案生成是,代码审查是,合同校验也是。但"帮我起个好听的项目名"这种,算了,自己想吧。
从 Prompt 操作工到 Loop 设计师
写 Prompt 的人,关心的是 "这句话怎么措辞模型才听话"。
设计 Loop 的人,关心的是 "规则怎么定、检查怎么量化、刹车设在哪"。
两种思维。前者在跟模型对话,后者在给模型设定游戏规则。
Claude Code 的作者说他不写 Prompt,写 Loop。本质上是在说------我不当 AI 的对话搭档,我当 AI 的流程设计师。
下次你准备打开对话框开始一轮一轮手动调 Prompt 的时候,问自己一句:这个活,能不能写成一个 Loop?