别再手写Prompt了!用AI Loop实现自动化自我迭代,效率提升10倍

一条推文引来700万人围观,Claude Code作者直言"我也不写prompt,我写Loop"。

今天,我们就来拆解这个让AI自己"卷"自己的编程范式------AI Loop。


什么是AI Loop?循环才是AI的底层基因

如果你写过代码,一定对 forwhile 不陌生。循环(Loop) 是计算机最基础的控制结构,它只做三件事:

  • 从哪开始
  • 重复做什么
  • 什么时候停

比如,你有一万行Excel数据要逐行检查格式,人工可能要搞一整天,但写个循环程序,几秒钟跑完。循环的价值,就是把重复劳动交给机器。

而我们现在使用的所有大语言模型(LLM)------DeepSeek、Claude、Qwen......它们的训练过程本质上也是一个巨大的循环

拿一批数据给模型看 → 计算它错了多少 → 调整参数 → 再来一轮。

万亿次循环后,AI 学会了对话、写作、推理。

然而,在日常使用中,我们却常常陷入手动循环

  • 写Prompt → 看结果 → 不满意 → 改Prompt → 再看结果......
  • 你把工作交给了AI,但自己还得像监工一样盯着,手动迭代。

这就是手动Loop------低效、费时、容易遗漏。

而我们要讲的AI Loop ,就是把这些手动过程自动化,让AI自己生成、自己检查、自己修正,直到满足你的要求为止。


一个真实的AI Loop代码实战

下面这段代码(main.mjs)是我用DeepSeek API实现的一个完整AI Loop。它让AI自主完成"小红书美妆文案"的生成,并自动校验规则,不达标就重来,直到通过或触发刹车条件。

我们先贴出完整代码,再逐行拆解。

javascript 复制代码
import { OpenAI } from 'openai';
import dotenv from 'dotenv';
dotenv.config();

const client = new OpenAI({
    apiKey: process.env.DEEPSEEK_API_KEY,
    baseURL: process.env.DEEPSEEK_BASE_URL
});

// -------------------- Loop 可控边界 --------------------
const limit = {
    maxRound: 5,          // 最大尝试轮数(防死循环)
    maxToken: 2000,       // 总token消耗上限(防超预算)
    sameStop: 2           // 连续相同结果几次就停(防原地踏步)
};

const task = {
    desc: "小红书美妆文案",           // 目标
    rules: ["标题带数字", "正文<300字", "大爆款", "结尾有行动号召"] // 校验规则
};

let round = 0, totalToken = 0, lastText = "", sameCount = 0;

// -------------------- 刹车判断 --------------------
function needStop() {
    return round >= limit.maxRound ||
           totalToken >= limit.maxToken ||   
           sameCount >= limit.sameStop;
}

// -------------------- 生成文案(生产者) --------------------
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
    };
}

// -------------------- 校验文案(检查者) --------------------
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());
}

// -------------------- 主循环 --------------------
async function runLoop() {
    console.log('AI Loop 开始');
    while (!needStop()) {
        round++;
        console.log(`\n 第${round}轮`);

        // 1. 生成
        const { text, token } = await gen();
        totalToken += token;

        // 2. 记录重复情况(用于 sameStop)
        sameCount = (text === lastText) ? sameCount + 1 : 0;
        lastText = text;

        // 3. 校验
        const { pass, fail } = await check(text);
        if (pass) {
            console.log(`✅ 全部规则通过,循环结束`);
            console.log(`最终文案:\n${text}`);
            return;
        }
        console.log(`❌ 不满足规则: ${fail.join(', ')},继续下一轮...`);
    }
    console.log(`\n⛔ 触发刹车强制停止,最后一次内容:\n${lastText}`);
}

runLoop();

逐行拆解:每个变量、每个函数都在做什么

1. 客户端初始化(OpenAI兼容接口)

arduino 复制代码
const client = new OpenAI({
    apiKey: process.env.DEEPSEEK_API_KEY,
    baseURL: process.env.DEEPSEEK_BASE_URL
});

