了解 GEPA 如何利用 AI 引導的演化過程,自動最佳化大型語言模型 (LLM) 代理的提示 (Prompt)。
# 1. 安裝依賴套件
make setup
# 2. 觀看 GEPA 實際操作 (展示)
make demo
# 3. 設定 API 金鑰 (用於互動式測試)
export GOOGLE_API_KEY=your_api_key_here
# 4. 啟動 ADK 網站介面
make dev
# 5. 開啟 http://localhost:8000 並選擇 'gepa_agent'本教學透過一個處理退款與退貨的 模擬客服代理,來教導 GEPA 的概念。此代理存在一些已知的缺陷,可由 GEPA 進行最佳化:
初始的代理提示刻意設計得非常簡單:
您是一位樂於助人的客服代理。
請保持禮貌與專業。
使用可用的工具來協助客戶。
這個基本提示存在以下問題:
- ❌ 未明確要求身份驗證
- ❌ 未提及 30 天退貨政策
- ❌ 缺乏工具使用的順序結構
- ❌ 可能在未經適當檢查的情況下就進行退款
GEPA 透過一個 5 步驟的循環,自動地演化提示:
sequenceDiagram
autonumber
participant U as 🧪 使用當前提示詞運行代理<br/>(收集成功/失敗)
participant R as 🧠 LLM 反思<br/>(分析失敗原因)
participant G as 🔬 生成提示詞變體<br/>(突變/交叉)
participant V as 📊 驗證提示詞效果<br/>(使用驗證集)
participant S as 🌈 選擇最佳與多樣化提示詞<br/>(帕雷托前緣)
U->>R: 提供成功/失敗案例
R->>R: 分析失敗原因<br/>• 需要身份驗證<br/>• 檢查30天政策<br/>• 更清晰的解釋架構
R->>G: 輸出改進洞察
G->>G: 產生新提示詞變體<br/>• 突變:加入需求<br/>• 交叉:組合最佳特性
G->>V: 提供提示詞變體
V->>V: 評估成功率<br/>• 變體 A:65% (+15%)<br/>• 變體 B:72% (+22%)
V->>S: 回傳最佳結果
S->>U: 回到下一輪迭代(若尚未達到瓶頸)
初始提示: 40-50% 任務成功率
GEPA 迭代 1 後: 65% 成功率 (+15 個百分點)
GEPA 迭代 2 後: 72% 成功率 (+7 個百分點)
GEPA 迭代 3 後: 85% 成功率 (+13 個百分點)
...持續進行直到改進停滯
最終結果: 85-95% 成功率 (+35-45 個百分點!)
最佳化後的提示:
您是一位專業的客服代理。
關鍵要求:
1. 務必先驗證客戶身份
- 未經驗證絕不處理退款
- 使用 verify_customer_identity 工具
2. 務必檢查退貨政策
- 驗證 30 天退貨期限
- 若拒絕,請清楚解釋政策
3. 提供清楚的解釋
- 解釋所有決定
- 引用具體的訂單細節
工具使用順序:
- 第一步:verify_customer_identity
- 第二步:check_return_policy
- 第三步:process_refund (如果符合資格)
客服代理
├── 工具 1:verify_customer_identity
│ └─ 檢查訂單 ID + 電子郵件
│ └─ 回傳成功/失敗
│
├── 工具 2:check_return_policy
│ └─ 驗證 30 天退貨期限
│ └─ 回傳是否符合資格
│
└── 工具 3:process_refund
└─ 驗證後執行退款
└─ 回傳交易詳情
此教學代理會根據客戶情境進行評估:
成功情境:
- ✓ 客戶提供訂單 ID 和電子郵件
- ✓ 代理驗證身份
- ✓ 訂單在 30 天期限內
- ✓ 代理處理退款
- ✓ 結果:客戶滿意,退款已處理
失敗情境:
- ✗ 代理未經驗證即處理退款
- ✗ 代理忽略違反 30 天政策的情況
- ✗ 代理提供不清楚的解釋
- 結果:違反政策,客戶不滿
GEPA 會識別這些失敗模式,並演化提示以防止其發生。
gepa-optimization-agent/
├── gepa_agent/ # 代理實作
│ ├── __init__.py # 套件標記
│ ├── agent.py # ADK 代理 + 工具
│ └── .env.example # API 金鑰範本
│
├── tests/ # 測試套件
│ ├── test_agent.py # 代理測試
│ ├── test_imports.py # 匯入測試
│
├── Makefile # 建置指令
├── README.md # 本檔案
├── requirements.txt # Python 依賴套件
└── pyproject.toml # 套件設定
-
安裝依賴套件:
make setup
-
建立環境變數檔案:
cp gepa_agent/.env.example gepa_agent/.env
-
加入您的 API 金鑰: 編輯
gepa_agent/.env並加入:GOOGLE_API_KEY=your_api_key_here -
啟動代理:
make dev
- 免費 (Gemini API):https://aistudio.google.com/app/apikey
- 付費 (VertexAI):https://console.cloud.google.com/iam-admin/serviceaccounts
make dev
# 開啟 http://localhost:8000
# 點擊 'gepa_agent' 以選擇代理
# 在聊天室中輸入訊息測試 1:身份驗證
使用者:「我想為訂單 ORD-12345 辦理退款」
預期:代理會要求驗證電子郵件
提示檢查:代理在繼續之前是否進行了驗證?
測試 2:遵守政策
使用者:「我可以退回 90 天前的訂單 ORD-12345 嗎?」
預期:代理會檢查政策並解釋為何不符合資格
提示檢查:代理是否知道 30 天的限制?
測試 3:清楚的解釋
使用者:「為什麼我的退款被拒絕了?」
預期:代理會提供詳細、清楚的解釋
提示檢查:代理是否清楚地解釋了決定?
make testmake test-coverage
# 在 htmlcov/index.html 中產生覆蓋率報告測試涵蓋:
- ✓ 代理設定與初始化
- ✓ 工具宣告與非同步執行
- ✓ GEPA 最佳化概念
- ✓ 專案結構驗證
- ✓ 匯入正確性
完成此教學後,您將了解:
-
什麼是 GEPA?
- 用於提示演化的遺傳演算法
- 用於解決方案多樣性的帕雷托前緣
- 用於引導式改進的 LLM 反思
-
為何 GEPA 有效
- 從失敗中學習,而不僅僅是獎勵
- 高效率地測試多種變體
- 維持多樣性以避免陷入局部最佳解
-
何時使用 GEPA
- 代理有明確的成功/失敗指標
- 評估是自動化/快速的
- 需要 20-40% 的效能提升
- 有 1-3 小時可用於最佳化
-
如何應用 GEPA
- 定義評估指標
- 建立評估資料集
- 執行 GEPA 最佳化
- 部署最佳化後的提示
🎬 GEPA 即時演化展示,參考 GEPA.md
在深入研究程式碼之前,先來看看 GEPA 的實際操作:
make demo這會執行一個互動式展示,顯示:
- 種子提示 (Seed Prompt) - 一個薄弱、通用的基準
- 評估 (Evaluation) - 針對 5 種情境進行測試 (0% 成功率)
- 分析 (Analysis) - 種子提示失敗的原因
- 演化 (Evolution) - 一個解決了這些問題的改進版提示
- 驗證 (Validation) - 重新測試相同的情境 (100% 成功率!)
- 結果 (Results) - 顯示從 0% → 100% 改進的指標
展示情境:
- ✅ 有效的退款請求 (快速批准)
- ❌ 無效的電子郵件 (安全性阻擋)
- ❌ 超過 30 天期限 (違反政策)
- ✅ 剛好在 30 天的邊界 (邊界案例)
- ❌ 緊急請求 (需要先進行驗證)
您將會看到:
- 清晰的「之前/之後」比較
- 已識別的具體失敗
- 已進行的確切改進
- 可衡量的效能增益
此展示驗證了 GEPA 的確有效!
from gepa_agent import root_agent
# 這是 ADK 的進入點
# 它是在網站介面中運行的代理
# 最初使用 INITIAL_PROMPT
# 可以使用 GEPA 進行演化from gepa_agent.agent import create_support_agent
# 使用初始提示
agent = create_support_agent()
# 或使用自訂提示 (如同在 GEPA 最佳化期間所做)
optimized_prompt = """..."""
agent = create_support_agent(prompt=optimized_prompt)三個工具展示了不同的情境:
-
verify_customer_identity
- 模擬身份驗證
- 接收 order_id 和 email
- 回傳成功/失敗
-
check_return_policy
- 模擬政策驗證
- 檢查 30 天退貨期限
- 回傳資格狀態
-
process_refund
- 模擬退款處理
- 要求所有檢查都先通過
- 回傳交易詳情
# 基準效能測量
python -c "
from gepa_agent import root_agent
# 在 10 個測試情境上執行代理
# 測量成功率 (例如, 40-50%)
"識別失敗情境:
- 缺少身份驗證
- 違反政策
- 解釋不清楚
使用 gemini-2.5-pro 進行分析:
- 為什麼在未經驗證的情況下處理了退款?
- 為什麼政策被忽略了?
- 為什麼解釋不清楚?
建立改進的提示:
- 突變:增加明確的要求
- 交配:結合最佳特點
- 優化:使用洞察
在驗證集上進行測試:
- 變體 A:65% 成功率
- 變體 B:72% 成功率
- 變體 C:68% 成功率
保留最佳且多樣化的提示:
- B (72%) - 整體最佳
- A (65%) - 替代方法
- 也許 C (68%) - 不同的策略
使用前緣提示進行下一次迭代:
- 收集 B, A, C 的新失敗案例
- 反思新的模式
- 產生下一批變體
- 評估與選擇
重複直到改進停滯。
迭代 | 最佳分數 | 改進幅度 | 工具/提示
-----------|-----------|-------------|---------------
0 (種子) | 50% | 基準線 | 初始簡單提示
1 | 65% | +15% | 4 個變體
2 | 72% | +7% | 5 個變體
3 | 85% | +13% | 5 個變體
4 | 88% | +3% | 4 個變體
5 | 90% | +2% | 達到停滯期
# 解決方案:確保套件已安裝
pip install -e .
# 若需要,請重新安裝
pip install -e . --force-reinstall# 解決方案:設定驗證
export GOOGLE_API_KEY=your_key_here
# 或使用 .env 檔案
cp gepa_agent/.env.example gepa_agent/.env
# 編輯 .env 並加入您的金鑰# 解決方案:安裝 pytest-asyncio
pip install pytest-asyncio
# 然後執行測試
make test# 解決方案:安裝 ADK CLI
pip install google-adk>=0.1.4
# 然後再試一次
make dev官方資源:
-
GEPA 研究論文 - 史丹佛大學自然語言處理 (Stanford NLP) 的原始研究
- "GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning"
- 作者:Lakshya A Agrawal 等人
- 發表日期:2025 年 7 月
-
DSPy 框架 - GEPA 是 DSPy 的一部分
-
教學實作 - 此可運作的範例
gepa_demo.py- 完整註解的演化展示gepa_agent/agent.py- 帶有註解的代理實作tests/- 全面的測試套件,展示 GEPA 概念
要執行實際的 GEPA 最佳化 (不僅是此概念展示):
-
安裝支援 GEPA 的 DSPy:
pip install dspy-ai
-
建立使用此代理的評估函數
-
執行 GEPA 最佳化循環
-
部署最佳化後的提示
不要只保留「最好」的提示,而是保留多個多樣化的提示:
- 效能最佳的
- 替代方法的
- 不同優勢的
這種多樣性使 GEPA 能在未來的迭代中進行更好的探索。
GEPA 的關鍵創新:
- 分析失敗的「原因」
- 提取可行的洞察
- 引導提示的演化
- 不僅是隨機突變
應用於提示的成熟技術:
- 突變 (Mutation):根據洞察進行修改
- 交配 (Crossover):結合多個提示的特點
- 選擇 (Selection):保留最佳且多樣化的
- 演化 (Evolution):世代改進
- 核心概念:GEPA (遺傳演算法-帕雷托提示最佳化) 是一種利用 AI 引導的演化過程,自動最佳化大型語言模型 (LLM) 代理提示的方法。
- 關鍵技術:
- 遺傳演算法:透過突變、交配和選擇等操作,逐步改進提示。
- LLM 反思:利用 LLM 分析代理失敗的原因,並提供改進建議。
- 帕雷托前緣:在選擇過程中保留一組多樣化的高效能提示,以避免陷入局部最佳解。
- 重要結論:GEPA 能夠系統性地從失敗中學習,自動演化出更強健、更符合特定需求的提示,顯著提升代理的任務成功率 (可從 40-50% 提升至 85-95%)。
- 行動項目:
- 依照「快速入門」指南安裝依賴、設定 API 金鑰並啟動展示。
- 透過
make demo觀看模擬的 GEPA 演化過程。 - 理解 GEPA 的 5 步驟循環:執行、反思、產生、評估、選擇。
- 學習如何將 GEPA 應用於自己的代理以進行最佳化。