如何获取GPT模型完整回复?解决自定义聊天机器人回复截断问题
解决GPT模型回复不完整的方案
1. 修正模型与LLM初始化配置
你当前用ChatOpenAI加载text-davinci-003存在适配问题:text-davinci-003是文本补全模型,而ChatOpenAI针对的是聊天模型(如gpt-3.5-turbo),二者不匹配会导致输出异常。可二选一调整:
方案A:更换为聊天模型(推荐)
修改LLM初始化代码,适配聊天模型:
from langchain.chat_models import ChatOpenAI llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.5, model_name="gpt-3.5-turbo", max_tokens=num_outputs))
方案B:适配文本补全模型
若坚持使用text-davinci-003,改用LangChain的OpenAI类:
from langchain.llms import OpenAI llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.5, model_name="text-davinci-003", max_tokens=num_outputs))
2. 调整文档分割与Prompt参数
当前chunk_size_limit=600过小,会导致上下文被过度切割,模型无法获取完整信息生成回复。优化参数如下:
def construct_index(directory_path): # 适配模型最大token限制,调整参数 max_input_size = 8192 # 匹配gpt-3.5-turbo的最大输入token数 num_outputs = 3000 # 预留输入token空间后,设置合理的输出上限 max_chunk_overlap = 30 # 增大重叠率,避免上下文断裂 chunk_size_limit = 2000 # 提升chunk尺寸,保留更多完整上下文 prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) # 后续代码保持不变...
3. 优化查询时的输出控制
在调用index.query()时,显式指定参数强制生成完整回复:
def ask_ai(query): index = GPTSimpleVectorIndex.load_from_disk('index.json') response = index.query( query, response_mode="compact", # 整合上下文生成连贯回复 max_tokens=3000, # 显式指定输出token上限 temperature=0.5 ) return response.response
4. 修复Flask路由的参数传递问题
当前路由@app.route('/<question>')无法处理含特殊字符的问题(如空格、问号),会导致请求异常,改用GET参数传递:
from flask import request @app.route('/') def answer_question(): question = request.args.get('question') if not question: return "请通过question参数传递问题" answer = ask_ai(question) return answer
访问方式改为http://localhost:5000/?question=你的问题,避免URL解析错误导致的回复截断。
内容的提问来源于stack exchange,提问作者Mohamad
相关产品推荐
相关产品推荐

