AI 工具实战:部署多 Agent 协作引擎,打造拒绝废话的“自我审查流水线”
单一的 AI 总会偷懒。用 PHP 搭建一个“打工人+无情总监”的双 Agent 对抗网络。让 AI 自己审核、打分、打回重写,直到输出完美的硬核文案再入库。
不要相信 AI 的第一次输出。在工业化生产中,没有“对抗”与“质检”的代码,产出的全都是工业垃圾。
1. 为什么你的 AI 依然有“塑料味”?
即使你用了极度严苛的结构化 Prompt,大模型在连续工作时依然会发生“退化”:它会不自觉地加入诸如“总而言之”、“不可思议”等廉价的感叹词。
解法:引入 Agent 对抗网络 (Actor-Critic 架构)。 我们要在服务器后台同时拉起两个 AI 进程:
- Agent A (写手): 负责生成初步脚本。
- Agent B (总监): 拥有极其刻薄的性格设定,专门挑刺。它会对 A 的稿子进行评分(0-100分)。 如果分数低于 85 分,B 会列出修改意见,并强行打回给 A 重新写。直到合格,才允许进入你的 FFmpeg 转码流水线。
2. 核心魔法:PHP 双核引擎对抗脚本
在你的服务器后台(比如和之前的 cyber_editor.php 放一起),新建一个 agent_director.php。它通过循环调用 API,在服务器内上演一场“剧本围读”。
<?php
// 书或术:双 Agent 对抗质检引擎 (agent_director.php)
$api_key = "sk-你的API密钥";
$api_url = "[https://api.openai.com/v1/chat/completions](https://api.openai.com/v1/chat/completions)";
// 封装一个基础的 API 调用函数
function call_llm($messages, $temperature = 0.7) {
global $api_key, $api_url;
$data = ["model" => "gpt-4o", "messages" => $messages, "temperature" => $temperature];
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json", "Authorization: Bearer $api_key"]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
return $response['choices'][0]['message']['content'];
}
$topic = "用博弈论解释为什么烂内容能充斥社交网络";
// ==========================================
// 🥊 第一回合:Agent A (初稿写手) 上场
// ==========================================
$writer_system = "你是一个极客编剧,请输出关于【{$topic}】的纪录片旁白。不要废话,语言冷酷。";
$messages_A = [
["role" => "system", "content" => $writer_system],
["role" => "user", "content" => "开始写初稿。"]
];
echo "🤖 Agent A 正在拼命写初稿...\n";
$draft = call_llm($messages_A, 0.8);
// ==========================================
// ⚖️ 第二回合:Agent B (无情总监) 质检
// ==========================================
$max_retries = 3; // 最多打回重写 3 次
$pass_score = 85; // 及格线
for ($i = 1; $i <= $max_retries; $i++) {
$critic_system = "你是一个脾气暴躁、极度讨厌网络废话的硬核内容总监。
请审核以下稿件。检查标准:1. 是否有废话;2. 逻辑是否够深;3. 听起来是否有压迫感。
请直接在第一行输出打分(格式:【得分: XX】),第二行开始输出刻薄的修改意见。";
$messages_B = [
["role" => "system", "content" => $critic_system],
["role" => "user", "content" => "这是初稿,请无情打分:\n" . $draft]
];
echo "🧐 Agent B 正在进行第 {$i} 轮残酷审查...\n";
$feedback = call_llm($messages_B, 0.2); // 低温度,确保评判标准严苛
// 用正则提取分数
preg_match('/【得分:\s*(\d+)】/', $feedback, $matches);
$score = isset($matches[1]) ? intval($matches[1]) : 0;
echo "📊 本轮得分:{$score} 分\n";
echo "💬 总监意见:\n{$feedback}\n\n";
if ($score >= $pass_score) {
echo "✅ 质检通过!准许进入 FFmpeg 与 TTS 物理流水线。\n";
break; // 跳出循环,保存稿件
} else {
echo "❌ 质检不合格!稿件已被打回。\n";
if ($i == $max_retries) {
echo "💀 重试次数耗尽,此选题作废,引擎已停止。\n";
exit;
}
// ==========================================
// 🔄 第三回合:Agent A 接收意见重写
// ==========================================
echo "🤖 Agent A 正在根据总监意见流泪修改...\n";
$messages_A[] = ["role" => "assistant", "content" => $draft]; // 记录上一轮回答
$messages_A[] = ["role" => "user", "content" => "总监打了低分,意见如下:\n{$feedback}\n请严格按照总监要求,彻底重写!"];
$draft = call_llm($messages_A, 0.6);
}
}
// 4. 将合格的最终稿件自动生成为 .md 文件
$filename = "auto-passed-" . time() . ".md";
file_put_contents(__DIR__ . "/sy/posts/ai-tools/" . $filename, $draft);
echo "🚀 终极硬核稿件已入库:{$filename}\n";
?>
3. 从流水线到“自动化黑客帝国”
不要小看这段不到 100 行的 PHP 代码。它实际上是 OpenAI 的 Swarm 或 微软 AutoGen 的极简底层逻辑。
以前,你是那个每天对着电脑挑错的“包工头”。 现在,你的服务器里不仅有了不知疲倦的工人(Agent A),还免费雇佣了一个绝对不会讲人情、标准比你还高的质检机器(Agent B)。
将它和你的 Crontab 定时任务结合,你不仅实现了 24 小时自动更新,你还实现了“质量的自动上锁”。只有经过机器左右互搏、反复绞杀留下的文字,才配出现在“书或术”里。