共计 1996 个字符,预计需要花费 5 分钟才能阅读完成。
背景说明
在实际开发中,我们经常需要导出 ChatGPT 的聊天记录,主要出于以下几个目的:

- 数据分析:分析用户与 ChatGPT 的交互模式,优化对话策略
- 内容备份:保留重要的对话记录,防止意外丢失
- 系统集成:将对话记录整合到其他应用或系统中
- 合规要求:某些行业需要保存完整的客户服务记录
技术方案对比
官方 API 方案
优点:
- 完全合法合规
- 数据格式规范统一
- 无需处理反爬机制
- 支持获取完整对话历史
缺点:
- 可能有速率限制
- 需要 API 密钥
- 部分历史记录可能无法获取
网页爬虫方案
优点:
- 不依赖官方 API
- 可以获取界面显示的所有内容
缺点:
- 违反服务条款
- 需要处理动态加载
- 容易被封禁
- 数据解析复杂
基于以上对比,我们强烈建议使用官方 API 方案。
核心实现
1. 准备工作
首先需要获取 OpenAI API 密钥:
- 登录 OpenAI 平台
- 进入 API 密钥管理页面
- 创建新的密钥
2. 安装依赖
pip install openai pandas
3. API 认证
import openai
openai.api_key = '你的 API 密钥'
完整代码示例
获取对话列表
def get_conversation_list(limit=100):
"""
获取对话列表
:param limit: 每次请求返回的最大对话数量
:return: 对话列表
"""
try:
response = openai.ChatCompletion.list(limit=limit)
return response['data']
except Exception as e:
print(f"获取对话列表失败: {e}")
return []
获取完整对话内容
def get_conversation_detail(conversation_id):
"""
获取特定对话的完整内容
:param conversation_id: 对话 ID
:return: 对话详情
"""
max_retries = 3
retry_count = 0
while retry_count < max_retries:
try:
response = openai.ChatCompletion.retrieve(id=conversation_id)
return response
except openai.error.RateLimitError:
retry_count += 1
time.sleep(2 ** retry_count) # 指数退避
except Exception as e:
print(f"获取对话详情失败: {e}")
return None
print(f"重试 {max_retries} 次后仍失败")
return None
数据存储方案
导出为 JSON
import json
def save_to_json(data, filename):
"""
将数据保存为 JSON 文件
:param data: 要保存的数据
:param filename: 文件名
"""
try:
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"数据已保存到{filename}")
except Exception as e:
print(f"保存 JSON 文件失败: {e}")
导出为 CSV
import pandas as pd
def save_to_csv(data, filename):
"""
将数据保存为 CSV 文件
:param data: 要保存的数据
:param filename: 文件名
"""
try:
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf-8-sig')
print(f"数据已保存到{filename}")
except Exception as e:
print(f"保存 CSV 文件失败: {e}")
性能优化建议
- 并发请求:使用多线程或异步 IO 提高请求效率
- 本地缓存:对已获取的数据进行缓存,避免重复请求
- 批量处理:尽量使用批量 API 减少请求次数
- 增量导出:记录上次导出的位置,只获取新增内容
避坑指南
常见错误及解决方案
- 速率限制:
- 错误信息:
RateLimitError -
解决方案:实现指数退避重试机制
-
Token 过期:
- 错误信息:
AuthenticationError -
解决方案:检查 API 密钥是否有效,必要时重新生成
-
数据不完整:
- 现象:返回的对话记录缺失
- 解决方案:检查分页参数,确认是否有更多数据
安全建议
- 妥善保管 API 密钥,不要硬编码在代码中
- 敏感对话内容存储时进行加密
- 遵守数据隐私法规,特别是涉及个人信息的对话
- 定期轮换 API 密钥
延伸思考
- 如何实现增量导出,只获取新增的对话记录?
- 对于超长对话,如何优化存储结构?
- 如何将导出的数据与 BI 工具集成进行分析?
- 在多用户场景下,如何高效管理大量对话记录?
希望这篇指南能帮助你顺利导出 ChatGPT 聊天记录。如果有任何问题或建议,欢迎交流讨论。
正文完
发表至: 未分类
近两天内
