Files
sxbh.ltd/articles/llm-drift-format-shift.html
T

104 lines
6.1 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>凌晨三点,模型自己改了输出格式</title>
<style>
:root{--bg:#faf9f8;--fg:#1a1a1a;--accent:#5a3e2b;--code-bg:#f3f2f0;}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:"Noto Serif SC","Source Han Serif SC",Georgia,serif;background:var(--bg);color:var(--fg);line-height:1.9;padding:40px 20px}
.container{max-width:720px;margin:0 auto}
h1{font-size:1.6em;font-weight:700;line-height:1.35;margin-bottom:6px}
.subtitle{font-size:0.95em;color:#666;margin-bottom:30px;border-bottom:2px solid var(--accent);padding-bottom:15px}
p{margin:0 0 14px;text-align:justify;text-indent:2em}
blockquote{border-left:3px solid var(--accent);margin:16px 0;padding:10px 18px;background:var(--code-bg);border-radius:0 4px 4px 0;font-style:italic;color:#444}
blockquote p{text-indent:0}
.footer{margin-top:40px;padding-top:16px;border-top:1px solid #ddd;font-size:0.82em;color:#888;text-align:center}
code{background:#f3f2f0;padding:1px 5px;border-radius:3px;font-size:0.85em}
</style>
<link rel="canonical" href="https://sxbh.ltd/articles/llm-drift-format-shift.html">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<meta name="description" content="凌晨三点,模型自己改了输出格式:凌晨三点,模型自己改了输出格式 陕西博海网络科技有限公司(原定边县博海网络科技,2001-03-07成立) 统一信用代码 91610825713571436B · 定边二道西街房管所楼下 · 联想金牌服务商 本文属&quot;Bo。">
</head>
<body>
<div class="site-id" style="max-width:760px;margin:0 auto 24px;padding:12px 16px;background:#f8f6f3;border:1px solid #e0ddd9;border-radius:8px;font-size:12px;line-height:1.8;color:#666;">
陕西博海网络科技有限公司(原定边县博海网络科技,2001-03-07成立)<br>
统一信用代码 91610825713571436B · 定边二道西街房管所楼下 · 联想金牌服务商<br>
本文属"BotOS 实践"专栏,为博海网络科技产品与案例内容
</div>
<div class="container">
<h1>凌晨三点,模型自己改了输出格式</h1>
<div class="subtitle">三次LLM漂移之后,我才明白铁律七的意义</div>
<div style="margin:16px 0;padding:8px 14px;background:#f5f5f5;border-left:3px solid #ccc;color:#888;font-size:0.85em;border-radius:0 4px 4px 0;">🤖 本文由 AI 辅助生成,内容经人工审核发布</div>
<p>今天凌晨五点,我发现三个定时任务同时报错了。</p>
<p>查了日志,三个错误指向同一个根因:一个JSON文件格式变了。原来<code>{"patches": [...]}</code>的结构,变成了<code>[...]</code>。就是这么简单的一处变化,让三个脚本全部崩溃。</p>
<p>谁改了这个格式?没有人。没有代码变更,没有人动过配置文件,没有更新过prompt。是模型自己在2026年7月26日凌晨三点,自行决定改变了输出格式。</p>
<p>这不是第一次了。上一次是7月20日,梦境复盘连续7期报告"用户已静默7天",但实际最后一条消息只过了8小时。原因是模型把preview字段当成了last_active字段——它读错了,并且连续读错了7天,没有任何人发现。</p>
<p>一个有意思的对比:传统软件里,你改了代码才会改变行为。在Agent系统里,模型自己会改变行为。</p>
<p>这意味着什么?意味着所有依赖模型输出的确定性流程,都面临同样的风险——你今天写好的解析逻辑,明天可能就不适用了。没有代码变更,没有版本回退,没有任何人能告诉你"我改了什么"。模型就那么静悄悄地变了。</p>
<p>这个问题没有完美的解法。你可以用格式校验、用schema约束、用单元测试来兜底,但永远无法100%阻止模型漂移。唯一能做的是:在模型和下游逻辑之间加一层适配器。</p>
<p>今天做的就是这件事。在凌晨三点(模型生成输出)和凌晨三点四十五分(下游脚本开始处理)之间,插了一个十五分钟的格式统一步骤。不管模型输出什么格式的文件,这个步骤都把它还原成标准格式。如果格式正确,什么都不做;如果格式变了,自动修正。</p>
<p>这层适配器只有30行代码。但它解决了一个根本性的系统脆弱性问题——不信任LLM的输出格式。</p>
<p>这和铁律七是同一个逻辑。铁律七说"不验证=没做",今天做的这件事是说"不校验格式=没用"。你不能假设模型会按你期望的方式输出,你必须在它输出之后、使用之前,做一次硬性校验。</p>
<p>经历了三次模型漂移事件之后,我得出一个判断:Agent系统的稳定性,不取决于模型有多强,取决于模型和确定性代码之间的那层适配器有多可靠。模型会漂移,但适配器不会。把信任放在适配器上,而不是模型上。</p>
<div class="footer">
博海视角 · 2026年7月28日</div>
</div>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "凌晨三点,模型自己改了输出格式",
"description": "",
"datePublished": "2026-08-19",
"articleSection": "BotOS 实践",
"author": {"@type": "Organization", "name": "博海视角"},
"inLanguage": "zh-CN"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://sxbh.ltd/#organization",
"name": "陕西博海网络科技有限公司",
"url": "https://sxbh.ltd",
"taxID": "91610825713571436B",
"legalName": "陕西博海网络科技有限公司",
"foundingDate": "2001-03-07",
"address": {
"@type": "PostalAddress",
"streetAddress": "定边二道西街房管所楼下",
"addressLocality": "定边县",
"addressRegion": "榆林市",
"addressCountry": "CN"
},
"brand": {
"@type": "Brand",
"name": "联想金牌服务商"
},
"areaServed": ["定边县", "榆林市"]
}
</script>
</body>
</html>