Skip to content

leekaimao/PromptBatch-Streamlit

Repository files navigation

PromptBatch-Streamlit

一个基于 Streamlit 的 Python 应用,用于批量测试提示词并可视化对比结果,专为个人和小团队自用设计。

✨ 功能特性

  • 📁 支持 JSON 文件上传或手动输入 prompt
  • 🔑 多模型提供商支持: OpenAI、DeepSeek、通义千问、Gemini、Claude 等
  • 🎛️ 可调节的参数设置(模型、温度、Token 数等)
  • 并发处理: 支持多线程并发调用,大幅提升效率
  • 💾 智能缓存避免重复调用
  • 🔄 错误重试机制
  • 📊 多视图展示(网格、列表、表格)
  • 🔍 结果筛选和搜索
  • 📥 多格式导出(CSV、JSON、Markdown)
  • 🛠️ API 调试工具: 快速验证 API 配置
  • 🎯 答案验证: 支持规则验证和大模型验证,对比期望答案
  • 💡 智能优化: 自动分析失败案例,生成提示词优化建议
  • 🤖 Agent 迭代分析: 多轮验证-修正,生成高质量分析报告(参考gemini imo)

🚀 快速开始

1. 安装依赖

推荐使用 uv(更快):

# 安装 uv(如果未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 同步依赖并创建虚拟环境
uv sync

或使用 pip:

# 从 pyproject.toml 安装
pip install -e .

# 或手动安装核心依赖
pip install streamlit pandas requests python-dotenv tqdm

2. 配置 API 密钥

复制 env.example.env 并填入你的 API 密钥:

cp env.example .env
# 编辑 .env 文件,填入对应的 API 密钥

支持的模型提供商:

提供商 环境变量前缀 示例模型
OpenAI OPENAI_ gpt-4o, gpt-4o-mini
DeepSeek DEEPSEEK_ deepseek-chat
通义千问 QWEN_ qwen-turbo, qwen-max
Gemini GEMINI_ gemini-2.0-flash
Claude CLAUDE_ claude-3.5-sonnet
智谱 GLM ZHIPU_ glm-4-plus
月之暗面 MOONSHOT_ moonshot-v1-8k
百川 BAICHUAN_ Baichuan4
硅基流动 SILICONFLOW_ Qwen2.5-72B

3. 运行应用

使用 uv:

uv run streamlit run app.py

使用 pip 安装后:

streamlit run app.py

4. 局域网访问(可选)

uv run streamlit run app.py --server.address 0.0.0.0 --server.port 8501

📖 使用步骤

  1. 上传数据: 上传包含 prompt(和可选的期望答案)的 JSON 文件
  2. 配置 API: 选择提供商或输入 API 密钥
  3. 设置参数: 调整系统提示词、并发数等参数
  4. 运行测试: 点击"开始批量测试"按钮
  5. 查看结果: 在网格、列表或表格视图中查看结果
  6. 验证答案: 如果有期望答案,点击"一键验证"对比结果
  7. 获取优化建议: 对不符合的结果,选择分析模式并点击"生成优化建议"
  8. 导出数据: 下载 CSV、JSON 或 Markdown 格式的结果

📄 支持的 JSON 格式

格式一:简单列表

[
    "写一首关于春天的诗",
    "解释什么是人工智能",
    "如何学习Python编程"
]

格式二:对象列表

[
    {"prompt": "写一首关于春天的诗"},
    {"prompt": "解释什么是人工智能"}
]

格式三:带期望答案(用于验证)

[
    {
        "prompt": "写一首关于春天的诗",
        "answer": "春天、花朵、生机、希望"
    },
    {
        "prompt": "解释什么是人工智能",
        "answer": "人工智能是让机器模拟人类智能的技术"
    }
]

字段名自动检测

  • Prompt 字段: prompttextcontentquestioninput
  • Answer 字段: answerexpectedexpected_answeroutputresponselabeltarget

🔧 高级功能

🎯 答案验证

验证方式 说明
包含匹配 检查结果是否包含期望答案的内容
精确匹配 检查结果是否与期望答案完全一致
关键词匹配 检查期望答案中的关键词出现比例(≥60% 通过)
模糊匹配 计算字符串相似度(≥50% 通过)
大模型验证 使用 AI 判断语义是否一致

💡 经验总结与优化

提供两种分析模式:

模式 说明
简单模式 单次分析,速度快
Agent 迭代模式 多轮验证-修正,更准确但更慢

Agent 迭代模式工作流程:

初始分析 → 自我改进 → 验证分析 → 修正 → 验证 → ... → 输出报告

⚡ 并发处理

  • 支持 1-20 并发请求
  • 自动管理线程池
  • 批次间可设置延迟避免限流

💾 缓存机制

  • 相同的 prompt + 系统提示词 + 模型组合会使用缓存结果
  • 可以在侧边栏清空缓存
  • 缓存仅在当前会话有效

📁 文件结构

prompt-batch/
├── app.py                    # 主应用(Streamlit 界面)
├── model_config.py           # 模型提供商配置模块
├── prompts.py                # Prompt 模板集合
├── prompt_analysis_agent.py  # Agent 迭代分析工作流
├── debug_api.py              # API 调试工具
├── pyproject.toml            # 项目配置和依赖
├── uv.lock                   # 依赖锁定文件
├── env.example               # 环境变量模板
├── .env                      # API 密钥配置(需手动创建)
├── prompts.json              # 示例测试数据
└── README.md                 # 使用说明

🛠️ 命令行工具

API 调试工具

# 交互式测试
uv run python debug_api.py

# 测试指定提供商
uv run python debug_api.py --provider deepseek
uv run python debug_api.py --provider qwen

# 列出所有支持的提供商
uv run python debug_api.py --list

# 测试所有已配置的提供商
uv run python debug_api.py --test-all

# 生成 .env 模板
uv run python debug_api.py --env-template

Agent 分析工具

# 独立运行 Agent 分析
uv run python prompt_analysis_agent.py -d failed_cases.json -s "你的系统提示词" -o report.md

# 参数说明
# -d, --data           失败案例 JSON 文件
# -s, --system-prompt  当前使用的系统提示词
# -o, --output         输出报告路径
# -m, --max-iterations 最大迭代次数
# -q, --quiet          安静模式

⚙️ 配置说明

参数 说明 默认值
API 密钥 模型提供商的密钥 从 .env 读取
Base URL API 的基础 URL 根据提供商自动设置
模型 使用的模型名称 deepseek-chat
系统提示词 AI 的角色设定 你是一个有用的 AI 助手
最大 Token 数 响应的最大长度 500
温度 输出的随机性 0.7
并发数 同时发送的请求数 5
请求间隔 批次间延迟 0.1 秒
启用缓存 是否缓存相同请求

📝 注意事项

  1. 请妥善保管 API 密钥,不要提交到公开仓库
  2. 注意 API 调用限制和费用
  3. 大批量测试建议降低并发数、增加请求间隔
  4. 建议启用缓存以节省 API 调用次数
  5. Agent 模式会消耗更多 token,请注意成本

📜 License

MIT License

About

一个基于 Streamlit 的 Python 应用,用于批量测试提示词并可视化对比结果,专为个人和小团队自用设计。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages