Skip to main content
做 LLM 应用会碰到一堆「确定性软件里不存在」的坑。下面这些,多数工程师至少会踩一次。

常见坑

1. 提示注入

用户输入里夹带「忽略之前的指令」一类内容,模型可能当真。 缓解:不要把原始用户输入塞进指令位;用结构化输出;system prompt 明确拒绝改角色/泄密;把用户内容包在明确标签里当数据;评估集里加对抗样例。

2. RAG 仍会幻觉

有检索上下文也可能编。模型擅长流利自信,不擅长说「不知道」。 缓解:强制「只根据上下文回答,没有就直说」;抽检 faithfulness;答案带可核对引用。提示能降幻觉,消不掉——换模型后更要复查。

3. Lost in the middle

长上下文中间段更容易被忽略。RAG 塞很多块时,最相关的可能正好在中间。 缓解:先重排;最终只留 3 到 5 块;重要内容放提示开头或结尾。

4. Token 计数翻车

字符数不等于 Token。代码、URL、非英文差更大。可能静默截断,把辛苦召回的上下文砍掉。 缓解:用对应分词器精确计数,再拼提示。

5. temperature 为 0 也不等于完全确定

GPU 浮点、节点、版本都会带来细微差异。别靠「永远以固定前缀开头」这种脆解析。 缓解:JSON mode / structured output / 带校验的解析,而不是字符串硬匹配。

6. 工具错误默认很安静

工具抛错被塞回消息后,Agent 可能当成功结果继续编。 缓解:工具单独测;重试;错误用明确前缀(如 TOOL_ERROR);system prompt 教模型怎么处理失败。

7. 限流与重试雪崩

突发打满额度后,重试挤成堆。用指数退避加抖动、并发上限、读限流头;多厂商可用统一代理做路由和 failover。

8. 多轮上下文污染

早期错误观察会进入后续推理,到后面错得自洽。 缓解:错误可回滚到 checkpoint;必要时重置会话并重新摘要目标;把内部推理和用户可见对话分开。