0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python×Claude API】実務で使える「プロンプト自動最適化&品質スコアリング」パイプラインの実装

0
Last updated at Posted at 2026-11-11

こんにちは、AIハックラボ(@ai_hack_lab)です。

前回公開した【Python×Claude API】プロンプト販売・業務自動化で即戦力になる「プロンプト自動生成・品質検証パイプライン」の実装では、プロンプトを自動生成し、出力を検証する仕組みを解説しました。

本記事はその実務編です。生成したプロンプトを評価→改善→再評価のループで自律的に磨き上げ、目標スコアに到達させるパイプラインを、コピペで動くコード全文つきで公開します。


業務自動化やAI副業(プロンプト販売・受託作成)において、最も時間と手間がかかるのが「プロンプトの品質検証と改善(リファクタリング)」です。

一度作成したプロンプトが期待通りの精度を出しているかを人間が1回ずつ目視で確認し、手動で手直ししていると、それだけで何時間も溶けてしまいます。

そこで本記事では、AnthropicのClaude 3.5 Sonnet APIを活用し、プロンプトの出力を自動で評価(LLM-as-a-Judge)し、目標スコア(例:80点以上)に達するまでプロンプト自体を自己改善ループでブラッシュアップし続ける「プロンプト自動最適化パイプライン」の完全実装を解説します。

コピペでそのまま動くPythonスクリプトも全文掲載していますので、業務効率化や商材開発にぜひご活用ください。


1. システムの全体構成(自己改善ループ)

本パイプラインは、以下の3つの役割(Agent)を分離して連携させるアーキテクチャを採用しています。

  1. Target Agent(実行役): 現在のプロンプトを用いて、テストケースに対する回答を生成する。
  2. Evaluator Agent(評価役): 生成された回答を、あらかじめ定めた評価基準(論理性・網羅性・具体性・トーンなど)に基づき100点満点で採点し、減点理由と改善アドバイスを出力する。
  3. Optimizer Agent(改善役): 評価役のフィードバックを受け取り、より高得点を取れるようプロンプトの指示文を自動修正する。

このループを目標スコアに到達するか、最大試行回数(max_iterations)に達するまで自動で繰り返します。

[初期プロンプト] 
       │
       ▼
 ┌──────────────┐
 │ Target Agent │ ── (回答生成) ──► ┌─────────────────┐
 └──────────────┘                    │ Evaluator Agent │
       ▲                             └─────────────────┘
       │                                      │
 (プロンプト更新)                        (スコア & 改善点)
       │                                      ▼
 ┌─────────────────┐                 [スコア >= 目標値?]
 │ Optimizer Agent │ ◄── (改善指示) ─── No (再試行)
 └─────────────────┘                          │
                                             Yes
                                              ▼
                                       【最適化完了!】

2. 実装コード(Python × anthropic SDK)

以下のコードは、Python 3.10以上および anthropic パッケージで動作します。

pip install anthropic pydantic
import os
import json
from typing import Dict, Any, List
from pydantic import BaseModel, Field
import anthropic

client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
MODEL_NAME = "claude-3-5-sonnet-20241022"

class EvaluationResult(BaseModel):
    score: int = Field(description="100点満点での品質スコア(0〜100)")
    strengths: List[str] = Field(description="良かった点")
    weaknesses: List[str] = Field(description="改善すべき弱点・不足点")
    feedback: str = Field(description="プロンプト改善への具体的なアドバイス")

def run_target_prompt(system_prompt: str, user_input: str) -> str:
    """現在のプロンプトで出力を生成する"""
    message = client.messages.create(
        model=MODEL_NAME,
        max_tokens=1500,
        system=system_prompt,
        messages=[{"role": "user", "content": user_input}]
    )
    return message.content[0].text

def evaluate_output(criteria: str, user_input: str, output: str) -> EvaluationResult:
    """生成された出力を厳格に採点・評価する(LLM-as-a-Judge)"""
    eval_system = f"""
あなたは厳格なプロンプト品質評価官です。
以下の【評価基準】に基づき、入力に対する出力を厳しく客観的に採点(100点満点)してください。

【評価基準】
{criteria}

出力は必ず以下のJSONフォーマットのみを返してください。
{{
  "score": 0〜100の整数,
  "strengths": ["良かった点1", "良かった点2"],
  "weaknesses": ["不足点1", "不足点2"],
  "feedback": "プロンプトをどう修正すれば満点に近づくかの具体的指示"
}}
"""
    prompt = f"【ユーザー入力】:\n{user_input}\n\n【評価対象の出力】:\n{output}"
    
    response = client.messages.create(
        model=MODEL_NAME,
        max_tokens=1000,
        temperature=0.0,
        system=eval_system,
        messages=[{"role": "user", "content": prompt}]
    )
    
    raw_text = response.content[0].text
    # JSONパース(マークダウンフェンス対策)
    clean_json = raw_text.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()
    data = json.loads(clean_json)
    return EvaluationResult(**data)

