You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建基于向量存储的LLM模型时遇最大令牌限制问题求助

解决LLM上下文令牌超限问题

你遇到的问题根源是检索返回的7个文档片段总令牌数过高——虽然你的提示词和查询很短,但RetrievalQA会把所有检索到的文档内容拼接进传给LLM的prompt里,导致总令牌数超过模型4097的上限。以下是具体解决办法:

  • 减少检索的文档数量:将retriever的search_kwargs中的k值从7降低,比如改成3或4,这样拼接进prompt的文档内容会大幅减少。修改代码如下:

    qa = RetrievalQA.from_chain_type(
        llm=OpenAI(),
        retriever=vectordb.as_retriever(search_kwargs={'k': 3}),
        return_source_documents=True
    )
    
  • 缩小文档拆分的片段尺寸:把CharacterTextSplitter的chunk_size从1000调小(比如500),同时对应降低chunk_overlap(比如100),让每个文档片段的令牌数更少。修改代码:

    text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=100)
    
  • 切换到上下文更长的LLM模型:如果业务允许,改用支持更大上下文窗口的模型,比如gpt-3.5-turbo-16k(最大16384令牌)或gpt-4系列。修改LLM初始化代码:

    llm=OpenAI(model_name="gpt-3.5-turbo-16k")
    

    注:如果使用Chat模型,需要改用ChatOpenAI类初始化。

  • 使用更高效的链类型:默认的stuff链会把所有文档塞进一个prompt,换成map_reduce或refine链类型,这些链会分批处理文档,避免单prompt令牌超限。修改代码:

    qa = RetrievalQA.from_chain_type(
        llm=OpenAI(),
        chain_type="map_reduce",
        retriever=vectordb.as_retriever(search_kwargs={'k': 7}),
        return_source_documents=True
    )
    

内容的提问来源于stack exchange,提问作者zizon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:40:03