現場で鍛えるAIエージェント!OpenPipe/ARTでマルチステップタスクを自動化


現場で鍛えるAIエージェント!OpenPipe/ARTでマルチステップタスクを自動化

OpenPipe/ART

2025-07-18

OpenPipe/ARTは、まるで熟練のシェフを育てるかのように、マルチステップのエージェントを実世界のタスクで訓練するための強力なツールなんです。特に、大規模言語モデル(LLM)のようなエージェントに「現場でのOJT(On-the-Job Training)」を施すことができるのが大きな特徴です。

「GRPO(Generalized Proximal Policy Optimization)」という、ちょっと難しい名前の技術を使っていますが、これはエージェントがより賢く、より効率的にタスクをこなせるようになるための「特別な訓練方法」だと思ってください。Qwen2.5, Qwen3, Llama, Kimiなど、様々なLLMに対応しています。

ソフトウェアエンジニアの皆さん、普段の業務でこんな課題に直面していませんか?

複雑なワークフローの自動化が難しい…

LLMを使ったアプリケーションの精度がなかなか上がらない…

ユーザーの行動パターンに合わせて、システムが自律的に改善してほしい…

特定の業務ドメインに特化した、賢いエージェントを育成したい…

OpenPipe/ARTは、これらの課題を解決するための強力な「秘密兵器」になります!

インテリジェントな顧客サポートシステム

ユーザーの問い合わせ履歴や行動パターンを学習し、よりパーソナライズされた、多段階のサポートを自動で行うチャットボットを開発できます。

複雑なデータ分析ワークフローの自動化

複数のツールやAPIを組み合わせて、データの取得、前処理、分析、レポート生成までの一連のタスクを自律的に実行するエージェントを構築できます。例えば、異常検知やトレンド分析など。

パーソナライズされたコンテンツ推薦システム

ユーザーの閲覧履歴、評価、反応などから、次にどんなコンテンツを提示すればユーザー満足度が最大化するかを学習し、最適な推薦を行うエージェントを育てられます。

コード生成・リファクタリング支援

開発者の意図を汲み取り、複数ステップにわたるコードの生成、既存コードのリファクタリング提案、テストコードの自動生成などを行うAIアシスタントを強化できます。

要するに、「人間が手動で行っていた、繰り返し発生する複雑なタスク」を、AIエージェントに自律的に学習させ、実行させることができるようになるんです。まるで、あなたのチームにもう一人、優秀なAIエンジニアが加わるようなものですね!

さあ、OpenPipe/ARTをあなたのプロジェクトに導入する「レシピ」を見ていきましょう!基本的にはPython環境が必要です。

まずは、OpenPipe/ARTをインストールします。Pythonのパッケージ管理ツールpipを使います。

pip install openpipe-art

LLMを使うためには、APIキーなどの設定が必要です。例えば、OpenAIのモデルを使う場合は、環境変数にAPIキーを設定します。

export OPENAI_API_KEY="あなたのOpenAI APIキー"

あるいは、コード内で直接設定することも可能です。

OpenPipe/ARTは、様々なLLMを「メイン食材」として利用できます。使いたいLLMに合わせて設定します。例えば、Llama 3を使う場合など。

では、実際にOpenPipe/ARTを使って、エージェントを訓練する「調理」の様子を見てみましょう。ここでは、簡単なマルチステップのタスクを例に挙げます。

シナリオ
「与えられた都市の天気予報を調べ、その都市の今日のニュースのヘッドラインを教えてくれるエージェント」を訓練してみましょう。

from openpipe_art.agent import Agent, Step
from openpipe_art.environment import Environment
from openpipe_art.trainer import GRPOConfig, Trainer
import os

# 1. ツール(調理器具)の定義 
# エージェントが使える「道具」を定義します。
class WeatherTool:
    def get_weather(self, city: str) -> str:
        # 実際にはここに外部API呼び出しのロジックが入ります
        if city == "東京":
            return "東京の天気は晴れ時々曇り、最高気温28度です。"
        elif city == "大阪":
            return "大阪の天気は雨、最高気温25度です。"
        else:
            return f"{city}の天気情報は現在取得できません。"

class NewsTool:
    def get_news_headlines(self, city: str) -> str:
        # 実際にはここに外部API呼び出しのロジックが入ります
        if city == "東京":
            return "東京のニュースヘッドライン: 渋谷に新しいランドマークがオープン。"
        elif city == "大阪":
            return "大阪のニュースヘッドライン: ユニバーサル・スタジオ・ジャパンで新アトラクション発表。"
        else:
            return f"{city}のニュースヘッドラインは現在取得できません。"

