ChatGPT 插件上线后暴露多轮调用断点
作者在真实购买对话中发现,用户补充邮编时若未再次提及插件,该轮对话可能无法调用报价工具。其修复方案是在卡片内采集邮编,由组件直接调用工具完成报价。
AI 深度解读
一个能把设计图变成海报、帆布画和马克杯的 ChatGPT 插件,通过审核后,仍在一次真实对话里暴露了五个问题:追问后工具失联、模型乱加配图、卡片更新不生效,以及运费和商品可售判断出错。
作者用越南顾客购买马克杯的流程,把这些问题串了起来。对做 MCP 集成的程序员,这篇最有用的提醒是:审核通过只能说明部分检查过关,用户能不能从提需求一路走到拿到报价,还得完整跑一遍。
用户回答了追问,工具为什么反而没被调用
第一次交互正常:生成设计、生成打印预览,报价工具提示需要越南邮编,ChatGPT 随即向用户追问。作者回复 100000,模型却表示无法在聊天里可靠计算含配送的准确价格。
服务器没收到任何请求。
按作者这次测试,插件工具只在用户带有 @mention 的那条消息中可用。用户单独回复邮编,没有继续提及插件,模型便没有工具可调。作者改成 @MyImage2Life my postcode is 100000 后,几秒钟就拿到了价格。
这里要分清:这是作者观察到的运行行为,原文没有给出适用于所有 ChatGPT、Claude 或 MCP 客户端的规则。
他们的修复分成两层。卡片自己提供邮编输入框,由 widget 直接调用报价工具,不再等模型接下一轮对话;文本结果则明确要求模型提醒用户,回复邮编时要以插件 mention 开头。
必须补齐的信息,尽量让卡片自己收集并完成后续操作。
对前端开发者,这其实是交互状态归谁管理的问题。既然卡片已经拿到了预览数据,就可以承接邮编输入和报价请求,减少流程对下一轮模型行为的依赖。
卡片已经显示真图,为什么还会出现假预览
作者的工具已经生成设计,卡片里也显示了真实打印预览,ChatGPT 却额外从图库找了一张图,标成示意预览。下一轮,它又从电商平台找来一张。
这对打印商品尤其麻烦。用户需要确认的是实际会印出来的设计,额外图片却可能让人误认成成品效果。
作者在服务端指令中补了一条约束:不要添加网络图片,也不要描述示意图,因为卡片已经展示真实设计。此后观察到的回答就只剩文字和卡片。原文没有提供测试次数,不能据此认定一句提示就能永久杜绝这类行为,但它说明了指令应明确交代展示内容的来源和边界。
卡片本身还有另一层问题:作者上线带邮编输入框的新版本后,结构化内容已经更新,ChatGPT 渲染的 HTML 却仍是旧版。
按作者的排查,模板会按 ui:// 资源 URI 缓存。他换了新 URI,同时保留旧地址的服务。原因是已发布的工具定义仍指向旧地址,要等更新后的定义通过自动检查,引用才会切换。
因此,更新 widget 不能只看 HTML 是否部署成功,还要核对工具定义引用的 URI。原文没说明缓存时长,也没提供主动失效的办法。
运费接口拒绝报价,不等于整个国家不能配送
作者的打印网络报价 API 曾对日本、越南、印度和中国返回「目的地没有可用配送选项」。网站把它直接翻成了「你所在的国家不可用」。
后来发现,同一个报价请求,加上邮编就能返回价格。
作者对 231 个国家做了带样例邮编和不带邮编的比较,其中 9 个国家的结果受邮编影响,而且加入邮编没有让结果变差。
这是全文最明确的一组实测数据。它揭示的不是这些国家的普遍配送政策,而是作者所接报价服务的一种行为:接口中的可选字段,也可能影响业务判断。字段可以不传,不代表缺少它时就能得到足够可靠的结论。
他们随后用各国样例邮编计算起价和可售状态,只在确认拒绝时显示不可用;结果不确定,就暂不展示,避免错误劝退用户。样例邮编支撑的是国家层面的初步展示,原文没有证明它能代表该国所有地址。
另一个调整发生在推荐之前。商品可售性不仅因国家不同,也可能因尺寸不同。搜索工具因此增加了可选国家参数,返回当地可配送的商品、以当地货币展示的起价,以及无可配送结果时的替代选项。指令也要求尽早询问国家,避免先推荐、后告知买不了。
我的判断
作者最有价值的做法,是把「工具执行成功」和「顾客完成任务」分开验证。一次生成成功、一次报价成功,都无法覆盖追问、页面缓存、目的地限制这些衔接处。
让 widget 承担确定性的补信息步骤,我认为比完全依赖模型追问更稳妥,但前提是客户端允许卡片直接调用相应工具,团队也能维护这部分交互。原文没有比较开发成本和整体完成率,这仍是工程经验,不是经过对照实验的最佳方案。
同样,禁止补充网络图片解决了作者观察到的问题,却不能代替商品预览本身的校验。跨国家测试也值得借鉴,但 231 国的结果只对应这套打印网络,不能外推到其他物流服务。
作者说同一服务器也能用于 Claude 和其他 MCP 客户端,但没有报告这些客户端上的完整测试结果。迁移时,工具是否持续可用、卡片如何加载,都需要重新确认。
能拿来做什么
- 做 ChatGPT MCP 卡片时,把邮编等必填信息的输入和后续调用接成完整流程,并测试用户只回复一个值时能否继续。
- 更新 widget 时,同时检查
ui://URI、工具定义引用和实际渲染版本;切换资源地址期间保留仍被引用的旧资源。 - 在 Node 服务中封装第三方报价 API 时,先比较可选字段缺失和补齐后的结果,再决定能否向用户显示「不可用」。
- 提交审核前,用一个自己不熟悉的国家跑完推荐、预览和报价流程;如果商品受地区限制,就在推荐前获取国家信息。