这里使用了 openai 库,但 baseURL 指向了 DeepSeek 的接口。因为 DeepSeek 兼容 OpenAI 的 API 格式,所以我们能用同一套代码调用 DeepSeek 模型。环境变量中存储了密钥和地址。


2. 控制边界 ------ limit 对象

yaml 复制代码
const limit = {
    maxRound: 5,
    maxToken: 2000,
    sameStop: 2
};

这三个字段是循环的"刹车系统" ,防止程序失控:

  • maxRound:最大尝试轮数。避免因为规则永远无法满足而陷入死循环。
  • maxToken:总 token 消耗上限。调用 API 是按 token 计费的,设定预算可以控制成本。
  • sameStop:连续多少次生成结果完全相同时强制停止。有时候AI会卡在同一个错误输出上,这个条件能及时止损。

3. 任务定义 ------ task

arduino 复制代码
const task = {
    desc: "小红书美妆文案",
    rules: ["标题带数字", "正文<300字", "大爆款", "结尾有行动号召"]
};
  • desc 是目标描述,会注入到生成 prompt 中。
  • rules 是校验规则列表,既会注入生成 prompt(让AI按规则写),也会单独用于检查。

4. 全局状态变量

ini 复制代码
let round = 0, totalToken = 0, lastText = "", sameCount = 0;
  • round:当前轮次。
  • totalToken:累计消耗的 token 数。
  • lastText:上一轮生成的文案文本,用于比较是否重复。
  • sameCount:连续重复的次数。

5. 刹车函数 needStop()

matlab 复制代码
function needStop() {
    return round >= limit.maxRound ||
           totalToken >= limit.maxToken ||
           sameCount >= limit.sameStop;
}

它返回一个布尔值,只要满足任意一个刹车条件,循环就终止。这是 Loop 的"退出检查点"。

注意:原代码中 totalToken >= limit.matToken 应为 maxToken,是个小笔误,大家写代码时要留意。


6. 生成函数 gen() ------ 生产者

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
    };
}
  • 它向 DeepSeek 发送一个 生成 prompt ,要求 AI 按照 task.rules 写文案。
  • 返回一个对象,包含 text(文案内容)和 token(本次消耗的 token 数)。
  • console.log 会打印出每次的 token 数和原始输出,方便调试。

7. 校验函数 check(text) ------ 检查者

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());
}

这是整个 Loop 的自我检验环节。

  • 它把生成的文案和规则一起发给 AI,要求 AI 扮演"质检员"。
  • 强制要求 AI 只输出 JSON ,格式为 {pass: true/false, fail: ["规则1", "规则2"]}
  • 我们解析 JSON 得到 passfail,从而知道文案是否达标,以及哪些规则没通过。

为什么让 AI 自己检查自己?

因为规则是自然语言描述的(如"标题带数字"),传统代码很难直接判断。而 LLM 本身具备语义理解能力,让它当检查员是最自然的选择。这其实是 LLM 的自我反思(Self-Reflection) 技术的简化版。


8. 主循环 runLoop()

javascript

