AutoPrompt
一个简单但是典型的autoprompt框架, 集成了memory, 遗传算法, 反思等机制
Install / Use
/learn @heng380/AutoPromptREADME
AutoPrompt with LangGraph
基于 LangGraph 的自动 Prompt 优化系统,使用 Flask 提供 Web 界面。
呈现效果
1. 系统主界面
<img src="docs/images/a.png" alt="系统主界面" width="80%">系统主界面包含以下功能模块:
- 数据集上传:支持 CSV、JSON、JSONL 格式
- Prompt 输入:输入原始 prompt,系统会自动优化
- 参数设置:
- 最大迭代轮次:设置优化迭代的上限(1-20 轮,默认 3)
- 验证阈值:设置验证改写的严格程度(0-100%,默认 50%)
- 50%:宽松模式,解决一半 badcase 即可接受(默认)
- 100%:严格模式,必须解决所有 badcase
- 遗传算法候选数量:每次改写生成 n 个不同版本的 prompt,系统会评估所有版本并选择最好的(1-10,默认 3)
- 1:不使用遗传算法,每次只生成一个版本
- 3-5:平衡效果和速度(推荐)
- 10:最大多样性,可能找到更好的 prompt,但耗时更长
- 实时日志:实时显示优化过程,包括预测、分析、改写、验证等各阶段信息
- 优化结果:优化完成后显示准确率指标、变化趋势图和优化后的 prompt
2. 实时日志
<img src="docs/images/realtime_log.png" alt="实时日志" width="80%">系统提供实时日志功能,通过 Server-Sent Events (SSE) 技术实时推送优化过程的详细信息:
- 实时更新:日志会随着优化进程实时滚动显示,无需刷新页面
- 结构化信息:每条日志包含时间戳、迭代轮次、执行阶段(预测、记忆、分析、改写、验证等)
- 彩色高亮:
- 迭代分隔线:每轮迭代之间有明显的分隔线标识
- 成功/错误标记:✓ 和 ✗ 符号高亮显示
- 数字和百分比:准确率、正确数等关键数据高亮显示
- 自动滚动:日志窗口会自动滚动到最新内容,方便查看最新进度
- 完整记录:记录整个优化过程的所有关键步骤,包括:
- 每轮预测的详细结果(每个样本的预测值和正确性)
- 验证过程的详细反馈(哪些 badcase 被解决,哪些未解决)
- 回滚和重新改写的情况
- 系统状态信息(history 记录、准确率统计等)
3. 准确率变化趋势
<img src="docs/images/acc.png" alt="准确率变化趋势" width="80%">系统会显示完整的准确率变化折线图,包含所有迭代轮次的数据点,清晰展示优化过程中准确率的提升轨迹。图表支持交互式查看,可以直观地看到每轮迭代的准确率变化。
4. Prompt 优化对比
<img src="docs/images/prompt.png" alt="Prompt 优化对比" width="80%">系统会自动优化 Prompt,左侧显示原始 Prompt,右侧显示优化后的 Prompt。如果最终准确率未达到 100%,系统会智能选择历史最高准确率对应的 prompt,并标注来源和轮次信息。
5. 优化历史详情
<img src="docs/images/image3.png" alt="优化历史详情" width="80%">通过下拉框可以选择查看任意轮次的详细信息,包括:
- 该轮次的 Prompt
- 所有预测结果(正确/错误标记)
- 准确率统计
- 改进建议
历史记录会显示每轮 analyze 时的 prompt 和结果,如果发生回滚,最终被接受的 prompt 会在下一轮的 history 中记录。
6. 累积优化经验(Memory)
<img src="docs/images/memory.png" alt="累积优化经验" width="80%">系统会自动总结每次优化的经验,包括:
- 迭代轮次和准确率变化趋势(上升/下降)
- Prompt 的具体更改内容(通过 diff 展示)
- 详细的案例变化分析(改进、退化、预测改变但正确性不变)
- 后续优化方向的建议
- 可复用的优化原则
这些经验会形成可复用的知识库,供后续优化参考,并保存在独立的实验文件夹中。
功能特性
- 📁 上传数据集文件(CSV/JSON/JSONL)
- ✍️ 输入原始 Prompt
- ⚙️ 设置最大迭代轮次、验证阈值和遗传算法候选数量
- 🤖 六个 Agent 协作优化:
- 预测 Agent: 根据数据集和当前 prompt 进行预测
- 记忆 Agent: 从 prompt 更改和准确率变化中总结经验,形成可复用的优化知识库
- 分析 Agent: 分析错误案例并给出修改意见
- 改写 Agent: 根据分析结果和历史经验改写 Prompt,支持生成多个候选版本(遗传算法)
- 验证 Agent: 验证改写后的 prompt 是否能解决目标 badcase,评估所有候选版本并选择最好的
- 杂交 Agent: 如果有两个或以上通过验证的候选,融合最强的两个生成杂交 prompt
- 🧬 遗传算法机制:每次改写生成多个候选版本,评估后选择最好的进入下一轮
- 🔀 杂交机制:融合两个最强候选的优势,生成更好的 prompt
- 🔄 自动循环优化直到达到最大迭代次数或所有预测正确
- 🧠 智能记忆机制:每次优化都会总结通用经验,并应用于后续优化过程
- 📂 实验隔离:每次任务自动创建独立的实验文件夹,不同任务互不干扰
工作流程
系统使用 LangGraph 构建了一个状态机工作流,每轮迭代的执行顺序如下:
开始
↓
[预测 Agent] → 使用当前 prompt 对数据集进行预测
↓
[记忆 Agent] → 对比本轮与上轮的 prompt 差异、准确率变化和案例变化,总结优化经验
↓
[分析 Agent] → 分析当前预测结果的错误案例,给出改进建议
↓
判断是否有错误?
├─ 所有预测正确 → 结束,返回优化后的 prompt
└─ 有错误 → 继续
↓
[改写 Agent] → 根据分析建议和历史经验改写 prompt
├─ 生成 n 个候选版本(遗传算法,默认 3 个)
└─ 使用不同 temperature 增加多样性
↓
[验证 Agent] → 评估所有候选版本
├─ 对每个候选版本进行验证
├─ 选择最好的一个(优先选择通过验证的,否则选择解决率最高的)
└─ 记录所有通过验证的候选(用于杂交)
↓
判断验证结果?
├─ 接受(至少有一个通过验证)→ [杂交 Agent]
│ ├─ 如果有 >=2 个通过验证的候选:
│ │ ├─ 融合最强的两个生成杂交 prompt
│ │ ├─ 验证杂交 prompt
│ │ └─ 对比杂交 prompt 和父代,选择更好的进入下一轮
│ └─ 如果只有 1 个通过验证的候选:跳过杂交,直接进入下一轮
│ ↓
│ 判断是否继续迭代
│ ├─ 继续迭代(未达上限)→ 增加迭代次数 → 回到预测 Agent
│ └─ 达到最大迭代次数 → [最终验证] → 使用最终优化后的 prompt 进行最后一次预测 → 结束
└─ 拒绝(所有候选都未通过验证)→ 回滚 prompt → 重新分析 → 回到改写 Agent
关键流程说明
- 预测阶段:使用当前 prompt 对数据集中的所有样本进行预测
- 记忆阶段(从第二轮开始):对比本轮与上一轮的 prompt、准确率和具体案例变化,生成可复用的优化经验
- 分析阶段:分析当前预测结果中的错误案例,识别问题并给出改进建议
- 改写阶段(遗传算法):
- 结合分析建议和历史优化经验,生成 n 个候选版本的 prompt(默认 3 个)
- 使用不同的 temperature(0.5-1.2)增加多样性
- 每个候选版本都是独立的优化尝试
- 验证阶段:
- 对所有候选版本进行评估
- 选择策略:优先选择通过验证的候选中解决率最高的;如果没有通过验证的,选择解决率最高的
- 记录所有通过验证的候选(用于后续杂交)
- 接受条件:解决率 >= 验证阈值(默认 50%)
- 拒绝处理:如果所有候选都未通过验证,回滚到改写前的 prompt,重新分析并改写
- 杂交阶段(Crossover):
- 如果有两个或以上通过验证的候选,执行杂交:
- 融合最强的两个候选的优势
- 生成杂交 prompt
- 验证杂交 prompt
- 对比杂交 prompt 和父代(最强的候选),选择解决率更高的进入下一轮
- 如果只有一个通过验证的候选,跳过杂交,直接进入下一轮
- 如果有两个或以上通过验证的候选,执行杂交:
- 终止条件:
- 所有预测都正确:直接结束,返回当前优化后的 prompt
- 达到最大迭代次数:会执行一次
final_predict节点,使用最终优化后的 prompt 进行验证,然后结束 - 智能选择:如果最终准确率未达到 100%,系统会自动返回历史最高准确率对应的 prompt
验证机制说明
系统引入了 Verifier Agent(验证 Agent),确保改写的 prompt 真正有效:
- 验证时机:每次改写完成后,在进入下一轮迭代之前
- 验证目标:使用新 prompt 对上一轮预测中的 badcase(错误案例)进行验证
- 多候选评估:当使用遗传算法时,会对所有候选版本进行评估,选择最好的一个
- 接受标准:解决率 >= 验证阈值(默认 50%),否则拒绝此次改写
- 拒绝处理:
- 回滚到改写前的 prompt(基于回滚后的 prompt 重新改写,而不是最原始的 prompt)
- 将验证反馈信息传递给分析 Agent
- 重新分析错误案例(结合验证反馈)
- 重新改写 prompt(生成新的候选版本)
- 优势:避免无效的改写进入下一轮,确保每轮迭代都基于有效的 prompt
遗传算法机制说明
系统引入了 遗传算法(Genetic Algorithm),通过生成多个候选版本并选择最好的来提升优化效果:
- 候选生成:每次改写时,Rewrite Agent 会生成 n 个不同版本的 prompt(默认 3 个)
- 多样性策略:使用不同的 temperature(0.5-1.2)来增加候选版本的多样性
- 评估选择:Verifier Agent 评估所有候选版本,选择最好的一个进入下一轮
- 选择策略:
- 优先选择通过验证的候选中解决率最高的
- 如果没有通过验证的候选,选择解决率最高的
- 优势:通过探索多个优化方向,提高找到更好 prompt 的概率
杂交机制说明
系统引入了 Crossover Agent(杂交 Agent),融合两个最强候选的优势:
- 触发条件:当有两个或以上通过验证的候选时,自动触发杂交
- 杂交过程:
- 选择最强的两个通过验证的候选
- 分析两个候选各自解决的 badcase
- 融合两个候选的优势,生成杂交 prompt
- 验证对比:
- 对杂交 prompt 进行验证
- 对比杂交 prompt 和父代(最强的候选)的解决率
- 选择解决率更高的进入下一轮
- 优势:通过融合多个优秀候选的特点,可能生成更好的 prompt
Memory 机制说明
系统引入了 Memory Agent(记忆 Agent),它在每轮迭代的预测之后立即执行:
- 执行时机:在预测完成后、分析之前执行,确保能够对比当前轮次与上一轮次的完整预测结果
- 对比逻辑:对比上一轮使用的 prompt 与当前轮使用的 prompt(即上一轮 rewrite 的结果)、两轮的准确率变化、以及具体案例的预测变化
- 总结经验:分析 prompt 的更改内容(通过 diff 展示)、准确率变化趋势、具体案例的变化情况(改进、退化、预测改变但正确性不变)
- 生成经验文档:将总结的经验追加保存到独立的实验文件夹中
- 应用经验:在后续的改写过程中,Rewrite Agent 会读取并参考这些历史经验来优化 prompt
经验总结包含:
- 📊 迭代轮次和准确率变化趋势(上升/下降)
- 📝 Prompt 的具体更改内容(通过 diff 展示)
- 🎯 详细的案例变化分析:
- 哪些案例从错误变正确(改进)
- 哪些案例从正确变错误(退化)
- 哪些案例预测内容改变但正确性不变
- 💡 后续优化方向的建议
- 🔑 可复用的优化原则
实验隔离:
- 每次优化任务会自动生成唯一的
experiment_id - 每个任务的经验文件保存在
experiments/{experiment_id}/memory_experiences.txt - 不同任务之间的经验互不干扰,便于对比和管理
注意:
- Memory Agent 在第一次迭代时不会执行(因为没有上一轮的数据可对比)
- 从第二次迭代开始,每次预测完成后都会总结经验
- 达到最大迭代次数时,会执行
final_predict节点对最终优化后的 prompt 进行验证
安装
-
克隆或下载项目
-
创建虚拟环境(推荐使用 conda):
conda create -y python=3.10 -n AutoPrompt
conda activate AutoPrompt
- 安装依赖:
pip install -r requirements.txt
注意:如果使用其他虚拟环境工具(如 venv),也可以:
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
配置
配置 API Key
本项目支持两种 LLM 服务,你只需要配置其中一种:
- OpenAI(标准 OpenAI API)
- Azure OpenAI(Azure 上的 OpenAI 服务)
方式一:使用 OpenAI(标准 OpenAI API)
使用 .env 文件(推荐):
- 复制示例配置文件:
cp .env.example .env
- 编辑
.env文件,将your_openai_api_key_here替换为你的实际 API Key:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
获取 API Key:
- 访问 https://platform.openai.com/api-keys
- 登录你的 OpenAI 账号
- 点击 "Create new secret key" 创建新的 API Key
- 复制生成的 Key(只显示一次,请妥善保存)
方式二:使用 Azure OpenAI
使用 .env 文件(推荐):
- 复制示例配置文件:
cp .env.example .env
- 编辑
.env文件,取消注释 Azure OpenAI 相关配置,并填入你的实际值:
AZURE_OPENAI_API_KEY=你的Azure_API密钥
AZURE_OPENAI_ENDPOINT=https://your-resource-name.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT_NAME=你的部署名称(如 gpt-35-turbo)
AZURE_OPENAI_API_VERSION=2024-02-15-preview
获取 Azure OpenAI 配置信息:
- 在 Azure Portal 中,进入你的 Azure OpenAI 资源
- 在 "Keys and Endpoint" 页面可以找到 API Key 和 Endpoint
- 在 "Deployments" 页面可以看到部署名称
注意:
- 如果同时配置了 OpenAI 和 Azure OpenAI,系统会优先使用 Azure OpenAI
- 详细配置说明请查看 CONFIG.md
运行
python app.py
然后访问 http://localhost:5000
使用说明
-
上传数据集
- 支持 CSV、JSON、JSONL 格式
- CSV 文件应包含
input和ground_truth列(或类似名称) - JSON/JSONL 文件应包含
input和ground_truth字段 - 💡 快速测试:可以直接使用项目中的
example_data/example_dataset.csv
-
输入原始 Prompt
- 在文本框中输入你的初始 prompt
- Prompt 应该描述任务要求和期望的输出格式
- 💡 快速测试:可以复制
example_data/example_prompt.txt中的内容
-
设置参数
- 最大迭代轮次:设置优化迭代的上限(1-20,默认 3)
- 验证阈值:设置验证改写的严格程度(0-100%,默认 50%)
- 50%:宽松模式,解决一半 badcase 即可接受(默认)
- 100%:严格模式,必须解决所有 badcase
- 遗传算法候选数量:每次改写生成 n 个候选版本(1-10,默认 3)
- 1:不使用遗传算法
- 3-5:平衡效果和速度(推荐)
- 10:最大多样性,可能找到更好的 prompt,但耗时更长
- 点击"开始优化"按钮
-
查看结果
- 系统会自动进行多轮优化
- 显示准确率变化折线图(包含所有轮次的数据点)
- 显示最终优化后的 prompt(与原始 prompt 对比)
- 如果最终准确率未达到 100%,系统会自动选择历史最高准确率对应的 prompt
- 前端会标注 prompt 的来源(最终轮次或历史最高准确率)和对应的轮次
- 显示累积的优化经验(Memory Agent 总结的经验)
- 通过下拉框查看每轮迭代的详细结果(prompt、预测结果、改进建议)
- 实时日志窗口显示优化过程的详细信息,包括验证结果和回滚情况
- 系统会返回
experiment_id,可用于追踪本次实验
-
查看经验文件
- 每次任务的经验总结保存在
experiments/{experiment_id}/memory_experiences.txt - 经验文件包含了详细的优化过程记录和通用原则
- 可以在前端界面直接查看累积的经验内容
- 每次任务的经验总结保存在
数据集格式示例
项目提供了示例数据在 example_data/ 目录中,你可以直接使用它们进行测试。
CSV 格式示例
example_data/example_dataset.csv 是一个文本分类任务的数据集:
itemId Headline Typography
jxMuJYMZn7BCIg Daily life in RAJASTHAN, INDIA 🇮🇳- CITY vs RURAL 1
BB1pyNbo Review: INSANE 8-across Business Class on United's 777-200 1
AA1oW3oj 10 of the Coolest Cars Ever Made & 10 That Nobody Cares About 0
AA1okiqu BLACK FOREST Mega Cake!! _ How To Cake It 1
说明:
Headline列会被自动识别为输入列Typography列会被自动识别为标准答案列(0 或 1)itemId列会被保留但不参与预测
JSON 格式示例
[
{
"input": "Daily life in RAJASTHAN, INDIA 🇮🇳- CITY vs RURAL",
"ground_truth": "1"
},
{
"input": "10 of the Coolest Cars Ever Made & 10 That Nobody Cares About",
"ground_truth": "0"
}
]
JSONL 格式示例
{"input": "Daily life in RAJASTHAN, INDIA 🇮🇳- CITY vs RURAL", "ground_truth": "1"}
{"input": "10 of the Coolest Cars Ever Made & 10 That Nobody Cares About", "ground_truth": "0"}
项目结构
autoprompt-langgraph/
├── app.py # Flask 主应用
├── graph.py # LangGraph 工作流
├── utils.py # 工具函数(文件处理、数据加载)
├── agents/ # Agent 模块
│ ├── __init__.py # 模块初始化
│ ├── prediction_agent.py # 预测 Agent
│ ├── analysis_agent.py # 分析
Related Skills
node-connect
337.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
