<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=139163818022217&amp;ev=PageView&amp;noscript=1"> <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=271598307802760&amp;ev=PageView&amp;noscript=1">

OpenAIの新しいSDKとBoxを使用したマルチエージェントワークフローの構築

 公開日:2025.03.19  更新日:2026.06.10

最近、OpenAIは、開発者がマルチエージェントワークフローを簡単に構築できるよう設計された、軽量かつ強力なフレームワークであるAgents SDKを新しく発表しました。この新しいSDKにより、LLMを活用したエージェントのオーケストレーションプロセスが簡素化され、各エージェントには具体的な指示、ツール、ガードレール、ハンドオフが備わっているため、複雑なタスクのシームレスな実行が可能になります。

OpenAIAgents SDKの基本的な概念

Agents SDKは、その基盤として、いくつかの主な機能を導入しています。

  • エージェント: 指示、ツール、実行制約を備えた構成可能なLLM
  • ハンドオフ: エージェントが特殊なタスクに対する制御を他のエージェントに移すことを可能にするメカニズム。
  • ガードレール: 入出力を検証し、制約やガイドラインへの準拠を確保する方法。
  • トレース: エージェントのワークフローをキャプチャ、デバッグ、最適化するために組み込まれた実行トレース。

OpenAI AgentsBoxの併用

この新しいSDKの機能を探るために、OpenAI AgentsBoxを統合し、エージェントがBoxに保存されているドキュメントを見つけてクエリを実行できるようにするデモを作成しました。目標は、Boxに保存されているコンテンツにアクセスすると同時に、OpenAIの強力な新しいWebSearchToolLLMを使用してそのコンテンツを分析し、インサイトを生成するための一連のツールをエージェントに提供することでした。

このデモをカスタマイズしたい場合、ソースコードはコミュニティのGitHubリポジトリで入手できます。

ユースケース: 第4四半期の財務調査の分析

実装をテストするために、さまざまなテクノロジ企業の第4四半期の収益報告書をBoxにアップロードしました。その後、OpenAI搭載のエージェントには、以下のタスクを課しました。

  1. ユーザーのクエリに基づいて特定の報告書を探す
  2. 各ドキュメントから関連情報を抽出する
  3. 企業間の財務実績を比較する分析レポートを生成する
  4. この分析に基づいて特定のトピックに関するより深いインサイトを、BoxWebSearchを組み合わせて取得する

このエージェントのアプローチ、つまり、ドキュメントの取得とデータ抽出が可能なBoxに特化した1つのエージェントにより、懸念事項を効果的に分離することができました。ここから、話をOpenAIに戻します。

この統合の主な利点

  • ドキュメント検索の自動化: エージェントは、メタデータと自然言語クエリを使用して、Boxに保存されたレポートを効率よく見つけることができます。
  • 構造化データのシームレスな抽出: BoxAI機能とOpenAIの処理能力により、主要な財務指標を自動的に抽出できます。
  • ハンドオフによるマルチステップ推論: エージェントのコラボレーションにより、各ステップで適切な専門エージェントにタスクが渡されます。
  • WebSearchTool(): 1回のインポートと1行のコードで、インターネットのライブデータを独自の企業データに簡単に追加して、さらに広範なインサイトを得ることができます。

実装内容

このサンプルの核となる部分は非常に単純です。エージェントとそのエージェントで使用可能なツールを定義します。

box_agent = Agent(
    name="Box Agent",
    instructions="""
    You are a very helpful agent. You are a financial expert. 
    You have access to a number of tools from Box that allow you
    to search for files in Box either holistically or by set criteria.
    You can also ask Box AI to answer questions about the files or you
    can retriever the text from the files. Your goal is to help the user
    find the information they need.
    """,
    '''
    あなたは非常に役立つエージェントで、金融の専門家です。
    Boxが提供する多数のツールを利用できるため、Box内のファイルを
    全体的に検索することも、設定された条件で検索することもできます。
    また、ファイルに関する質問への回答をBox AIに要求することや、ファイルから
    テキストを取得することも可能です。目標は、ユーザーが必要な情報を
    見つけられるようにすることです。
    '''

    tools=[
        file_search,
        ask_box,
        get_text_from_file,
        box_search_folder_by_name,
        box_list_folder_content_by_folder_id,
        WebSearchTool(),
    ],
)

