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

如何使用ChatGPT API实现带对话历史的聊天应用且节省Token?

关于ChatGPT对话历史保留的解决方案

官网内部端点的使用风险

官网主界面用到的对话ID相关端点是OpenAI的内部私有接口,完全不建议你去调用:

  • 没有官方文档支撑,接口参数、鉴权逻辑随时可能变更,今天能用明天就失效,维护成本极高
  • 直接调用私有接口违反OpenAI服务条款,账号存在被封禁的风险,得不偿失
  • 鉴权需要模拟官网会话流程,操作复杂度远高于官方公开API,毫无必要

可行的替代方案

方案一:使用官方Assistants API(最推荐)

OpenAI专门推出了assistants API来解决持久会话问题,帮你托管对话历史,无需每次发送完整上下文:

  1. 先创建一个Assistant,定义基础配置:
    from openai import OpenAI
    client = OpenAI()
    
    assistant = client.beta.assistants.create(
        name="自定义应用助手",
        instructions="你是一个协助用户解决问题的专业助手",
        model="gpt-3.5-turbo"
    )
    
  2. 为每个用户创建独立的Thread(线程),绑定专属会话:
    thread = client.beta.threads.create()
    
  3. 用户发送新消息时,只需将这条消息添加到对应Thread,无需携带历史内容:
    message = client.beta.threads.messages.create(
        thread_id=thread.id,
        role="user",
        content="用户的新问题内容"
    )
    
  4. 运行Assistant生成回复,它会自动读取Thread内的所有历史消息:
    run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant.id
    )
    

这种方式Token仅消耗在新消息和生成的回复上,彻底避免重复发送历史的浪费,且是官方支持方案,稳定靠谱。

方案二:自行精简上下文(适合不想用Assistants API的场景)

若你想自主存储完整历史,又不想每次发送全量内容,可尝试精简上下文:

  • 只保留最近3-5轮对话,根据应用场景调整轮数,平衡上下文完整性与Token消耗
  • 用GPT模型对历史对话生成摘要,将摘要+最新消息一同发送给API,减少冗余内容
  • 手动提取对话核心信息,比如用户核心需求、之前的关键结论,剔除无关闲聊内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:32