Skip to content

wentaowang3438/AutoScreen-AI

Repository files navigation

Excel 智能批处理工具

一个基于 PyQt5 和硅基流动 API 的现代化 Excel 批处理工具,支持自定义 Prompt 模板、多线程处理、智能缓存和错误处理。

✨ 功能特点

🎯 核心功能

  • 自动列检测:自动读取 Excel 文件的所有列名,支持多选
  • 自定义 Prompt:完全可编辑的 Prompt 模板,支持占位符替换
  • 多线程处理:使用线程池并发处理,提高处理效率(默认 20 个工作线程)
  • 智能缓存:自动缓存相同内容的处理结果,避免重复调用 API
  • 实时进度:显示处理进度、预计剩余时间
  • 错误处理:自动记录错误行,生成错误日志文件
  • 任务中断:支持随时停止正在运行的任务
  • API 测试:内置 API 连接测试功能

🎨 界面特性

  • 现代化的 PyQt5 图形界面
  • 响应式布局,支持窗口调整
  • 清晰的分组和标签
  • 实时状态反馈

📋 系统要求

  • Python 3.7 或更高版本
  • Windows / macOS / Linux
  • 硅基流动 API 密钥(在程序内配置)

🚀 安装步骤

1. 克隆或下载项目

# 如果使用 git
git clone <repository-url>
cd AutoScreen-AI

# 或直接下载项目文件

2. 安装依赖

pip install -r requirements.txt

或者手动安装:

pip install pandas openpyxl openai PyQt5

3. 配置 API 密钥

在程序内配置(推荐): 运行程序后,在界面中填写 API 密钥与模型名,点击保存。配置会保存在用户目录下(~/.autoscreen_config.json),下次启动会自动加载。

无需设置环境变量。

4. 运行程序

python main.py

📖 使用指南

基本使用流程

  1. 选择输入文件

    • 点击"浏览"按钮选择要处理的 Excel 文件
    • 程序会自动检测并显示所有列名
  2. 选择要合并的列

    • 在"自动检测到的列"区域勾选需要合并的列
    • 可以多选,这些列的内容会被合并后发送给 AI
  3. 设置输出文件

    • 默认输出为 output.xlsx
    • 可以点击"浏览"选择保存位置
  4. 设置分隔符

    • 设置 AI 输出字段之间的分隔符
    • 默认使用 |,可根据需要修改
  5. 编辑 Prompt 模板

    • 在"Prompt 模板"区域编辑你的 Prompt
    • 使用 {merged_text} 作为文本占位符
    • 使用 {delimiter} 作为分隔符占位符
  6. 测试 API(可选)

    • 点击"🔍 测试 API"按钮验证 API 连接是否正常
  7. 开始处理

    • 点击"🚀 开始处理"按钮开始批处理
    • 可以随时点击"🛑 停止"中断任务

Prompt 模板说明

占位符

  • {merged_text}:会被替换为选中列合并后的文本内容
  • {delimiter}:会被替换为你设置的分隔符

示例 Prompt

你是一名专业领域的文献筛选专家。

【任务目标】
根据提供的文章内容,判断其是否属于【研究类型名称】类文献,并给出是否保留与匹配评分。

【输出要求】
你必须只输出一行内容,包含以下 3 个字段:
① 是否属于(是 / 否)
② 是否应该保留(保留 / 不保留)
③ 匹配评分(0–100 的整数)

字段之间使用分隔符:{delimiter}

【文章内容】
{merged_text}

输出结果

  • 主输出文件:包含原始数据和新增的 AI_Output
  • 错误日志:如果处理过程中有错误,会生成 error_log.txt 文件

⚙️ 高级配置

调整线程数

在界面「并发数」中可设置 1–100 的线程数,设置会保存到本地配置。或在 config.py 中修改 DEFAULT_MAX_WORKERS

建议值:

  • 网络良好:20-40
  • 网络一般:10-20
  • API 有速率限制:5-10

调整重试次数

api.pycall_model 函数中修改 max_retries 参数:

def call_model(prompt: str, max_retries: int = 3):  # 修改这里的数字

🔧 常见问题

Q1: 提示 API 未初始化或调用失败

解决方案:

  • 在界面中填写并保存 API Key、接口地址与模型名
  • 点击「🔍 测试 API」确认连接正常
  • 确认密钥有效、网络可访问对应接口

Q2: API 调用失败

可能原因:

  • API 密钥无效或过期
  • 网络连接问题
  • API 服务暂时不可用

解决方案:

  • 使用"🔍 测试 API"功能检查连接
  • 检查网络连接
  • 查看错误日志文件了解详细错误信息

Q3: 处理速度慢

优化建议:

  • 增加线程数(但注意 API 速率限制)
  • 检查网络连接速度
  • 利用缓存机制(相同内容会自动使用缓存)

Q4: 内存占用高

解决方案:

  • 减少线程数
  • 分批处理大文件
  • 关闭其他占用内存的程序

Q5: 某些行处理失败

处理方式:

  • 查看 error_log.txt 了解失败原因
  • 检查 Prompt 模板是否正确
  • 检查输入数据格式
  • 可以重新运行,已处理的行会使用缓存

📁 项目结构

AutoScreen-AI/
├── main.py            # 程序入口(精简)
├── main_window.py     # 主窗口与业务逻辑
├── api.py             # API 调用与 Excel 批处理核心逻辑
├── config.py          # 配置路径与 API Key 管理
├── workers.py         # 后台工作线程(Worker、ApiTestThread)
├── widgets.py         # 自定义控件(标题栏、日志处理器)
├── styles.py          # 全局 QSS 样式表
├── requirements.txt   # 依赖列表
├── README.md
├── prompt.txt         # 提示词参考(可选)
└── output.xlsx        # 输出文件(运行后生成)

模块职责

模块 职责
main.py 应用入口,加载样式并启动主窗口
main_window.py 界面布局、事件处理、模板管理、进度与状态更新
api.py 客户端初始化、call_modelrun_processing、行级处理与缓存
config.py CONFIG_PATHTEMPLATE_DIR、API Key 编解码与持久化
workers.py 批处理 Worker 与 API 测试 ApiTestThread
widgets.py 无边框标题栏 CustomTitleBar、日志桥接 QEditTextLogger
styles.py Catppuccin 风格 QSS 常量

🛠️ 技术栈

  • Python 3.7+
  • PyQt5:GUI 框架
  • pandas:Excel 文件处理
  • openpyxl:Excel 文件读写
  • openai:兼容 OpenAI 接口的 API 客户端(硅基流动)
  • concurrent.futures:多线程处理

📝 更新日志

v2.0 (当前版本)

  • ✨ 使用 PyQt5 图形界面
  • ✨ 添加自动列检测功能
  • ✨ 添加 API 测试功能
  • ✨ 添加预计剩余时间显示
  • ✨ 改进错误处理和日志记录
  • ✨ 优化缓存机制
  • 🐛 修复各种已知问题

v1.0

  • 🎉 初始版本发布
  • 基本的批处理功能
  • 自定义 Prompt 支持

📄 许可证

本项目仅供学习和研究使用。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📮 联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 GitHub Issue
  • 发送邮件(如有)

注意: 使用本工具需要有效的硅基流动 API 密钥,请确保遵守硅基流动的使用条款和 API 调用限制。

About

一个基于 PySide6 和 API 的现代化 Excel 批处理工具,支持自定义 Prompt 模板、多线程处理、智能缓存和错误处理。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages