原贴链接

如今大多数大型语言模型(LLM)的上下文窗口约为128k,但我注意到输出长度通常被限制在约8k(不过如果我没记错的话,像o1 - mini这样的最先进模型可以生成非常长的输出,超过2万标记。但o1 - mini不是本地的)。这在许多现实世界的编程任务中是个大问题,在这些任务中,有时你需要大型语言模型输出整个文件(通常在约2万标记的范围内)。由于大型语言模型是自回归的,所以让它们输出多达128,000个标记应该是很有可能的,因为大型语言模型只是一遍又一遍地预测下一个标记,所以所有文本始终是输入文本,即使是它1秒前生成的文本。是否有任何推理引擎允许你这样做?例如Llama.cpp、Ollama、vLLM?

讨论总结

原帖探讨能否实现10万+标记输出,因为多数LLMs上下文窗口与输出长度有限,对编程任务有影响。评论者们从不同角度发表看法,如模型训练未针对长输出、存在技术限制、长输出连贯性难以保证等,也有提出一些可能的解决方法或特殊情况。

主要观点

  1. 👍 超长输出不是推理引擎限制的问题,是LLM自身性质和训练数据导致的
    • 支持理由:模型未针对100k标记输出训练所以难以做到,即便禁止eos token也难以得到期望输出。
    • 反对声音:无
  2. 🔥 输出越长,LLM输出无意义内容的可能性越高
    • 正方观点:标记采样存在随机性,长输出易采样到错误标记,错误标记会增加后续错误概率。
    • 反方观点:无
  3. 💡 微调限制了基础模型连贯输出的能力
    • 解释:若只是不断预测下一个词元,可能会失去连贯性并陷入死胡同,基础模型在没有退化的情况下达到完整上下文长度可能会存在困难。
  4. 💡 多数LLMs因内存或效率有输出长度限制
    • 解释:自回归的LLMs生成极长输出很困难,vLLM或llama.cpp可能不原生支持长输出。
  5. 💡 可以将输出反馈到输入上下文来绕过输出长度限制
    • 解释:多数模型训练时输出长度有限,但可将输出输入到输入上下文中解决这个问题。

金句与有趣评论

  1. “😂 Motylde: This is mostly not issue of inference engine, or some arbitrary set limitation, althougt in some APIs it might be.”
    • 亮点:明确指出超长输出不是推理引擎限制的问题,打破常规思维。
  2. “🤔 你可以通过将输出输入到输入上下文中来解决这个问题,但一般来说,大多数模型在训练时输出长度相当有限。”
    • 亮点:提出一种解决长输出限制的思路。
  3. “👀 hm i think the longer the output the higher the likelihood of the LLM diverging to nonsense.”
    • 亮点:指出长输出可能带来的无意义内容风险。
  4. “😂 我已经让Claude输出了~50k,基本上是小说中的一整章,但我不得不催促它几次。”
    • 亮点:提供Claude可输出较长内容的实例。
  5. “🤔 如果您一次性生成巨大的代码文件,那您的编程方式是错误的。”
    • 亮点:对原帖中提到的编程任务长输出需求提出不同看法。

情感分析

总体情感倾向为积极探索。主要分歧点在于能否实现长标记输出以及如何实现。可能的原因是不同评论者的知识背景、使用经验不同,如有的从模型训练原理出发,有的从实际使用情况出发。

趋势与预测

  • 新兴话题:使用特定模型(如llama3.1:8b - instruct - q8_0)进行长输出实验。
  • 潜在影响:对LLMs的发展方向有一定影响,如果能实现长输出,将拓展其在更多领域(如大型编程项目)的应用。

详细内容:

《探讨能否实现超长篇幅(100,000+)的 LLM 输出》

在 Reddit 上,一则关于“能否实现非常长(100,000+)的 LLM 输出”的帖子引起了广泛关注。该帖指出,当前多数 LLM 的上下文窗口约为 128k,但输出长度通常限制在约 8k 左右。这在许多实际的编程任务中成为了一个大问题,有时需要 LLM 生成整个文件(往往在约 20,000 个令牌的范围)。此帖获得了大量的点赞和众多评论,引发了关于 LLM 输出长度限制的深入讨论。

讨论的焦点和观点丰富多样。有人认为这主要是由于 LLM 的训练性质和数据所决定,并非推理引擎或人为设定的限制,并且认为不太可能实现 100k 令牌的输出。但也有人提到在 ChatGPT 4o 网页版中,有“继续生成”按钮,能在输出达到 8k 限制后继续生成新的 8k 输出。还有人分享了在使用 Llama 70B 时出现中途停止的情况,通过发送“继续”提示能够解决。

例如,有用户分享道:“在使用 Llama 70B(在 groq 上,非本地)时,它有在句子中间停止的倾向(可能是由于 groq 的 API 限制),但发送带有‘继续’的用户提示对我来说效果不错(但同样,我可能触及的是 Groq API 限制而非模型自身的限制,所以不知道在这种情况下是否有效)。”

关于如何解决输出长度限制的问题,有人提出可以通过禁止 eos 令牌、调整模型的训练参数、采用特定的量化方法等。但也有人担忧输出过长可能导致内容失去连贯性,变成无意义的内容。还有人认为可以将大型文件拆分成小块,以提高处理效率。

例如,有用户表示:“如果您的文件长度为 20k 令牌,也许您应该将它们拆分,重构代码。即使对于人类来说,浏览多个 200/300 行的文件也比一个非常长的 2k 行文件更容易。而且,如果您使用诸如 aider 或 cursor 之类的工具,它将提高性能同时大幅降低成本。将文件以合理的方式分组,使用良好命名的函数,将为您节省大量时间。”

总之,关于能否实现超长篇幅的 LLM 输出,目前仍存在争议和多种观点。未来或许需要在技术和策略上不断探索和创新,以满足实际应用中的需求。