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

如何解决ChatGPT+LangChain实现PDF聊天机器人的上下文丢失问题

问题分析

你的核心问题是没有在API请求中携带历史对话上下文。每次调用ChatGPT API时,模型只会处理当前传入的内容,不会自动留存之前的对话记录,因此无法理解“它们是什么颜色”这类指代性问题。

修复方案

要解决这个问题,你需要维护一个对话历史列表,每次用户提问时,把历史对话(包括之前的用户问题和AI回复)与当前问题、PDF上下文一起传入API请求。

具体实现步骤

  • 初始化一个符合OpenAI API格式的对话历史列表,开头加入系统提示词明确助手定位
  • 每次用户发送新问题,将用户消息添加到对话历史
  • 调用API时,把整个对话历史作为messages参数传入
  • 收到AI回复后,将回复也添加到对话历史,用于后续上下文关联

代码示例(Python)

假设你之前使用openai.ChatCompletion.create调用API,修改后的关键代码如下:

import openai

# 初始化对话历史,系统提示词定义助手行为
conversation_history = [
    {"role": "system", "content": "你是基于提供的PDF文档内容回答问题的助手,需结合文档信息与对话上下文回复。"}
]

def process_user_question(user_question, relevant_pdf_content):
    global conversation_history
    # 组合PDF相关内容与用户问题,添加到对话历史
    user_msg = f"参考PDF内容:{relevant_pdf_content}\n用户问题:{user_question}"
    conversation_history.append({"role": "user", "content": user_msg})
    
    # 调用ChatGPT API
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=conversation_history
    )
    
    assistant_reply = response.choices[0].message['content']
    # 将AI回复存入对话历史
    conversation_history.append({"role": "assistant", "content": assistant_reply})
    
    return assistant_reply

额外优化建议

  • 控制对话历史长度:避免Token消耗过高,可定期清理早期对话,或只保留最近3-5轮有效对话
  • 优化PDF内容传入:通过向量检索匹配当前问题相关的PDF片段,而非每次传入全部文档内容,进一步减少Token使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:04