SkillAgentSearch skills...

AutoPrompt

一个简单但是典型的autoprompt框架, 集成了memory, 遗传算法, 反思等机制

Install / Use

/learn @heng380/AutoPrompt
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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 协作优化:
    1. 预测 Agent: 根据数据集和当前 prompt 进行预测
    2. 记忆 Agent: 从 prompt 更改和准确率变化中总结经验,形成可复用的优化知识库
    3. 分析 Agent: 分析错误案例并给出修改意见
    4. 改写 Agent: 根据分析结果和历史经验改写 Prompt,支持生成多个候选版本(遗传算法)
    5. 验证 Agent: 验证改写后的 prompt 是否能解决目标 badcase,评估所有候选版本并选择最好的
    6. 杂交 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

关键流程说明

  1. 预测阶段:使用当前 prompt 对数据集中的所有样本进行预测
  2. 记忆阶段(从第二轮开始):对比本轮与上一轮的 prompt、准确率和具体案例变化,生成可复用的优化经验
  3. 分析阶段:分析当前预测结果中的错误案例,识别问题并给出改进建议
  4. 改写阶段(遗传算法):
    • 结合分析建议和历史优化经验,生成 n 个候选版本的 prompt(默认 3 个)
    • 使用不同的 temperature(0.5-1.2)增加多样性
    • 每个候选版本都是独立的优化尝试
  5. 验证阶段
    • 对所有候选版本进行评估
    • 选择策略:优先选择通过验证的候选中解决率最高的;如果没有通过验证的,选择解决率最高的
    • 记录所有通过验证的候选(用于后续杂交)
    • 接受条件:解决率 >= 验证阈值(默认 50%)
    • 拒绝处理:如果所有候选都未通过验证,回滚到改写前的 prompt,重新分析并改写
  6. 杂交阶段(Crossover):
    • 如果有两个或以上通过验证的候选,执行杂交:
      • 融合最强的两个候选的优势
      • 生成杂交 prompt
      • 验证杂交 prompt
      • 对比杂交 prompt 和父代(最强的候选),选择解决率更高的进入下一轮
    • 如果只有一个通过验证的候选,跳过杂交,直接进入下一轮
  7. 终止条件
    • 所有预测都正确:直接结束,返回当前优化后的 prompt
    • 达到最大迭代次数:会执行一次 final_predict 节点,使用最终优化后的 prompt 进行验证,然后结束
    • 智能选择:如果最终准确率未达到 100%,系统会自动返回历史最高准确率对应的 prompt

验证机制说明

系统引入了 Verifier Agent(验证 Agent),确保改写的 prompt 真正有效:

  1. 验证时机:每次改写完成后,在进入下一轮迭代之前
  2. 验证目标:使用新 prompt 对上一轮预测中的 badcase(错误案例)进行验证
  3. 多候选评估:当使用遗传算法时,会对所有候选版本进行评估,选择最好的一个
  4. 接受标准:解决率 >= 验证阈值(默认 50%),否则拒绝此次改写
  5. 拒绝处理
    • 回滚到改写前的 prompt(基于回滚后的 prompt 重新改写,而不是最原始的 prompt)
    • 将验证反馈信息传递给分析 Agent
    • 重新分析错误案例(结合验证反馈)
    • 重新改写 prompt(生成新的候选版本)
  6. 优势:避免无效的改写进入下一轮,确保每轮迭代都基于有效的 prompt

遗传算法机制说明

系统引入了 遗传算法(Genetic Algorithm),通过生成多个候选版本并选择最好的来提升优化效果:

  1. 候选生成:每次改写时,Rewrite Agent 会生成 n 个不同版本的 prompt(默认 3 个)
  2. 多样性策略:使用不同的 temperature(0.5-1.2)来增加候选版本的多样性
  3. 评估选择:Verifier Agent 评估所有候选版本,选择最好的一个进入下一轮
  4. 选择策略
    • 优先选择通过验证的候选中解决率最高的
    • 如果没有通过验证的候选,选择解决率最高的
  5. 优势:通过探索多个优化方向,提高找到更好 prompt 的概率

杂交机制说明

系统引入了 Crossover Agent(杂交 Agent),融合两个最强候选的优势:

  1. 触发条件:当有两个或以上通过验证的候选时,自动触发杂交
  2. 杂交过程
    • 选择最强的两个通过验证的候选
    • 分析两个候选各自解决的 badcase
    • 融合两个候选的优势,生成杂交 prompt
  3. 验证对比
    • 对杂交 prompt 进行验证
    • 对比杂交 prompt 和父代(最强的候选)的解决率
    • 选择解决率更高的进入下一轮
  4. 优势:通过融合多个优秀候选的特点,可能生成更好的 prompt

