针对线上 LLM 的典型失败模式(上下文截断、工具调用死循环等)提供诊断框架和具体缓解方案,含可落地的代码步骤。
生产环境中的 LLM 失败方式很少会出现在基准测试排行榜上。当一个摘要任务悄悄丢失关键实体,或者一个 Agent 在格式错误的工具调用上无限循环时,你需要的是一套诊断框架,而不是一张新的模型卡片。本指南涵盖最常见的生产环境失败模式,提供可复现的具体步骤和可在当下实施的缓解方案。
Context Window 失效
最常见的静默失败是 context 截断。模型可能会忽略埋在长提示词中间的执行指令,或者跳过检索文档的整个章节。这通常是「中间丢失」效应与意外截断共同作用的结果。
诊断:记录提示词的确切 token 数量,并与模型的 context 限制进行比对。如果接近边界,部分提供商会无声地截断输入而不抛出错误。将系统指令移到 context 窗口的开头或结尾,并把关键约束保持在提示词的前 25% 或后 25% 以内。
缓解:对长文档进行分块并使用 map-reduce 模式。如果工作流需要单一的大型 context,请切换到支持更大窗口的模型。在 Oxlo.ai 上,DeepSeek V4 Flash 支持 1M context 窗口,Kimi K2.6 为高级推理和视觉工作负载提供 131K tokens。由于 Oxlo.ai 使用基于请求的定价,发送长提示词用于调试或检索不会随输入长度增加而增加成本。详见 https://oxlo.ai/pricing。
非确定性与可复现性
即使将 temperature 设为零,不同运行也可能产生不同输出,这取决于 logit 采样、硬件非确定性或提供商端的负载均衡。这使得回归测试变得困难。
诊断:固定随机种子,锁定 temperature 和 top_p,并记录完整 payload(包括确切的模型版本)。在多次运行中比对输出的哈希值。
缓解:如果提供商支持,设置一个确定性种子。对相同提示词实现语义缓存,这样不必为重复推理付费。对于集成测试,snapshot 可接受的输出范围而非精确字符串。
在 Oxlo.ai 上,你可以传递标准 OpenAI SDK 参数(如 seed 和 temperature)。由于该平台按请求次数收费而非按 token 收费,使用数十个提示词变体运行回归测试不会产生不可预测的 token 账单。这使得持续测试非确定性变得实际可行。
工具调用与 Function Calling
Function calling 失败通常分为三类:幻觉的参数名、不正确的工具选择,以及完全忽略工具而使用纯文本。
诊断:检查你发送的 schema。过度嵌套的对象、模糊的描述,或一次性提供二十个可用工具都会让任何模型困惑。将工具集缩减到仅当前轮次所需的内容。
缓解:在工具描述中添加 one-shot 或 few-shot 示例。当工作流阶段已知时,使用 tool_choice 强制调用特定函数。在执行前用 JSON schema 验证器校验参数。
import openai
client = openai.OpenAI(
base_url="https://api.oxlo.ai/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="qwen3-32b",
messages=[{"role": "user", "content": "What is the weather in Paris?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather. Example: {\"location\": \"Paris\", \"unit\": \"celsius\"}",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}}
)
Oxlo.ai 在其模型目录中支持 function calling,包括 Qwen 3 32B、GLM 5 和 Minimax M2.5 等 Agent 模型。API 完全兼容 OpenAI SDK,因此你现有的工具定义无需客户端更改即可迁移。
延迟与吞吐量瓶颈
高 time-to-first-token(TTFT)或慢的 token 间延迟会破坏用户体验。根本原因通常是模型规模与任务复杂度之间的不匹配。
诊断。将 TTFT 与总生成时间分开测量。如果 TTFT 高但 tokens 之后快速到达,你可能在提供商端排队或发送了过大的提示词。如果每个 token 都慢,说明模型对你的延迟预算来说实在太大了。
缓解。启用流式传输,让用户立即看到部分结果。对于路由或分类任务,使用更小的模型。把大型推理模型留给真正需要深度推理的步骤。
Oxlo.ai 在热门模型上无冷启动,并支持流式响应。对于延迟敏感的阶段,路由到 Oxlo.ai Coder Fast 或 DeepSeek V3.2。对于重型推理,使用 DeepSeek R1 671B MoE 或 Kimi K2 Thinking。扁平化的按请求定价意味着你可以缓存常规调用,只为困难的调用付费,而无需承担输入长度的惩罚。
结构化输出与 JSON Mode
JSON mode 失败很容易发现——输出不可解析——但原因往往很隐蔽。流式传输和 JSON mode 在部分提供商上可能冲突。带有可选 union 的复杂嵌套 schema 也会增加失败率。
诊断。暂时禁用流式传输,用 response_format={"type": "json_object"} 测试。将 schema 简化为仅包含必需的扁平字段。如果模型仍然发出 markdown 围栏,添加一条禁止使用它们的系统指令。
缓解。请求更小的对象并在客户端组装。如果需要嵌套结构,先请求扁平记录数组,然后重新映射。
response = client.chat.completions.create(
model="llama-3.3-70b",
messages=[
{"role": "system", "content": "You are a helpful assistant. Output valid JSON only, with no markdown fences."},
{"role": "user", "content": "Extract the name and email from: Contact us at support@oxlo.ai"}
],
response_format={"type": "json_object"}
)
如果某个模型在复杂 schema 上表现不佳,Oxlo.ai 允许你切换到另一个模型(如 Llama 3.3 70B 或 Kimi K2.5),而无需重写客户端代码。API 在所有 45+ 模型上保持完全 OpenAI 兼容。
有时问题不在提示词或代码,而在模型本身。模型可能在特定推理模式上达到瓶颈,或者其延迟和成本结构不再适合该任务。
决策框架。按复杂度和延迟需求对任务进行分类。简单的分类或提取任务不需要 400B 参数模型。然而,长期 Agent 任务需要强大的 chain-of-thought 和工具 adherence。
Oxlo.ai 在七个类别中托管了 45+ 模型,从 embeddings 和视觉到代码和音频。由于该平台使用基于请求的定价,从轻量模型切换到 GLM 5 或 DeepSeek R1 等重型推理模型无需围绕 token 计数重新架构你的成本模型。无论提示词长度如何,你都按请求付费,这使得在生产环境中 A/B 测试模型在财务上可预测。如需当前计划详情,请访问 https://oxlo.ai/pricing。