エージェントを操作するための簡単なユーザー入力は以下のとおりです。

async def main():
    user_msg = input("How can I help you today:\n") #今日は何かお手伝いできることはありますか
    agent = box_agent
    inputs: list[TResponseInputItem] = [{"content": user_msg, "role": "user"}]
    while True:
        result = Runner.run_streamed(
            agent,
            input=inputs,
        )
        async for event in result.stream_events():
            if isinstance(event, ResponseTextDeltaEvent):
                print(event.delta, end="", flush=True)
            elif isinstance(event, ResponseContentPartDoneEvent):
                print("\n")

        answer = strip_markdown(result.final_output)
        answer.replace("\n\n", "\n")
        print(f"{answer}\n")

        inputs = result.to_input_list()
        print()

        user_msg = input("Follow up:\n")   #フォローアップ
        inputs.append({"content": user_msg, "role": "user"})

エージェントがBoxにアクセスするためのさまざまなツールを実装します。たとえば、次のように、OpenAIBox AIにファイルについて質問するためのツールを実装できます。

@function_tool
async def ask_box(file_id: str, prompt: str) -> str:
    """
    Ask box ai about a file in Box.  #Box AIにBox内のファイルについて質問します
    Type: function                   #関数
    Args:
        file_id (str): The ID of the file to read.  #読み取るファイルのID
        prompt (str): The prompt to ask the AI.     #AIに質問するためのプロンプト
        type: function               #関数
    return:
        str: The text content of the file.         #ファイルのテキストコンテンツ
    """
    ai_agent = box_ai_agent_ask()
    response = box_file_ai_ask(
        BoxAuth().get_client(), file_id, prompt=prompt, ai_agent=ai_agent
    )

    return response

最後段階では、実際にBox APIを操作します。

def box_file_ai_ask(
    client: BoxClient, 
    file_id: str, 
    prompt: str, 
    ai_agent: AiAgentAsk = None
) -> str:
    mode = CreateAiAskMode.SINGLE_ITEM_QA
    ai_item = AiItemBase(id=file_id, type=AiItemBaseTypeField.FILE)
    response = client.ai.create_ai_ask(
        mode=mode, prompt=prompt, items=[ai_item], ai_agent=ai_agent
    )
    return response.answer

実装したツール

  • file_search — クエリ、ファイル拡張子、その他のパラメータを使用してBox内のファイルを検索する
  • get_text_from_file — 特定のBoxファイルのテキストコンテンツを読み取る
  • ask_box — ファイルの内容についてBox AIに質問する
  • box_search_folder_by_nameBox内のフォルダを名前で検索する
  • box_list_folder_content_by_folder_id — フォルダのコンテンツのリストを取得する
  • WebSearchTool() — ウェブから関連するインサイトを得て、独自のデータを補完する

今後の予定

上記のとおり、新しいOpenAI SDKを使用してBox内のコンテンツにアクセスするエージェントを作成しました。

これらの概念の応用は、より多くのコンテキストソースが関与する場合に真価を発揮します。さらに多くのエージェントを組み合わせて、自社の内部記録システムにアクセスしたり、内部ウェブサイトから最新情報を読み取ったり、Salesforceやその他のSaaSシステムにアクセスしたりすることを想像してみてください。

OpenAIAgents SDKをワークフロー内でどのように使用できるかに興味がある方は、マルチエージェントワークフローをアプリケーションでどのように利用したいかをぜひお聞かせください。


RECENT POST「開発者」の最新記事


開発者

Box、MCPアプリのサポート対象をChatGPT、Microsoft 365 Copilot、Gleanに拡大

開発者

AIエージェントにコンテンツの活用方法を教える: OpenAI Codex向けBox Skillの構築

開発者

Box AIとOpenAI Agents SDKで自律的なドキュメントワークフローを実行

開発者

Box CLI: 開発者とAIエージェントのためのコンテンツCLI