javascript 复制代码
async function runLoop() {
    console.log('AI Loop 开始');
    while (!needStop()) {
        round++;
        console.log(`\n 第${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(`最终文案:\n${text}`);
            return;
        }
        console.log(`❌ 不满足规则: ${fail.join(', ')},继续下一轮...`);
    }
    console.log(`\n⛔ 触发刹车强制停止,最后一次内容:\n${lastText}`);
}

流程图如下:

text

markdown 复制代码
开始 → 检查刹车 → (未刹车) → 轮次+1 → 生成文案 → 累加token → 判断是否与上一轮相同 → 更新sameCount → 校验文案 → 通过? → 结束并输出
                                                                              ↓ 不通过
                                                                        打印失败规则,回到循环开头

关键点:

  • 每轮都会生成全新的文案(不是基于上一轮修改,而是重新生成),这样能保证多样性,但也会增加 token 消耗。
  • 校验结果 fail 数组会打印出来,让我们知道具体哪里不达标,方便人工干预(也可以进一步把失败规则反馈给生成 prompt,实现"带反馈的生成",但本例未做)。
  • 如果校验通过,立即 return 退出,输出最终文案。
  • 如果触发刹车,则输出最后一次内容并退出。

循环的自我检验(Self-Check)过程详解

这是 AI Loop 最精髓的部分。我们来看一个具体例子:

第一轮生成:

"美妆新手必看!这些口红颜色超显白......"(标题有数字吗?没有 → 不满足规则"标题带数字")

校验函数收到文案后,AI 检查员返回:

json 复制代码
{"pass": false, "fail": ["标题带数字"]}

于是循环继续。

第二轮生成(可能因为随机性,这次带数字了):

"3支必入口红,黄皮也能轻松驾驭......"(正文可能超过300字?检查员说"正文<300字"未通过)

校验返回:

json 复制代码
{"pass": false, "fail": ["正文<300字"]}

继续循环。

第三轮生成,AI 终于写出了满足所有规则的文案,校验返回 {"pass": true, "fail": []},循环结束。

这个过程中,AI 既是作者 ,又是审稿人,不需要我们手动检查每一轮,完全自动化。


为什么说 AI Loop 解放了人,但也带来"Token大爆炸"?

优势:

  • 将重复的"生成→检查→修改"工作完全自动化,我们只需要设定目标和规则。
  • 可以并行运行多个 Loop,快速产出高质量内容。
  • 适用于各种有明确规则的文本生成任务(广告文案、产品描述、代码生成、邮件撰写等)。

缺点:

  • Token 消耗会成倍增加。假设平均每轮消耗 500 token,跑 5 轮就是 2500 token,比一次生成贵 5 倍。
  • 如果规则设置不合理,可能永远无法通过,全靠刹车机制兜底。
  • AI 校验本身也可能出错(比如误判),导致 Loop 提前结束或无限循环。

所以,设计 Loop 时要精心设置边界:最大轮数、预算上限、重复停止条件,三者缺一不可。


如何改进?让 Loop 更聪明

  1. 反馈式生成 :把上一轮 fail 的规则传回给生成 prompt,比如"上次缺少标题数字,这次请加上"。这样能加速收敛。
  2. 动态调整规则:如果连续几轮都卡在同一个规则,可以适当放宽要求(比如字数从"<300"改为"<350")。
  3. 多模型协作:生成用创意模型,校验用严谨模型(如 GPT-4 校验,Claude 生成),各取所长。
  4. 记录历史:保存每一轮的文案和校验结果,方便分析 Loop 行为。

结语:你写的不是代码,是AI的工作流

Loop 是计算机科学最基础的概念,但在 AI 时代被赋予了新的生命。AI Loop 不仅仅是循环,而是一种自主迭代的工作流------让 AI 自己生成、自己检查、自己完善,直到满足人类设定的目标。

下次当你还在手动改 Prompt 时,不妨想一想:能不能把这件事交给一个 Loop?

700 万人看过的那条推文说:"别再给 AI 写提示词,你应该去设计 Loop。"

今天,你设计 Loop 了吗?

相关推荐
说了很好1 小时前
逐行注释DDPM源码:正向加噪、逆向去噪、MSE损失全流程复现
人工智能
用户556918817531 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
Dilee1 小时前
Spring AI 1.1.7 接入 MCP:Filesystem Server 最小 Demo
人工智能·后端
Token炼金师1 小时前
大模型推理超参数原理详解
人工智能
Token炼金师1 小时前
大模型训练超参数:从Loss曲面到收敛策略的底层逻辑
人工智能
后端小肥肠1 小时前
Skill 囤了一堆却用不起来?我用 Codex 写了个整理神器
人工智能·agent
魏祖潇1 小时前
从"会聊天"到"能干活":用 OpenCode 给自己找个 AI 搭子
人工智能
子兮曰1 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端