夜雨聆风学习资料网

ARTICLE · 1145341

为什么把长文档全塞进Prompt是灾难?顶级AI工程师都在用的上下文预算方法!

为什么把长文档全塞进Prompt是灾难?顶级AI工程师都在用的上下文预算方法!

我是老九,一个一直在一线折腾技术和AI的人。我习惯留意一些看着很先进,但放到工作和生活里付出不小代价的事。欢迎关注我!

不要错过文章最后的总结图呦!

当前章节:第四章|上下文窗口与记忆机制:AI到底能记住多少?

当前小节:第七节|上下文不够长,工程上怎么办?

本篇知识点:context budgeting

前段时间做文档问答功能,测试拿了几份小文件,效果挺好。用户上传文档,后台读出来和问题拼在一起:

下面是文档内容: 

…… 

请根据文档回答: 

设备出现异常以后怎么处理?

几页PDF没什么问题,换了份正式资料,三百多页。还按原来的办法处理,解析完往Prompt里放,结果不对劲了。

有时候请求超出上下文长度;换成更长上下文的模型,请求能发出去,但前面还放系统规则、用户的问题、之前的聊天记录。

文档不是独占上下文,不能只算模型支持多少Token?还得算这次请求,准备把多少Token留给谁?

工程里会碰到一个词context budget。

比如模型的上下文窗口能放128K Token,接接口时,不会把128K全留给上传的文档,还有别的东西。System Prompt占一部分,聊天历史占一部分,用户的问题在里面。工具调用返回了一些内容,同样可能继续往里占。还有个地方:模型还得回答。前面塞得太满,留给输出的空间就不够了。

128K Context Window 

System Prompt 

聊天历史 

用户问题 

文档内容 

工具结果 

模型输出预留

这些加起来不能超过这次请求承受的范围,麻烦从这里开始。三百多页,用户:“设备告警以后,现场人员第一步做什么?”答案在其中两三页,为了保险,把设备介绍、安装说明、参数表、维护记录、附录全部塞进去,相当于为了两三页内容,把三百多页搬到了模型面前。

能不能放进去,和该不该放进去,是两回事。

试过最直接的处理:文档太长从后面截掉。又碰到问题—答案刚好在被截掉的部分。

改成保留文档前后,中间少放点,也不行,有些有用的在中间。

按固定位置砍,基本是在赌答案在哪儿。

后来变了,用户问题先过来,从文档里找相关的部分,比如搜到“设备告警”“现场处置”“故障处理”附近的几段,把这些放进本次Prompt。

用户换成:“这个设备正常工作温度是多少?”

拿出来的是另外几段。

文档还是那份,每次进入上下文的内容不一样。这时候context budget才像个工程问题,预算不够总得有人让位置。

  • 是少带几轮聊天记录?

  • System Prompt再短一点?

  • 文档片段取 5 段还是 10 段?

  • 工具结果是不是没必要原样全放?

  • 回答至少留多少空间?

这些动一点,给文档留下来的位置都会变。

再看到“这个模型支持超长上下文”,先算下:这轮值得占上下文的是哪几块,比抱着整份文档往上下文里硬塞靠谱得多。

如果你读着还行,欢迎点赞收藏关注;如果有不同的观点,也欢迎大家留言讨论。

相关学习资料