def optimize_prompt(current_prompt: str, criteria: str, eval_result: EvaluationResult) -> str:
    """評価結果を元にプロンプトをブラッシュアップする"""
    opt_system = """
あなたはプロンプトエンジニアリングの世界的エキスパートです。
既存のプロンプトと評価結果を受け取り、評価基準で満点を獲得できるよう、指示文・制約条件・出力フォーマットを洗練させてください。
返却するのは「改善後のプロンプト本文のみ」です。余計な解説は一切含めないでください。
"""
    prompt = f"""
【現在のプロンプト】:
{current_prompt}

【達成すべき評価基準】:
{criteria}

【直前の評価スコア】: {eval_result.score}点
【弱点・不足点】:
{json.dumps(eval_result.weaknesses, ensure_ascii=False)}

【改善フィードバック】:
{eval_result.feedback}
"""
    response = client.messages.create(
        model=MODEL_NAME,
        max_tokens=2000,
        temperature=0.3,
        system=opt_system,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text.strip()

def run_prompt_optimization_pipeline(
    initial_prompt: str,
    test_input: str,
    criteria: str,
    target_score: int = 85,
    max_loops: int = 3
) -> Dict[str, Any]:
    """最適化ループを実行するメイン関数"""
    current_prompt = initial_prompt
    history = []
    
    print("🚀 プロンプト自動最適化パイプラインを開始します...")
    
    for i in range(1, max_loops + 1):
        print(f"\n--- [Iteration {i}/{max_loops}] ---")
        
        # 1. 実行
        output = run_target_prompt(current_prompt, test_input)
        
        # 2. 評価
        eval_res = evaluate_output(criteria, test_input, output)
        print(f"📊 評価スコア: {eval_res.score}点")
        print(f"💡 改善点: {', '.join(eval_res.weaknesses)}")
        
        history.append({
            "iteration": i,
            "prompt": current_prompt,
            "score": eval_res.score,
            "output": output,
            "feedback": eval_res.feedback
        })
        
        # 目標達成判定
        if eval_res.score >= target_score:
            print(f"🎉 目標スコア({target_score}点)を達成しました!最適化を終了します。")
            break
            
        if i < max_loops:
            print("🔄 プロンプトを自己改善中...")
            current_prompt = optimize_prompt(current_prompt, criteria, eval_res)
            
    return {
        "final_prompt": current_prompt,
        "final_score": history[-1]["score"],
        "iterations": len(history),
        "history": history
    }

3. 実践での活用例(ビジネスメール作成プロンプトの改善)

例えば、雑に書いた初期プロンプト:

あなたは優秀なビジネスマンです。問い合わせに対する丁寧な返信メールを書いてください。

これを本パイプラインに投入し、「敬語の正確さ」「相手の意図への共感」「次のアクションの明確化(期限・担当者)」「簡潔さ」を基準として採点させると、わずか2回のループで以下のような完成度の高いプロンプトへ自動進化します。

あなたは上場企業のカスタマーサクセスリードです。
顧客からの問い合わせに対して、信頼感を最大化し、次アクションを円滑に進める返信メールを作成してください。

【必須遵守事項】
1. 冒頭で問い合わせへの感謝と、相手の状況に対する共感を1文添えること。
2. 結論を最初に明記し、回答理由は箇条書き(最大3点)で構造化すること。
3. 曖昧な表現(「なるべく早く」等)を排除し、具体的な期限と担当窓口を提示すること。
4. 全体を300〜400字以内にまとめ、相手の読む負荷を最小化すること。

4. まとめ:自動化でAI副業・実務のROIを最大化する

プロンプトの作成と検証を自動化することで、コンテンツ制作や受託案件のクオリティを担保しながら、作業時間を大幅に削減できます。

AIを「単なるチャットツール」として使う段階から、「システムに組み込んで自律稼働させる」段階へシフトすることが、これからのAI時代に圧倒的な成果を出す鍵となります。


📚 参考リンク・公式教材

当ラボ(AIハックラボ)では、AI自動化やプロンプトマネタイズの実践ノウハウを各媒体で公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?