# 2. エージェントの定義(シェフのレシピ) ‍
# エージェントが実行するステップを定義します。
class WeatherNewsAgent(Agent):
    def __init__(self):
        super().__init__()
        self.weather_tool = WeatherTool()
        self.news_tool = NewsTool()

    def run(self, input_data: str):
        # ステップ1: 都市名を特定する
        yield Step(
            name="identify_city",
            prompt=f"以下の情報から都市名を特定してください: {input_data}",
            target_model="openai/gpt-3.5-turbo" # 使用するLLMを指定
        )
        # ステップ2: 天気情報を取得する
        city = self.get_step_result("identify_city")
        weather_info = self.weather_tool.get_weather(city)
        yield Step(
            name="get_weather_info",
            result=weather_info,
            target_model="openai/gpt-3.5-turbo"
        )
        # ステップ3: ニュースのヘッドラインを取得する
        news_headlines = self.news_tool.get_news_headlines(city)
        yield Step(
            name="get_news_headlines",
            result=news_headlines,
            target_model="openai/gpt-3.5-turbo"
        )
        # ステップ4: 結果をまとめる
        final_output = f"{city}の天気: {weather_info}\n{city}のニュースヘッドライン: {news_headlines}"
        yield Step(
            name="summarize_results",
            result=final_output,
            target_model="openai/gpt-3.5-turbo"
        )

# 3. 環境の定義(調理場) 
# エージェントが訓練される「環境」を定義します。
class WeatherNewsEnvironment(Environment):
    def get_initial_state(self):
        # 訓練データとして、異なる都市名を提供します
        return {"input_data": "東京の今日の天気とニュースを教えてください。"}

    def get_reward(self, agent_output: str, initial_state: dict) -> float:
        # エージェントの出力がどれだけ「良い」かを評価するロジック
        # ここでは、出力に天気とニュースの両方が含まれていれば報酬を与える簡単な例
        if "天気" in agent_output and "ニュース" in agent_output:
            return 1.0 # 成功報酬
        return 0.0 # 失敗報酬

# 4. トレーナーの設定と実行(訓練開始!) 
config = GRPOConfig(
    num_episodes=5, # 訓練のエピソード数
    learning_rate=0.001,
    # その他のGRPOパラメータ...
)

trainer = Trainer(
    agent_class=WeatherNewsAgent,
    environment_class=WeatherNewsEnvironment,
    config=config
)

print(" 訓練開始! ")
trained_agent = trainer.train()
print(" 訓練完了! ")

# 訓練されたエージェントを使ってみる 
print("\n--- 訓練済みエージェントによる実行 ---")
test_input_tokyo = "東京の今日の天気とニュースは?"
print(f"入力: {test_input_tokyo}")
result_tokyo = trained_agent.run_agent(test_input_tokyo)
print(f"出力: {result_tokyo}")

test_input_osaka = "大阪の今日の天気とニュースを教えてください!"
print(f"入力: {test_input_osaka}")
result_osaka = trained_agent.run_agent(test_input_osaka)
print(f"出力: {result_osaka}")

test_input_kyoto = "京都の今日の天気とニュースを教えてください。"
print(f"入力: {test_input_kyoto}")
result_kyoto = trained_agent.run_agent(test_input_kyoto)
print(f"出力: {result_kyoto}")

WeatherTool & NewsTool
これらはエージェントが外部と連携するための「道具」です。実際には、天気APIやニュースAPIを呼び出すロジックをここに記述します。

WeatherNewsAgent
これが私たちが訓練したい「シェフ」となるエージェントです。

runメソッド内で、yield Step(...)を使って、エージェントが実行するマルチステップのタスクを定義しています。

target_modelで、そのステップでどのLLMを使用するかを指定できます。

self.get_step_result()を使って、前のステップの結果を次のステップに渡すことができます。

WeatherNewsEnvironment
エージェントを訓練する「環境」です。

get_initial_state()で、訓練の開始時の状態(今回の場合はユーザーからの問い合わせ)を提供します。

get_reward()で、エージェントがどれだけ良いパフォーマンスを発揮したかに対する「報酬」を定義します。この報酬を最大化するようにエージェントは学習します。

Trainer
GRPOConfigで訓練の設定(エピソード数、学習率など)を行い、Trainerインスタンスを作成してtrain()メソッドを呼び出すことで、エージェントの訓練が開始されます。

このコードを実行すると、OpenPipe/ARTが定義された環境内でエージェントをシミュレーションし、GRPOアルゴリズムを使って、より良い意思決定ができるようにエージェントを自動的に改善していきます。

OpenPipe/ARTは、「実世界の複雑なタスクを、マルチステップで自律的にこなすAIエージェント」を育成するための強力なフレームワークです。まるで、優秀な見習いシェフにOJTを施し、やがて一人前の料理人に育てるように、皆さんのAIアプリケーションをより賢く、より実用的なものへと進化させることができます。


OpenPipe/ART




【吉野家コント解説】AIエージェント開発を変える!Agent Lightningが実現する「具材とご飯の完全分離」

店員(あなた) いらっしゃいませ!吉野家へようこそ!お客様、今日は何になさいますか?お客様(AIエージェント開発者) えーっと、今作ってるAIエージェントの性能を上げたくてね。強化学習(RL)で賢くしたいんだけど、今までのやり方だとエージェントのコードと学習の仕組みがベタベタにくっついちゃってて、ちょっと変えたいだけでも大工事なんだよ!まるで、牛丼の具材とご飯が全部最初からかき混ぜられてるみたいで、つゆだくの調整すら大変でさ!


LLM開発を劇的に効率化!Unsloth AI がもたらす GPU メモリ70%削減の衝撃

unslothai/unslothは、大規模言語モデル(LLM)のファインチューニングと強化学習を超高速で行うためのライブラリです。「ファインチューニングって、GPUメモリを大量に消費して、時間もかかるし、もううんざりだ. ..」そう思っていませんか?私も同じです。しかし、unslothを使えば、その悩みが解消されます。


ドラえもんの道具で解説!RD-Agentがもたらす開発革命

研究開発(R&D)を自動化してくれる、まさに「開発者版どこでもドア」とでもいうべきすごい技術なんです。「RD-Agent」は、AIを使ってAIの研究開発を自動化するためのツールです。まるで優秀なAIアシスタントがチームに入ってくれるようなイメージです。


LLM開発最前線!happy-llmでAgent・RAGを実践的に学ぶ

舞台 薄暗いラボの一室。ホワイトボードには意味不明な数式と図がびっしり。コーヒーカップが散乱し、ピザの箱が積み重なっている。登場人物ベテラン刑事(あなた) 長年の経験を持つソフトウェアエンジニア。最近のAIブームにちょっと乗り遅れ気味。若手研究員(happy-llm) 天真爛漫な笑顔で、難解なLLMの仕組みを次々と解き明かす天才。


【エンジニア向け】デスクトップAIアシスタント「DearVa/Everywhere」の価値とサンプルコード

さて、今回ご紹介する「DearVa/Everywhere」ですが、これはソフトウェアエンジニアの皆様にとって、まさに「デスクの上に置ける、気が利くAIアシスタント」になり得る、非常に興味深いツールです。まず、このツールの本質をご説明します。


AIの知性を飛躍させる「MemoriLabs/Memori」入門:記憶の保存と検索のアーキテクチャ

ご提示いただいたオープンソースの記憶エンジン「MemoriLabs/Memori」について、ソフトウェアエンジニアの視点から、その有用性、導入方法、そしてサンプルコードの例を、コントのお化け屋敷のように面白おかしく、しかし技術的に分かりやすく解説しますね!


Canvaの代わりになる?ローカルで動く多機能AIアシスタント「jaaz」

ねぇ、みんな、CanvaとかAdobe Fireflyとか、画像や動画をAIで作るツールって使ったことある?とっても便利なんだけど、作ったデータが全部インターネットの向こう側に行っちゃって、ちょっとプライバシーが心配…って思ったことはないかな?


苦悩を笑いに!nanobrowserで始めるウェブ自動化入門

「また新しいAIツールを導入するの?設定が難しそうだし、うちのシステムに組み込めるかな…」 「毎日のルーティン作業にうんざり…でも、手作業でやるしかないし…」 「特定のウェブサイトからデータを集めたいけど、手動だと時間がかかりすぎる…」そんな悩み、もう終わりにしましょう!nanobrowserは、まるで優秀なAI秘書のように、あなたのウェブ上の退屈なタスクを自動化してくれます。


PythonとNode.jsの力を解き放つ。ByteDanceのオープンソース「Deer-flow」でエージェント開発を加速させる

エンジニアの視点で見ると、これって「ただのチャットAI」とは全然別物。まるで、一歩先を読んで複雑な家事(仕事)を全部片付けてくれる、すごく有能な執筆・開発パートナーって感じかな。「どれが一番似合うかな?」って水着選びで迷うみたいに、Deer-flowの可能性を一緒に探っていこう!