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

使用LangChain时如何减少传递给OpenAI的Token数量?

解决LangChain中ConversationalRetrievalChain Token超量问题

当chat_history为空、问题本身也很短却触发Token超量错误时,核心原因是检索器返回的文档总Token数超出了gpt-3.5-turbo的4097上下文限制。以下是几种可行的解决方法:

  • 减少单次检索的文档数量
    通过调整检索器的search_kwargs参数,限制返回的最相关文档数量,直接降低总Token规模:

    retriever: VectorStoreRetriever = db.as_retriever(search_kwargs={"k": 2})  # 仅返回2个最相关文档,可根据需求调整
    
  • 截断检索到的文档内容
    对每个文档的内容进行截断,只保留前N个字符(或Token),减少单文档的Token占用:

    # 定义文档截断函数
    def truncate_document(doc, max_characters=1000):
        doc.page_content = doc.page_content[:max_characters]
        return doc
    
    # 包装检索器,自动截断返回的文档
    class TruncatedRetriever:
        def __init__(self, base_retriever, max_len=1000):
            self.base_retriever = base_retriever
            self.max_len = max_len
    
        def get_relevant_documents(self, query):
            docs = self.base_retriever.get_relevant_documents(query)
            return [truncate_document(doc, self.max_len) for doc in docs]
    
    # 初始化截断后的检索器并传入QA链
    base_retriever = db.as_retriever(search_kwargs={"k": 3})
    truncated_retriever = TruncatedRetriever(base_retriever)
    qa = ConversationalRetrievalChain.from_llm(model, retriever=truncated_retriever)
    
  • 切换到长上下文模型
    若业务场景允许,直接使用支持更长上下文的模型,从根源上解决Token限制问题:

    model = ChatOpenAI(model_name="gpt-3.5-turbo-16k")  # 支持16384 Token上下文
    
  • 使用上下文压缩工具提炼关键内容
    借助LangChain的ContextualCompressionRetriever,通过LLM自动提炼文档中与问题相关的内容,剔除无关信息以压缩Token:

    from langchain.retrievers import ContextualCompressionRetriever
    from langchain.retrievers.document_compressors import LLMChainExtractor
    
    compressor = LLMChainExtractor.from_llm(model)
    compression_retriever = ContextualCompressionRetriever(
        base_compressor=compressor,
        base_retriever=retriever
    )
    qa = ConversationalRetrievalChain.from_llm(model, retriever=compression_retriever)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:43:28