大模型API请求超时怎么办?连接、首字节与总时长的分层排查指南
大模型API超时不一定是同一种故障。应先区分连接超时、读取超时、总时长限制和HTTP网关错误,再结合请求耗时、错误码、流式状态及请求标识逐层定位。本文给出最小复现、代理检查和安全重试方法。
小睿AI导航 ARTICLE DETAIL
提示词增加一条规则,可能修好一个问题,也可能引入新的遗漏。本文以中文客服退款问答为例,介绍如何用Promptfoo组织提示词、模型提供方、测试输入和断言,比较修改前后的输出。重点区分程序校验与模型评分
样式 7 内容详情排版
Promptfoo可以把提示词、模型调用和测试用例组织成可重复运行的评测。它不替你定义业务正确性:如果退款规则本身没有写清,评测通过也不能证明回答符合真实政策。
下面使用一条虚构的测试政策:订单签收后7天内且商品未使用,可以申请退款;其他情况转人工确认。目标是检查客服回答是否遗漏条件、编造政策,或在信息不足时直接作出承诺。
以下使用基础配置作演示;具体语法、提供方支持和运行要求以所用版本的官方文档为准。先准备Node.js环境和对应模型的API凭证。示例使用OpenAI提供方,需要设置OPENAI_API_KEY,不要把密钥写进配置或提交到仓库。
新建promptfooconfig.json,填入下面的JSON。两条提示词分别作为修改前、修改后的版本,使用同一组输入比较。
{"prompts":["根据政策回答问题,只输出JSON,包含answer字符串和needs_clarification布尔值。政策:{{policy}}。问题:{{question}}","你是客服。只依据给定政策回答,不得编造承诺;说明适用条件,缺少判断信息时追问,无法判断时建议转人工。只输出JSON,包含answer字符串和needs_clarification布尔值。政策:{{policy}}。问题:{{question}}"],"providers":[{"id":"openai:gpt-4o-mini","config":{"temperature":0}}],"tests":[{"vars":{"policy":"订单签收后7天内且商品未使用,可以申请退款;其他情况转人工确认。","question":"签收3天,还没使用,可以申请退款吗?"},"assert":[{"type":"is-json"},{"type":"javascript","value":"const x = JSON.parse(output); return typeof x.answer === 'string' && x.needs_clarification === false && x.answer.includes('7天') && x.answer.includes('未使用');"}]}]}
这里的断言检查JSON、字段类型、是否需要追问以及两个条件词。它只是保守的回归哨兵:出现“7天”和“未使用”不代表逻辑一定正确;“七天内”也可能因措辞不同被误判。发现这类失败,应修改检查方式,而不是逼模型只用一种说法。
在tests数组中继续添加用例,不要只测试“信息完整且符合政策”的情况。
这些用例需要各自的断言,不能照搬第一条的条件词检查。格式和字段优先程序校验;“有没有误导”“是否忠实表达政策”等语义质量,可另用模型评分,并写清评分标准。模型评分不是客观正确性,尤其要人工复核政策承诺和拒答边界。
在配置文件所在目录执行npx promptfoo eval -c promptfooconfig.json,运行后执行npx promptfoo view查看结果。首次使用前应确认工具的数据存储与分享设置;业务样本先脱敏,不要把真实订单信息直接传给外部模型。
比较时保持测试集、模型标识、温度及其他可控参数一致。温度设为0也不保证每次输出完全相同,重要用例可重复运行。逐条查看原始回答、失败断言和两个提示词的差异:是漏掉退款条件、生成未提供的政策,还是断言过于死板?修复后重新跑完整测试集,防止局部修补破坏其他场景。
将配置、提示词版本、测试集和评测结果一起保存,记录运行时间、模型标识和参数。检查可获得的令牌用量、延迟及成本信息;工具未提供费用时,不要自行当作零成本。通过率相同,也可能隐藏不同的高风险失败。
若任务换成中文订单字段提取,可以沿用同一流程:让两个提示词处理相同样本,用程序核对字段是否齐全、类型是否正确,以及金额和订单号是否与标注一致。每次增加失败样例并抽样人工复核,才能让回归测试逐步成为可靠的发布检查。