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

如何扩展LangChain调用OpenAI 3.5时被截断的响应?

解决LangChain+GPT-3.5查询PDF时响应截断的扩展方法

方法1:调整LLM的token生成上限

GPT-3.5系列模型有固定的上下文窗口(如gpt-3.5-turbo为4096 token),默认的max_tokens设置可能限制了响应长度。你可以在初始化LLM时增大该参数,给模型预留更多生成空间:

如果使用基础OpenAI模型:

from langchain.llms import OpenAI

# 初始化时设置更大的max_tokens(不超过模型上下文上限)
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", max_tokens=2048)

如果使用ChatOpenAI聊天模型:

from langchain.chat_models import ChatOpenAI

chat_llm = ChatOpenAI(model_name="gpt-3.5-turbo", max_tokens=2048)

方法2:手动触发续写请求

当检测到响应被截断(比如结尾有省略号、或长度明显不足),可以将截断内容+原始问题作为新请求,让模型继续生成:

# 执行初始查询
initial_response = chain.run(input_documents=docs, question=query1)

# 简单判断是否截断(可根据实际场景优化判断逻辑)
is_truncated = len(initial_response) > 0 and initial_response.endswith("...")

if is_truncated:
    # 构造续写请求
    follow_up_query = f"请继续完成以下内容:{initial_response},基于之前的问题:{query1}"
    continued_response = chain.run(input_documents=docs, question=follow_up_query)
    # 合并完整响应
    full_response = initial_response + continued_response
else:
    full_response = initial_response

方法3:优化输入文档的长度和相关性

如果检索到的文档过长,会占用大量上下文token,压缩模型的响应空间。可以通过两种方式优化:

  • 减少检索文档数量:只取最相关的top1或top2文档
    docs = docsearch.similarity_search(query1, k=1)  # 仅检索最相关的1篇文档
    
  • 细化文档分割:用更细的粒度拆分PDF文档,确保每个文本块聚焦核心信息,减少冗余输入
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    
    # 调整分割参数,生成更短的文本块
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    texts = text_splitter.split_documents(你的原始PDF文档集合)
    

内容的提问来源于stack exchange,提问作者Diego Quirós

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:25:03