上周我的 AI 实战营知识星球有一个同学提问:老师,请教下,现在大模型已经支持10多万输入token了,我有个项目提示词有7000来个字,是不是不用RAG也行,效果会比用RAG差?
这个问题非常典型,可能也会有很多朋友遇到类似的困惑,我把我的答案分享出来:
1 通常来说,输入越长模型输出越慢,消耗 Tokens 越多,成本就越高
2 虽然很多国外先进模型已经支持 10W tokens,如 Gemini 2.5 Pro 已经支持 1,048,576 context,并不意味着 10W tokens 内的所有信息大模型都能够很好的理解和遵循,通常来说上下文越长,效果越差
3 现在大模型在实际处理长文本时存在“注意力稀释”和位置偏好问题,使得中间信息难以被准确关联到输出中。
详情参见:《Lost in the Middle: How Language Models Use Long Contexts》链接:https://arxiv.org/abs/2307.03172
我们可以把提示词分为指令部分和内容部分,提示词 7000 字通常应该包含了内容。
问题的关键在于:内容部分是否是模型回答必要的信息
RAG 可能会导致部分切片没有被正确提取出来,导致模型获取不到足够的信息,导致回答错误。
哪怕采用 RAG 能保证全部提取出来,“如无必要勿增实体”,没必要新增一个环节,增加耗时和出错的风险。
如果并不是所有内容都是必须的,如果都放在提示词中,会导致:
提示词太长,模型性能下降
模型响应时间变长
消耗更多输入 tokens ,成本增加
解决办法有两个:手工选择、代码自动截取 或者 RAG
如果可以采用工程化的方式,提前手动选择或者程序自动提取关键信息,优先使用这种方式,通常比 RAG 准确率更高
如果无法采用手动选择或代码自动截取,则可以采用 RAG 的方式提取。
需要注意的是,RAG 的召回率是否满足要求,如果你无法保证 RAG 提取的信息的完整性,还不如直接放提示词。
由于动态提取最关键的信息,上下文更短,效果更好,响应时间更短,消耗 tokens 更少,同时还降低了不相关的信息对 LLM 造成的干扰
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |