一、什么是 AI Loop?先读懂核心思想
1. 行业现状:放弃手工调 Prompt,循环才是标准答案
海外一条 700w 浏览量的技术推文提出核心观点:低效的手动调试提示词已经过时,AI 工程的核心是设计自动化 Loop 循环。就连 Claude Code 作者也公开表示,日常开发几乎不手动反复改 Prompt,全部依靠循环自动化迭代。
2. Loop 底层本质
循环是计算机最基础三大要素:起始点、重复动作、终止条件。
- 传统程序循环:批量处理 Excel、文本,替代人工重复操作;
- 大模型训练本身就是巨型 Loop:投喂数据→计算损失→微调参数→重复万亿次,最终形成具备对话能力的 LLM(DeepSeek、Qwen、Claude 通用逻辑);
- 普通人使用 AI 的原始模式(人工循环):写 Prompt→生成内容→手动检查缺陷→修改提示词重新生成,全程人工盯守,浪费大量时间。
3. AI Loop 标准闭环
把人工流程交给代码自动执行,固定两步核心逻辑:
completion:AI 生成目标内容check:AI 自动校验内容是否符合规则循环往复,满足终止条件后自动退出
4. AI Loop 优缺点
- 优势:完全解放人力,无需人工反复刷新、修改提示词,批量标准化输出内容
- 缺点:两轮 LLM 调用会持续消耗 Token,存在 Token 消耗暴涨、成本上升问题,因此代码中必须设置多重刹车限制
二、完整前置依赖与环境配置代码解析
javascript
运行
const { OpenAI } = require('openai');
const dotenv = require('dotenv');
dotenv.config();
// 初始化DeepSeek大模型客户端
const client = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: process.env.DEEPSEEK_BASE_URL
});
-
依赖说明
openai:通用 OpenAI 兼容 SDK,DeepSeek、通义千问、Claude 等兼容 OpenAI 接口的模型都能复用此包dotenv:读取项目根目录.env文件,存放 API 密钥、接口地址,避免硬编码密钥泄露
-
逻辑流程
dotenv.config()加载环境变量;- 实例化客户端,填入 DeepSeek 专属密钥与接口地址,后续所有 AI 请求都通过
client发起。
三、循环边界控制:刹车配置 limit 对象
javascript
运行
// Loop 可控的边界,三重保险防止死循环/超预算
const limit = {
maxRound: 5, // 最大迭代轮次,最多循环5次强制停止
maxToken: 2000, // 总Token消耗上限,超过直接终止
sameStop:2 // 连续2轮输出完全相同,判定模型卡死,停止循环
}
三大终止保险,解决 Loop 两大致命问题:
- 死循环风险:
maxRound限制最大迭代次数,防止规则永远不满足导致无限调用模型; - 成本失控风险:
maxToken累计统计所有请求 Token,超出预算直接终止; - 模型无效迭代:
sameStop连续多轮输出一模一样文案,代表模型进入重复输出,无需继续循环。
四、任务标准化配置 task 对象
javascript
运行
const task = {
desc: "cs2技巧文案", // 任务核心目标
rules: ["标题带数字", "正文<300字", "上魔王S", "结尾有行动号召"]// 校验规则列表
}
解耦业务与循环逻辑,统一管理任务信息:
desc:告诉 AI 本次需要生成什么内容;rules:校验标准数组,生成、校验函数会自动读取该数组拼接规则,修改需求只需改动此处,不用修改生成、校验代码。
五、全局状态变量:记录循环运行数据
javascript
运行
let round = 0, totalToken=0, lastText="", sameCount=0;
变量作用拆解:
round:记录当前循环轮次,每次循环自增;totalToken:累加每一轮 AI 调用消耗的 Token,用于预算刹车判断;lastText:保存上一轮生成的文案,用于对比是否重复;sameCount:连续重复文案计数器,达到limit.sameStop则终止。
六、终止判断函数 needStop ():统一刹车逻辑
javascript
运行
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: `假如你是一位cs2玩家,
写一篇${task.desc}, 严格遵守:
${task.rules.join("、")}, 只输出文案
`
}]
});
// 打印本轮消耗token + 生成文案
console.log(res.usage.total_tokens,
res.choices[0].message.content);
// 返回结构化数据:文案文本、本轮消耗token
return {
text: res.choices[0].message.content.trim(),
token: res.usage.total_tokens
}
}
-
async异步函数:大模型接口为网络请求,必须异步等待响应; -
请求参数:指定 DeepSeek 轻量化模型
deepseek-v4-flash,传入整合后的任务提示词; -
数据处理:
.trim()去除首尾换行空格,避免空白字符误判重复;- 提取本次调用消耗 Token,返回给循环主函数做累计统计;
-
输出结构化对象,方便主函数解构读取文本与 token。
八、校验函数 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:数组}
`
}
]
});
// 解析模型返回的JSON字符串为JS对象
return JSON.parse(res.choices[0].message.content.trim())
}
AI Loop 核心灵魂:用大模型校验大模型的输出
-
入参:上一步
gen生成的完整文案; -
提示词约束:强制模型只返回标准 JSON,固定格式:
pass:布尔值,true = 全部规则达标;false = 存在违规项fail:数组,存放不满足的规则名称;
-
JSON.parse()将模型返回文本转为 JS 对象,程序可直接读取校验结果,实现自动化判断,无需人工肉眼检查。
九、主循环函数 runLoop ():完整 AI 闭环调度核心
javascript
运行
async function runLoop() {
console.log('AI Loop 开始');
// 循环开关:未触发任何刹车条件就持续迭代
while(!needStop()) {
round++;
console.log(`\n 第${round}轮`);
// 1. 调用生成函数,解构获取文案、本轮token
const { text, token } = await gen();
// 累计总消耗token
totalToken += token;
// 判断是否和上一轮文案完全一致,更新重复计数器
sameCount = text === lastText ? sameCount + 1 : 0;
// 保存当前文案,用于下一轮对比
lastText = text;
// 2. 调用AI自动校验
const { pass, fail } = await check(text);
if (pass) {
// 全部规则通过,直接结束循环,输出成品文案
console.log(`全部规则通过,循环结束`);
console.log(`最终的文案: ${text}`)
return
}
// 打印不满足的规则,进入下一轮迭代
console.log(`不满足${fail}`)
}
// while循环跳出代表触发刹车限制,输出最后一轮生成内容
console.log(`\n 触发刹车强制停止,最后一次内容:${lastText}`)
}
运行结果
完整一轮循环执行流程
-
进入
while循环,轮次 + 1; -
调用
gen()生成文案,累加 Token 消耗; -
对比当前与上一轮文本,更新重复计数;
-
调用
check()让 AI 自动质检; -
分支判断:
- 校验通过:输出成品,
return终止整个函数; - 校验失败:打印缺失规则,回到 while 开头执行下一轮;
- 校验通过:输出成品,
-
若循环触发 maxRound/maxToken/sameStop 任一限制,跳出 while,输出最后一次生成内容。
十、启动入口
javascript
运行
runLoop();
调用主循环函数,自动开启整套 AI 生成 - 校验迭代闭环。
十一、代码整体业务流程总结
- 加载环境变量,初始化 DeepSeek 模型客户端;
- 配置循环限制、业务任务规则;
- 启动主循环;
- 每一轮:AI 生成文案 → 统计 Token、判断重复 → AI 自动校验规则;
- 校验通过:直接输出成品,流程结束;
- 校验失败:自动进入下一轮重新生成;
- 达到最大轮次 / 预算 / 连续重复:强制终止,返回最后生成内容。