demo 时工程师充当人工 guardrail,生产环境面临混乱输入、边界 case、无人监控等挑战,二者本质是开放域 vs 受控域的差异。
你有过这种感觉。周末花两天时间搭了一个 AI Agent,它预约会议、总结文档、写邮件——样样完美。周一给团队演示,大家赞不绝口。周三上线。
到了周四,它把日程邀请发到了错误的时区,总结的是上季度的报告而不是本季度的,起草的邮件开头是"Dear [PLACEHOLDER]"。
发生了什么?模型并没有一夜之间变笨。你的 Agent 存在一个生产环境差距——几乎每个 AI Agent 开发者都会遇到它。
这里有个让人不舒服的真相:Demo 能跑通是因为你是那个护栏。
演示时,你会挑选最完美的输入。你知道该喂给它哪份文档。当提示词偏离时你会实时纠正。你基本上是在给自己的 Copilot 当副驾驶。
生产环境不一样。生产环境意味着:
可以把这种情况想象成:在封闭赛道上试驾一辆车 vs. 把车钥匙交给高速公路上的一个青少年。同样的车,结果却截然不同。
在目睹了无数 Agent 失败(也包括我自己的)之后,规律可以归结为三个差距。
你的 Demo 用的是干净、格式良好的数据。生产环境中的用户会粘贴 HTML 乱码、转发 14 层嵌套引用的邮件链、上传截图而不是文本。
在 Agent 看到任何输入之前,先做输入验证:
def sanitize_input(raw_input: str) -> str:
# Strip HTML tags, normalize whitespace, truncate
import re
cleaned = re.sub(r'<[^>]+>', '', raw_input)
cleaned = re.sub(r'\s+', ' ', cleaned).strip()
if len(cleaned) > 4000:
cleaned = cleaned[:4000] + "... [truncated]"
return cleaned
仅此一项就能避免一半的奇怪失败。你的 Agent 不需要处理一个 200KB 的邮件链——它只需要有人把相关段落递给它。
在 Demo 中,你会盯着 Agent 的推理过程。在生产环境中,5 步中的第 3 步悄悄返回了垃圾数据,第 4 步在此基础上继续构建。到了第 5 步,输出已经 confidently wrong 了。
这就像玩传话游戏——只不过每个玩家都是一个永远不会说"我不确定"的 LLM。
用步骤级验证来修复:
def validate_step_output(step_name: str, output: dict) -> bool:
required_fields = {
"extract_date": ["date", "confidence"],
"lookup_contact": ["name", "email"],
"draft_email": ["subject", "body", "to"],
}
fields = required_fields.get(step_name, [])
for field in fields:
if field not in output or not output[field]:
log_warning(f"Step '{step_name}' missing '{field}'")
return False
return True
如果某一步骤验证失败,就停下来重试——或者升级给人工处理。不要让 Agent 在一个千疮百孔的基础上继续构建。
你的 Demo 是一次性的。生产环境是一个循环。用户做同样的任务 50 次,Agent 就犯同样的错误 50 次,因为根本没人告诉它。
最优秀的生产环境 Agent 都有一个极其简单的反馈机制:
def log_agent_run(run_id: str, task: str, result: dict, user_approved: bool):
entry = {
"run_id": run_id,
"task": task,
"result": result,
"approved": user_approved,
"timestamp": datetime.utcnow().isoformat()
}
# Append to your feedback store
append_to_log("agent_runs.jsonl", entry)
一旦你开始记录批准 vs. 拒绝,你就能发现哪些任务失败最多、哪些输入导致漂移、哪些提示词需要收紧。没有这些,你就是在盲目飞行——你的 Agent 从不从错误中学习。
在交付下一个 Agent 之前,逐一过一遍这个清单:
如果你的 Agent 通过了 Demo 但没通过这份清单,它还没有准备好上线。
这里有件事让我很意外:上面的修复跟模型一点关系都没有。它们不是提示词工程,也不是微调。它们是枯燥的、老派的软件工程——输入验证、错误处理、日志记录。
能在生产环境中工作的 Agent,不是那个拥有最花哨提示词的,而是被最平凡的基础设施包裹的那个。
你的 LLM 是引擎。但引擎不能自己驾驶。你仍然需要刹车、方向盘和仪表盘。
你的 AI Agent 经历过的最奇怪的生产环境失败是什么——而在 Demo 里却完美运行?请写在评论区——我收集这些就像收集战争故事一样。🪖