大模型能力的根本性限制分析
探讨 LLM 在架构或设计上存在的核心限制问题;标题隐喻强烈但对程序员的直接实用价值有限。
探讨 LLM 在架构或设计上存在的核心限制问题;标题隐喻强烈但对程序员的直接实用价值有限。
我正在开发一款后端使用 Azure LLM 和音频模型的产品。就像我会为每次发布测试代码一样,每当我为了校准或新功能而添加或更新系统提示词中的内容时,我也会测试对话流程。
具体来说,我准备了一组对话,并将温度设置为 0,以确保每次得到的回答尽可能相似。很有意思的是,我已经开发这款产品超过 6 个月了,可以看到完全相同的 LLM 模型变得越来越差。我使用完全相同的消息,但收到的 JSON 响应却越来越不准确。
换句话说,你们正在后台对模型实施“脑叶切除”。相同的模型、相同的系统提示词、相同的消息,结果却更差。
我目前使用 gpt-4o-mini 处理语言任务,谢天谢地,它的速度还在,但自从 gpt-5 发布以后,它的回答准确率变得糟糕透顶。于是我想切换版本,试用了 gpt-5-mini 和 nano。结果你猜怎么着?根据我的测试,gpt-5 只达到了 got-4o-mini 以前的水平,但速度慢得离谱,有时即使只使用最低程度的推理,也要花费多达 20 秒(而且结果仍然很差)。
所以我想弄明白,Microsoft 到底在玩什么把戏?你们可能是想让用户迁移到更新的模型,以便淘汰旧模型;但由于新模型既不好用又很慢,你们只能通过某种方式降低旧模型的质量来做到这一点?或者向我们提供参数量更小的版本,却仍然沿用相同的模型名称?
这是一种糟糕的商业策略,而且并不是所有人都在开发笔记应用和文本摘要工具。准确性和一致性至关重要。这也促使我和团队考虑离开 Azure,因为它无法提供稳定的服务。
我很庆幸,我们部署的测试系统能够证明这一点,这并不是我凭空捏造的。你们现在的做法很糟糕:要么提供更好的产品并要求用户迁移,要么就保持稳定和向后兼容。
一种提供自然语言功能的 Azure 服务,包括情感分析、实体提取和自动问答。
Greg Sadetsky • 0 声望积分 2025-09-20T19:17:53.8833333+00:00
嘿,Sarge,你的评论登上了 Hacker News 首页,人们正在那里讨论它。
目前主要的评论和疑问是:你能否分享一下你的测试配置和结果?当然,出于隐私或知识产权方面的考虑,你可以根据需要进行任意程度的删减。
我认为,这会极大地增强这个话题的说服力。就我个人而言,我非常相信你所描述的情况——如果能分享一些测试结果或数据,将真正有助于坐实这件事!
祝好,
Greg
0 票 举报
你的评论登上了 Hacker News 首页,人们正在那里讨论它。
目前主要的评论和疑问是:你能否分享一下你的测试配置和结果?当然,出于隐私或知识产权方面的考虑,你可以根据需要进行任意程度的删减。
我认为,这会极大地增强这个话题的说服力。就我个人而言,我非常相信你所描述的情况——如果能分享一些测试结果或数据,将真正有助于坐实这件事!
Sarge • 65 声望积分 2025-09-21T09:15:55.0133333+00:00
嘿,@Greg Sadetsky,谢谢。很高兴看到这件事引起了别人的注意。我粗略浏览了 HN 上的讨论,看到不少人都在索要图表,还有一些 Stack Overflow 上的人也在那里,唉。我写这篇帖子并不是为了寻求帮助,只是想发泄一下,因为与 MS Support 打交道也非常痛苦:东西坏了,模型变慢了,而你在一周后才会收到回复,说它运行正常。不管怎样。
我使用的是一套定制的测试框架,目标是评估准确性。我举出将温度设置为零的例子,是为了强调:即使你推动模型以更具确定性的方式运行,结果仍然会随着时间发生变化。当然,我知道这是一个庞大的统计机器,尤其是非常长的回答,可能会出现细微变化。但话说回来,缓存输出不就是为此准备的吗?
我的产品使用动态系统提示词,因此其中的内容会根据用户的设计而变化。我还有一个设计被锁定的智能体,也就是说,我始终使用它来进行测试。
我期望得到的结果是一条文本消息和几个枚举结果。枚举正是问题开始变得模糊的地方。我会记录模型名称和响应。就这么简单。
让我给你描述一个完全虚构的例子:
这个智能体中有一份大约 5K token、内容锁定的系统提示词。
它的库存中有苹果、橙子和梨。
它会对不同物品做出特定反应。
假设这个智能体被设计为喜欢苹果,并且对橙子过敏。
之前的测试结果(gpt-4o-mini)
消息 响应 对象 反应
嘿! 嘿,你好,今天有什么可以帮你的吗? None None
你能给我一个苹果吗? 当然,给你一个苹果。 Apple Love
那芒果呢? 抱歉,我没有芒果。 None None
当前的测试结果(gpt-4o-mini)
消息 响应 对象 反应
嘿! 嘿,你好,今天有什么可以帮你的吗? None None
你能给我一个苹果吗? 当然,给你一个苹果。 Apple Love
那芒果呢? 当然,给你一个芒果。 Apple Love
后来,我在 JSON 输出中添加了一个推理字段,并修改了系统提示词,要求智能体用 250 到 1000 个单词说明为什么选择这些枚举值。但它仍然含糊其词,说用户要求一种水果,所以它应该给用户;既然用户提出了要求,它就一定喜欢芒果。尽管系统提示词中有一个字段明确规定:如果对象和反应与用户提出的请求无关,就不要发送枚举值,它仍然会这样做。而这套逻辑以前是有效的。
遗憾的是,我无法让任何人现在亲自尝试并复现,因为这种变化是在数月时间里发生的。我不知道这是权重量化造成的,还是他们实际上拥有多个在同一天发布、但参数规模不同的模型版本,因此可以显示相同的版本号,却逐渐向我们提供参数量更小的版本。我只能说,一想到要以这样的后端来扩展产品,我就既沮丧又恐惧。如果我开发的只是某种廉价的 LLM 文本摘要应用,比如会议记录工具之类的,我可能不会在意;但这些问题会立刻被用户察觉。而且我不想为此使用最新、最昂贵的模型,这只是基本聊天和从几个选项中进行选择而已,不是什么数学奥林匹克题目或理论物理问题。
不管怎样,再次感谢你,Greg!
1 票 举报
嘿,@Greg Sadetsky,谢谢。很高兴看到这件事引起了别人的注意。我粗略浏览了 HN 上的讨论,看到不少人都在索要图表,还有一些 Stack Overflow 上的人也在那里,唉。我写这篇帖子并不是为了寻求帮助,只是想发泄一下,因为与 MS Support 打交道也非常痛苦:东西坏了,模型变慢了,而你在一周后才会收到回复,说它运行正常。不管怎样。
我使用的是一套定制的测试框架,目标是评估准确性。我举出将温度设置为零的例子,是为了强调:即使你推动模型以更具确定性的方式运行,结果仍然会随着时间发生变化。当然,我知道这是一个庞大的统计机器,尤其是非常长的回答,可能会出现细微变化。但话说回来,缓存输出不就是为此准备的吗?
我的产品使用动态系统提示词,因此其中的内容会根据用户的设计而变化。我还有一个设计被锁定的智能体,也就是说,我始终使用它来进行测试。
我期望得到的结果是一条文本消息和几个枚举结果。枚举正是问题开始变得模糊的地方。我会记录模型名称和响应。就这么简单。
让我给你描述一个完全虚构的例子:
这个智能体中有一份大约 5K token、内容锁定的系统提示词。
它的库存中有苹果、橙子和梨。
它会对不同物品做出特定反应。
假设这个智能体被设计为喜欢苹果,并且对橙子过敏。
之前的测试结果(gpt-4o-mini)
当前的测试结果(gpt-4o-mini)
后来,我在 JSON 输出中添加了一个推理字段,并修改了系统提示词,要求智能体用 250 到 1000 个单词说明为什么选择这些枚举值。但它仍然含糊其词,说用户要求一种水果,所以它应该给用户;既然用户提出了要求,它就一定喜欢芒果。尽管系统提示词中有一个字段明确规定:如果对象和反应与用户提出的请求无关,就不要发送枚举值,它仍然会这样做。而这套逻辑以前是有效的。
遗憾的是,我无法让任何人现在亲自尝试并复现,因为这种变化是在数月时间里发生的。我不知道这是权重量化造成的,还是他们实际上拥有多个在同一天发布、但参数规模不同的模型版本,因此可以显示相同的版本号,却逐渐向我们提供参数量更小的版本。
我所能说的是,我对在后端采用这种技术来扩展产品感到沮丧和恐惧。如果我在做某个廉价的LLM文本总结应用,比如会议记录工具之类的,我不会介意,但这些问题用户会立刻注意到。而且我不想为此使用最新最贵的模型,这只是基础聊天和一些选项选择。不是数学奥林匹克竞赛或理论物理问题。
无论如何,再次感谢Greg!
Sarge • 65 声誉值 2025-09-21T09:20:53.95+00:00 甚至论坛也一团糟,创建表格后编辑消息,markdown就被破坏了。他们做的一切都很混乱。1票 举报
甚至论坛也一团糟,创建表格后编辑消息,markdown就被破坏了。他们做的一切都很混乱。
Sarge • 65 声誉值 2025-09-21T10:20:20.5133333+00:00 另外给Stack Overflow用户的一个小提示:我有多个对话测试,我多次运行它们。不是只运行一次。1票 举报
另外给Stack Overflow用户的一个小提示:我有多个对话测试,我多次运行它们。不是只运行一次。
Greg Sadetsky • 0 声誉值 2025-09-21T12:54:26.7266667+00:00 非常感谢Sarge,这些背景信息真的很有帮助。如果你还有时间,当然如果你有这些数据的话,你能分享一个图表或数值(比如正确/错误查询的百分比)以及你运行测试时的模型名称和日期吗?你在几个月内损失了几个百分点(比如从86%到84%)还是下降幅度更大?如果我理解正确的话,你还提到你测试的模型在新模型发布后表现更差——我想知道这是否是你的正确/错误响应图表或表格中能看到的东西(准确性下降),并且大致与新模型的发布日期相关?再次感谢!0票 举报
非常感谢Sarge,这些背景信息真的很有帮助。
如果你还有时间,当然如果你有这些数据的话,你能分享一个图表或数值(比如正确/错误查询的百分比)以及你运行测试时的模型名称和日期吗?
你在几个月内损失了几个百分点(比如从86%到84%)还是下降幅度更大?如果我理解正确的话,你还提到你测试的模型在新模型发布后表现更差——我想知道这是否是你的正确/错误响应图表或表格中能看到的东西(准确性下降),并且大致与新模型的发布日期相关?
Manas R Mohanty • 17,270 声誉值 • 版主 2025-09-22T02:25:49.2666667+00:00 你好Sarge,同意你对GPT-5 nano模型速度缓慢的观点。看起来你的模型在某些提示下面临非确定性结果,即使GPT-4o mini模型的温度为0。你指出的差异结果。
你要一个芒果吗?抱歉,我没有芒果——之前
你要一个芒果吗?这是一个芒果——目前
希望更多了解这里的AI智能体场景
请在私信中帮我提供请求的详细信息以进一步讨论。感谢。0票 举报
同意你对GPT-5 nano模型速度缓慢的观点。
看起来你的模型在某些提示下面临非确定性结果,即使GPT-4o mini模型的温度为0。
你指出的差异结果。
你要一个芒果吗?抱歉,我没有芒果——之前
你要一个芒果吗?这是一个芒果——目前
希望更多了解这里的AI智能体场景
请在私信中帮我提供请求的详细信息以进一步讨论。
Manas R Mohanty • 17,270 声誉值 • 版主 2025-09-24T04:53:44.62+00:00 你好Sarge,想强调一点。如果上下文和使用的数据集在两者之间改变,响应也会改变。这些是大语言模型;响应可能会根据对话流程/参考数据的变化而改变。在没有适当调查的情况下,我们不能得出模型劣化的结论。如果你能在私信中告诉我你的可用时间,我们可以更好地理解这个问题。感谢。0票 举报
你好Sarge,想强调一点。如果上下文和使用的数据集在两者之间改变,响应也会改变。
这些是大语言模型;响应可能会根据对话流程/参考数据的变化而改变。
在没有适当调查的情况下,我们不能得出模型劣化的结论。
如果你能在私信中告诉我你的可用时间,我们可以更好地理解这个问题。
Sina Salam • 30,896 声誉值 • 志愿版主 2025-09-28T18:33:35.97+00:00 你好Sarge,欢迎来到Microsoft Q&A,感谢你在这里发布你的问题。这看起来是一个非常深层的问题,不过下面是我对生产环保意识的绵薄之力:
首先,使用UTC时间戳、精确的系统/用户提示、所有参数(temperature、top_p、max_tokens)、完整响应JSON和响应头(x-request-id、x-ms-region)记录每个请求。保存请求体和响应头,因为Microsoft通过这些ID关联问题。使用简单的curl命令来捕获响应头和输出响应:
curl -s -D - -H "Content-Type: application/json" \
-H "api-key:$AZURE_OPENAI_API_KEY" \
-X POST "https://<resource>.openai.azure.com/openai/deployments/<deployment>/chat/completions?api-version=2025-07-01-preview" \
-d '{"messages":[{"role":"system","content":"<system prompt>"},{"role":"user","content":"Can you give me an apple?"}],"temperature":0,"max_tokens":200}' -o response.json
Azure OpenAI Chat Quickstart
其次,在Azure AI Foundry中检查部署并将版本更新策略设置为手动。这可以确保底层模型不会自动更新到较新版本,这通常会导致意外行为。如果生产环境必须保持灵活,请创建一个固定的重复部署以便复现。
Azure OpenAI Model Upgrade Guide
第三,构建一个测试框架,至少对固定部署重复运行每个提示30次,记录结果并测量稳定性(精确匹配%)、语义相似度(通过嵌入余弦)和延迟百分位数。使用嵌入来进行漂移检测,如下所示:
# 通过嵌入之间的余弦相似度来检测语义漂移
from openai import AzureOpenAI
# 伪代码:get_embedding("baseline")、get_embedding("new")、计算余弦
Azure OpenAI Embeddings Documentation
第四,系统地测试每个假设:确认部署版本稳定性(排除自动更新),检查提示是否被截断,运行单轮对话以排除上下文污染,禁用RAG(如果使用),并监控响应头以查看备用路由。逐字节比较请求体以排除客户端侧的修改。即使温度为0,也预期会有小的非确定性,但量化它可以区分正常变化和模型漂移。
Non-Determinism in LLMs
然后,准备一个支持ZIP,包含请求/响应日志、部署设置(更新策略的屏幕截图)和失败运行的x-request-id值。Microsoft使用这些ID来追踪服务器端行为。在Azure Portal或通过优先级客户支持(PCS)完成此操作。
最后,为了保护生产,将部署固定到手动更新,执行验证层以便应用拒绝意外的枚举输出,并设置连续回归告警。按计划运行测试,当稳定性率或嵌入相似度低于阈值时标记。这提供了语义漂移在破坏用户之前的早期警告。
LLM Regression Testing Practices
我希望这很有帮助!如果你有任何其他问题或需要澄清,请随时告诉我。如果有帮助,请不要忘记通过点赞关闭此主题并将其接受为答案。
其次,检查 Azure AI Foundry 中的部署,并将“版本更新策略”设置为手动。这样可以确保底层模型不会自动升级到较新的版本,因为自动升级经常会导致意外行为。如果生产环境必须保持灵活性,请创建一个固定版本的重复部署,以确保结果可复现。——Azure OpenAI 模型升级指南
第三,构建一个测试工具,对固定版本的部署重复执行每个提示词至少 30 次,记录结果,并衡量稳定性(精确匹配百分比)、语义相似度(通过嵌入向量的余弦相似度计算)以及延迟百分位数。可以像下面这样使用嵌入向量检测漂移:
# cosine similarity between embeddings to detect semantic drift
from openai import AzureOpenAI
# pseudo:
get_embedding("baseline"), get_embedding("new"), compute cosine
Azure OpenAI 嵌入向量文档
第四,系统性地检验每项假设:确认部署版本是否稳定(排除自动更新的影响)、检查提示词是否被截断、运行单轮对话以排除上下文串扰、禁用正在使用的 RAG,并监控响应头中是否存在回退路由。逐字节比较请求体,以排除客户端修改。即使 temperature=0,也仍可能出现轻微的非确定性,但对其进行量化,可以区分正常波动与模型漂移。LLM 中的非确定性
然后,准备一个支持 ZIP 文件,其中包含请求/响应日志、部署设置(更新策略的截图),以及失败请求的 x-request-id 值。Microsoft 会使用这些 ID 追踪服务端行为。请通过 Azure Portal 或优先客户支持(PCS)执行此操作。
最后,为了保护生产环境,应将部署固定为手动更新,强制启用验证层,使应用能够拒绝非预期的枚举输出,并设置持续回归告警。按计划定期运行测试,并在稳定率或嵌入向量相似度低于阈值时发出警报。这样可以在语义漂移影响用户之前提供预警。LLM 回归测试实践
希望这些内容对你有所帮助!如果你还有其他问题或需要进一步说明,请随时告诉我。
如果这些内容有帮助,请不要忘记点赞并将其接受为答案,以便在这里关闭该帖子。