ChatGPT聊天记录导出PDF实战指南:从API调用到格式优化

1次阅读
没有评论

共计 1720 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景痛点

在日常使用 ChatGPT 时,我们经常需要保存有价值的对话记录。比如技术讨论、学习笔记或是重要的工作沟通。虽然 ChatGPT 网页版提供了历史记录功能,但它有几个明显的不足:

ChatGPT 聊天记录导出 PDF 实战指南:从 API 调用到格式优化

  • 只能单条导出,无法批量处理
  • 导出的格式是纯文本,丢失了对话的上下文结构
  • 没有排版和美化,阅读体验差
  • 无法添加自定义元数据(如时间戳、会话标签)

技术方案对比

目前实现对话记录导出主要有三种方式:

  1. OpenAI 官方 API
  2. 优点:数据最完整,可获取原始对话结构
  3. 缺点:需要开发知识,API 调用有次数限制

  4. 浏览器插件

  5. 优点:一键操作,用户友好
  6. 缺点:功能有限,可能存在隐私风险

  7. 第三方服务

  8. 优点:开箱即用
  9. 缺点:需要信任服务提供商,可能收费

对于 PDF 生成库,常见的选择有:

  • ReportLab:功能强大但学习曲线陡峭
  • PyFPDF:轻量简单,适合基础需求
  • WeasyPrint:支持 HTML 转 PDF,排版灵活

核心实现

1. 获取对话历史

import openai

# 配置你的 API 密钥
openai.api_key = 'your-api-key'

# 获取最近的对话记录
def get_chat_history(limit=20):
    response = openai.ChatCompletion.list(
        limit=limit,
        order='desc'  # 从最新开始获取
    )
    return response['data']

# 示例调用
history = get_chat_history(10)

2. 数据清洗

import re

def clean_markdown(text):
    # 移除多余的换行符
    text = re.sub(r'\n{3,}', '\n\n', text)
    # 转义特殊字符
    text = re.sub(r'([*_`~])', r'\\\1', text)
    return text

3. PDF 生成

from fpdf import FPDF

class PDF(FPDF):
    def header(self):
        self.set_font('Arial', 'B', 12)
        self.cell(0, 10, 'ChatGPT 对话记录', 0, 1, 'C')

    def footer(self):
        self.set_y(-15)
        self.set_font('Arial', 'I', 8)
        self.cell(0, 10, f'Page {self.page_no()}', 0, 0, 'C')

def generate_pdf(history, filename):
    pdf = PDF()
    pdf.add_page()
    pdf.add_font('NotoSans', '','NotoSansCJKsc-Regular.ttf', uni=True)
    pdf.set_font('NotoSans', '', 10)

    for chat in history:
        role = '用户' if chat['role'] == 'user' else 'AI 助手'
        pdf.cell(0, 10, f'{role}:', ln=1)
        pdf.multi_cell(0, 8, chat['content'])
        pdf.ln(5)

    pdf.output(filename)

进阶优化

  1. 长对话分页
  2. 计算文本长度,超过阈值自动分页
  3. 添加连续页码和章节标记

  4. 元数据添加

    # 在 PDF 类中添加
    def add_metadata(self, session_id, date):
        self.set_creator('ChatGPT Exporter')
        self.set_title(f'Session {session_id}')
        self.set_subject(f'Chat on {date}')

  5. 安全建议

  6. 使用环境变量存储 API 密钥
  7. 实现敏感词过滤功能

避坑指南

中文乱码解决方案

  1. 使用支持中文的字体(如文中的 Noto Sans)
  2. 确保文件保存为 UTF- 8 编码
  3. 在 PDF 生成前验证文本编码

性能优化

  • 对大文档使用异步生成
  • 实现进度回调函数
  • 设置合理的超时时间

API 配额管理

  • 实现简单的请求计数
  • 添加延迟避免速率限制
  • 考虑使用缓存机制

动手挑战

现在你已经掌握了基础导出功能,可以尝试扩展以下功能:

  1. 按主题自动分类对话记录(如技术、学习、娱乐)
  2. 添加关键词标记和搜索功能
  3. 实现定期自动归档

提示:可以考虑使用 NLP 库进行文本分类,或者基于对话元数据实现简单规则。

正文完
 0
评论(没有评论)