批量复制ChatGPT公式的高效解决方案:自动化脚本与API集成实践

3次阅读
没有评论

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

image.webp

痛点分析

手动从 ChatGPT 复制大量数学公式时,开发者常遇到三类问题:

批量复制 ChatGPT 公式的高效解决方案:自动化脚本与 API 集成实践

  • 格式丢失:LaTeX 公式粘贴到本地编辑器时变为纯文本
  • 效率瓶颈:需要反复切换窗口 + 人工校验,每小时最多处理 50-80 个公式
  • 错误累积:连续操作时容易漏选或多选内容,需额外 20% 时间纠错

解决方案对比

方案 1:GUI 自动化方案(pyautogui+clipboard)

适用场景
– 无 API 权限时的应急方案
– 处理少量非敏感公式
– 需要保留 ChatGPT 的原始渲染效果

核心代码实现

import pyautogui
import time
import pyperclip

# 安全防护:设置故障保护点和延迟
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.5  

def copy_chatgpt_formulas(start_pos, end_pos, count):
    """
    :param start_pos: 起始坐标 (x,y)
    :param end_pos: 结束坐标 (x,y)
    :param count: 需要复制的公式数量
    """
    try:
        formulas = []
        for i in range(count):
            # 模拟三击选中公式(适应不同编辑器)pyautogui.tripleClick(x=start_pos[0], y=start_pos[1]+i*50)

            # 使用快捷键复制,避免依赖右键菜单
            pyautogui.hotkey('ctrl', 'c')
            time.sleep(0.3)  # 剪贴板延迟

            # 验证剪贴板内容
            while True:
                text = pyperclip.paste()
                if '$' in text or '\\' in text:  # LaTeX 特征检测
                    formulas.append(text)
                    break
                time.sleep(0.1)

        return formulas
    except Exception as e:
        print(f"Error occurred: {str(e)}")
        pyautogui.alert('操作中断!请检查窗口位置')  
        return []

方案 2:API 直接获取方案(OpenAI API)

适用场景
– 需要处理 100+ 公式的批量任务
– 要求原始 Markdown 格式
– 需要整合到自动化流程中

核心代码实现

import openai
import time
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def get_formulas_via_api(prompt, max_tokens=1500):
    """
    :param prompt: 包含公式需求的提示词
    :param max_tokens: 控制响应长度避免截断
    """
    try:
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.3,  # 降低随机性保证公式一致性
            max_tokens=max_tokens
        )

        # 提取 Markdown 代码块中的公式
        import re
        raw_text = response.choices[0].message.content
        formulas = re.findall(r'```(?:latex|math)[\s\S]*?```', raw_text)

        # 如果没有代码块,尝试提取行内公式
        if not formulas:
            formulas = re.findall(r'\$.*?\$|\\\(.*?\\\)', raw_text)

        return formulas
    except openai.error.RateLimitError:
        print("达到 API 限制,正在等待...")
        time.sleep(60)
        raise
    except Exception as e:
        print(f"API 调用失败: {str(e)}")
        return []

性能对比

指标 GUI 自动化方案 API 方案
速度(公式 / 分钟) 15-20 80-120
准确率 92%(依赖界面稳定性) 99.9%
CPU 占用 高(需保持窗口焦点)
网络依赖 不需要 必须稳定连接
初始配置耗时 5 分钟(坐标校准) 15 分钟(API 密钥)

避坑指南

  1. 剪贴板兼容性
  2. Windows 系统建议安装 pywin32 处理富文本
  3. MacOS 需要开启辅助功能权限

  4. API 关键配置

  5. 设置 max_tokens 时预留 30% 余量
  6. 监控 usage.prompt_tokens 避免超额

  7. 异常处理强化

  8. GUI 方案添加屏幕分辨率检测
  9. API 方案实现退避重试机制

延伸应用

该方案可扩展到:

  1. Notion AI 的批量内容导出
  2. Claude 生成的表格数据提取
  3. 本地 Markdown 文件的公式批量转换

两种方案各有所长,GUI 方案适合快速验证想法,API 方案则是生产环境的首选。建议先用小批量测试确定方案可靠性,再逐步扩大处理规模。

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