Memory 机制说明

系统引入了 Memory Agent(记忆 Agent),它在每轮迭代的预测之后立即执行:

  1. 执行时机:在预测完成后、分析之前执行,确保能够对比当前轮次与上一轮次的完整预测结果
  2. 对比逻辑:对比上一轮使用的 prompt 与当前轮使用的 prompt(即上一轮 rewrite 的结果)、两轮的准确率变化、以及具体案例的预测变化
  3. 总结经验:分析 prompt 的更改内容(通过 diff 展示)、准确率变化趋势、具体案例的变化情况(改进、退化、预测改变但正确性不变)
  4. 生成经验文档:将总结的经验追加保存到独立的实验文件夹中
  5. 应用经验:在后续的改写过程中,Rewrite Agent 会读取并参考这些历史经验来优化 prompt

经验总结包含

  • 📊 迭代轮次和准确率变化趋势(上升/下降)
  • 📝 Prompt 的具体更改内容(通过 diff 展示)
  • 🎯 详细的案例变化分析:
    • 哪些案例从错误变正确(改进)
    • 哪些案例从正确变错误(退化)
    • 哪些案例预测内容改变但正确性不变
  • 💡 后续优化方向的建议
  • 🔑 可复用的优化原则

实验隔离

  • 每次优化任务会自动生成唯一的 experiment_id
  • 每个任务的经验文件保存在 experiments/{experiment_id}/memory_experiences.txt
  • 不同任务之间的经验互不干扰,便于对比和管理

注意

  • Memory Agent 在第一次迭代时不会执行(因为没有上一轮的数据可对比)
  • 从第二次迭代开始,每次预测完成后都会总结经验
  • 达到最大迭代次数时,会执行 final_predict 节点对最终优化后的 prompt 进行验证

安装

  1. 克隆或下载项目

  2. 创建虚拟环境(推荐使用 conda):

conda create -y python=3.10 -n AutoPrompt
conda activate AutoPrompt
  1. 安装依赖:
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 服务,你只需要配置其中一种:

  1. OpenAI(标准 OpenAI API)
  2. Azure OpenAI(Azure 上的 OpenAI 服务)

方式一:使用 OpenAI(标准 OpenAI API)

使用 .env 文件(推荐)

  1. 复制示例配置文件:
cp .env.example .env
  1. 编辑 .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 文件(推荐)

  1. 复制示例配置文件:
cp .env.example .env
  1. 编辑 .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

使用说明

  1. 上传数据集

    • 支持 CSV、JSON、JSONL 格式
    • CSV 文件应包含 inputground_truth 列(或类似名称)
    • JSON/JSONL 文件应包含 inputground_truth 字段
    • 💡 快速测试:可以直接使用项目中的 example_data/example_dataset.csv
  2. 输入原始 Prompt

    • 在文本框中输入你的初始 prompt
    • Prompt 应该描述任务要求和期望的输出格式
    • 💡 快速测试:可以复制 example_data/example_prompt.txt 中的内容
  3. 设置参数

    • 最大迭代轮次:设置优化迭代的上限(1-20,默认 3)
    • 验证阈值:设置验证改写的严格程度(0-100%,默认 50%)
      • 50%:宽松模式,解决一半 badcase 即可接受(默认)
      • 100%:严格模式,必须解决所有 badcase
    • 遗传算法候选数量:每次改写生成 n 个候选版本(1-10,默认 3)
      • 1:不使用遗传算法
      • 3-5:平衡效果和速度(推荐)
      • 10:最大多样性,可能找到更好的 prompt,但耗时更长
    • 点击"开始优化"按钮
  4. 查看结果

    • 系统会自动进行多轮优化
    • 显示准确率变化折线图(包含所有轮次的数据点)
    • 显示最终优化后的 prompt(与原始 prompt 对比)
      • 如果最终准确率未达到 100%,系统会自动选择历史最高准确率对应的 prompt
      • 前端会标注 prompt 的来源(最终轮次或历史最高准确率)和对应的轮次
    • 显示累积的优化经验(Memory Agent 总结的经验)
    • 通过下拉框查看每轮迭代的详细结果(prompt、预测结果、改进建议)
    • 实时日志窗口显示优化过程的详细信息,包括验证结果和回滚情况
    • 系统会返回 experiment_id,可用于追踪本次实验
  5. 查看经验文件

    • 每次任务的经验总结保存在 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

View on GitHub
GitHub Stars9
CategoryDevelopment
Updated1mo ago
Forks0

Languages

Python

Security Score

70/100

Audited on Feb 2, 2026

No findings