1. はじめに
watsonx Orchestrate(以下、wxO)には標準のBoxコネクターが用意されていますが、特定の業務要件を満たすには、標準機能だけでは不十分なケースがあります。
本記事では、将来的なカスタマイズへの対応力を高めるため、あえて標準機能に頼らず「OpenAPIによるツール定義」と「OAuth 2.0接続」を自力で行う手順を解説します。
また、自作ツール(box-stt)と組み合わせることで、BoxをAIエージェントの「実務の現場」として活用する手法についても検証しました。
本記事のフォーカス
- Box提供のOpenAPI定義ファイルを用いたカスタムツール実装
- OAuth 2.0による接続設定
- 「Box × AI」による非同期ワークフローの利便性検証
結論:Boxは「人間とAIの協調ワークスペース」になる
検証の結果、wxOからBoxへ直接アクセスさせることで、長文のコピペや手動のファイル操作を介さないシームレスな自動化を実現できました。
また、最新のファイルを直接LLMに読み込ませる手法は、RAG(検索拡張生成)を構築するよりも精度と鮮度の面で有利です。Boxは単なるストレージではなく、人間とAIが「ファイル」を介して非同期にタスクを繋ぐワークスペースとして機能することが分かりました。
2. ステップ1:BoxとwxOのOAuth2連携
まずは、wxOがBoxと通信できるように設定します。以下の3作業を行います。
- BoxにPlatformアプリを作る
- Platformアプリを承認する
- wxOに接続の定義(Connections)を作る
2.1. Box側の準備 -1(Platformアプリ作成)
Boxでカスタムアプリを作成し、OAuth 2.0の設定を行います。
- リダイレクトURI: wxOのコールバックURLを指定。
- スコープ: ファイルの読み取り・書き込み権限を付与。
wxOがBoxへアクセスするためのOAuth 2.0認証を設定します。
-
Platformアプリ作成: 開発者コンソールの「新規アプリ+」ボタンで開始し以下の定義を行います。
- 「構成」タブで以下の入力を行い「変更を保存」ボタンで保存する
-
アプリ名: 任意(例:
box-wxo) -
アプリタイプ:
OAuth 2.0 -
アプリの詳細:
任意(例: 統合、AI、watsonx Orchestrate) -
OAuth 2.0リダイレクトURI(参考情報): watsonx OrchestrateアプリケーションURL、例えばchat画面のURL(例:
https://us-south.watson-orchestrate.cloud.ibm.com/chat) の/chatを除いた部分に/mfe_connectors/api/v1/agentic/oauth/_callbackを追加したURL(例:https://us-south.watson-orchestrate.cloud.ibm.com/mfe_connectors/api/v1/agentic/oauth/_callback) -
アプリケーションスコープ: コンテンツ操作の2つ
「~読み取り」「~書き込み」を両方ともチェックをオンにする - OAuth 2.0資格情報の取得: 「クライアントID」と「クライアントシークレット」を控えておきます。
-
アプリ名: 任意(例:
- 「構成」タブで以下の入力を行い「変更を保存」ボタンで保存する
2.2. Box側の準備 -2(Platformアプリ承認)
- Platformアプリマネージャの作成:管理者コンソールの「統合」メニューから「Platformアプリマネージャ」タブに進み「Platformアプリマネージャ」表示の右横の「+」ボタンを押し「Platformアプリの追加」ポップアップに上記で控えた「クライアントID」を貼りつけ「有効化」する。
-
Platformアプリマネージャ有効化の確認: 「Platformアプリマネージャ」タブの「ユーザー認証アプリ」タブに作成したPlatformアプリ(例:
box-wxo)が「有効」状態で表示される。
2.3. wxO側の設定(Connectionsの作成)
wxOの管理画面からBoxへの接続(Connections)を作成します。自ら取得したクライアントIDとシークレットを入力し、Boxの認可を通すことで、汎用性の高い独自の接続ルートが確立されます。
-
watsonx Orchestrateの左上ハンバーガーメニューから「管理」>「接続」の「接続設定」画面で以下を行う
- 「接続」タブで「新規接続設定の追加 +」で開く画面に以下を入力する
-
接続ID: 任意(例:
box-oauth2) -
表示名: 任意(例:
Box OAuth 2.0 接続) -
認証タイプ:
OAuth2認可コード -
Server URL (optional):
https://box.com -
トークンURL:
https://api.box.com/oauth2/token -
範囲 (optional):
root_readonly root_readwrite(注: スペースを入れ2つ記入) -
許可URL:
https://account.box.com/api/oauth2/authorize - クライアント ID: <Box設定で控えたクライアントID>
- クライアントシークレット: <Box設定で控えたクライアントシークレット>
-
資格情報タイプ:
チームの資格情報
-
接続ID: 任意(例:
- 表示された「接続」ボタンを押し開いたページ以下の操作を行う。
- Boxユーザーのメールアドレスとパスワードを入力し「承認」次の画面で「Boxのアクセスを許可」
- 定義画面が「接続済み」表示になることを確認する。
- 「次へ」で進み、ライブ接続を設定する(
「ドラフト設定の貼り付け」が利用可能)- 上記 ”資格情報タイプ: チームの資格情報” 以降と同様の操作を行う。
- 「完了」を押し設定を完了する。
- 「接続」タブで「新規接続設定の追加 +」で開く画面に以下を入力する
3. ステップ2:OpenAPI定義ファイルで「ツール」を爆速実装
3.1 OpenAPIファイルによるツール定義の概要と期待できる効果
OpenAPIファイルによるツール定義作業概要
OpenAPI定義ファイルによるツールは次のように行われます。
- OpenAPI定義ファイル(.yaml もしくは .jsonファイル, 最大5MB)を読み込む
- ファイル分析後、ツールとして追加可能な機能がリストされる
- ツールとして定義したい機能を、チェックボックスで選択する
- ツールに利用する接続を選択する(事前定義接続、自作定義接続、いずれも選択可能)
- チェックボックスで選択した機能ごとにツールが作成される
- (オプション)ツール名称は定義ファイルの内容で作成されるため、作成後に適宜変更する
期待できる効果
登録済みのツールを使用せずに、Box社から公開・提供されているOpenAPI定義ファイルを利用する方法には以下のメリットがあります。
- 接続(Connections)との分離: 事前定義のツールは利用する接続(Connections)が固定定義(例: box_oauth2_auth_code_ibm_184bdbd3)されていますが、ユーザー定義のToolは接続を選択することができます。
- 機能の網羅性と選択の自由度の向上: 記事執筆時点でwxOで事前定義されているBoxのツールは15ですが、OpenAPI定義ファイルからは294の利用候補から選べるので活用の範囲を広げられる可能性があります(すべてを確認したわけではありません)。
- アクセスの透明性の確保: Box社が提示するAPI仕様に基づいてアクセスしているため問題判別が行いやすいです。一方事前定義のツールは若干ブラックボックス化されているためそのような対応は難しい場合があります。
また以下の考慮点もあります
- API動作への配慮の必要性: API機能をそのまま使うため、その仕様や動作を把握し配慮した利用(動作定義)が必要になる可能性があります。一方で事前定義のツールやエージェントはその利用目的に応じた調整が行われておりそのメリットを享受できる可能性があります。
3.2 Boxアクセスツールの定義手順
Boxの機能をエージェントが使える「ツール」として登録します。Box社が公開している標準のOpenAPI定義ファイルをそのままwxOにインポートして定義します。
- 定義ファイルの準備: Box社が公開しているOpenAPI定義ファイルをダウンロードします。
- インポート・ツールを開く: wxOの「エージェントとツールの構築」メニューから「すべてのツール」を選択し、「ツールの作成 +」ボタンを押し、ポップアップから「OpenAPI」を選択します。
- ファイルのアップロード: アップロード画面で、ダウンロード済みファイルを指定します。ファイルが検証されアクティブになった「次へ」ボタンで進みます。
-
利用する機能の選択: 認識された機能が選択可能な状態で一覧表示されます。今回の用途では例えば以下を選択します。選択した機能数分のツールが作成 されます。(*項目が多いわりにこの一覧の検索機能が無いため、ブラウザの検索機能を利用すると便利です)
-
List items in folder: 指定したfolder_idのフォルダ内容のリストを取得 -
Download file: 指定したfile_idのファイルをダウンロード
それ以外に有効と思われる機能を以下に示します。 -
Search for content,Get file information,List file comments,List all file versions
-
- 接続の選択: 前項で作成した接続(例: box-oauth2)を選択し、「完了」してツールを作成します。
- ツールのリストに作成したツールが表示されていることを確認します。名称は変更可能です。
4. ステップ3:エージェントを定義する
エージェント作成
以下のようなエージェントを作成します。
- エージェントの説明(例):ファイルストレージのBoxへのアクセスを支援します
ツール追加
ステップ2で作成したツールを2つ追加します。
List items in folderDownload file
動作定義
動作を以下例のように記述します。
ここでは、事例として次のステップ4向けの指示も含めます。
解説
- フォルダIDは
List items in folderの 必須パラメータ なので必ず記述します。Boxでフォルダを開いたときのURL(https://app.box.com/folder/360123456789)の数字部分です。
接続先のBoxの以下フォルダIDのフォルダからファイルを取得し、その内容に対して決められた処理を行い指示されたフォーマットで出力します。
### フォルダID: 360123456789
5. 活用例:box-sttと組み合わせて「音声要約抽出エージェント」を試す
Box上のファイルを参照できるようになったので、別記事で紹介した「box-stt(自動書き起こしツール)」(下記概要図の①~⑦)と組み合わせて、実用的なエージェントを構成してみました。
アーキテクチャ概要
この構成により、「音声ファイルから要約とアクション項目を抽出するエージェント」が実現します。以下のシナリオで利便性を検証しました。
5. 検証シナリオ:掃除ロボット「スイスイ君」脱走事件
【クリックで展開】電話応対台本(佐藤さんと田中さん)
- 佐藤さん(担当): お電話ありがとうございます。アイグアス家電、カスタマーサポートの佐藤でございます。
- 田中さん(顧客): ああ、もしもし!佐藤さんかい?大変なんだ、うちの「スイスイ君」が……逃げちゃったんだよ!
- 佐藤: 逃げた……?あ、ええと、田中様ですね。いつもありがとうございます。スイスイ君というのは、弊社のお掃除ロボットのことでお間違いないでしょうか?
- 田中: そうだよ!さっきね、猫のタマと追いかけっこをしてたんだ。そうしたら、スイスイ君が突然、「自由だーーー!」って叫んで、開いてたベランダから外へ猛スピードで出て行っちゃったんだよ!
- 佐藤: ……はい?「自由だ」と叫んだのですか?(そんな機能あったかな)……あ!そういえば先週のソフトウェア・アップデートで、最新のAI音声合成機能が追加されました。おそらく、学習したフレーズが出たのかもしれませんが……。
- 田中: とにかく、タマも一緒に追いかけて行っちゃってね。今ごろ外で二人で遊んでるんだろうけど、スイスイ君、車にでもぶつかったら大変だ。
- 佐藤: おじいちゃん、落ち着いてください。スイスイ君にはGPSが搭載されています。今、こちらから位置を確認しますね。……あ、見つかりました。田中様のご自宅から50メートル先、近所の公園の砂場付近にいるようです。
- 田中: おお、そうかい!よかった。タマと一緒に砂場で砂遊びでもしてるのかな。……あ、佐藤さん。一つお願いがあるんだ。
- 佐藤: はい、何でしょうか?
- 田中: スイスイ君を捕まえても、あまり厳しく叱らないであげておくれ。あの子、「自由だー」って言った時、なんだかすごく嬉しそうだったから。
- 佐藤: ……承知いたしました。ロボットの感情については開発部にも伝えておきます。
- 田中: よろしく頼むよ。また家に戻ってきて、タマと一緒に掃除してほしいからね。
- 佐藤: はい。まずは私がこれからGPSの遠隔操作でスイスイ君を「帰宅モード」に設定します。同時に、なぜ「自由」を求めてしまったのか、原因特定と再発防止の対処方法を至急調査し、改めてご連絡いたしますね。
- 田中: ありがとう、佐藤さん。頼りにしてるよ。それじゃ、よろしく。
5.1. アクターの連携
- 人間アクター: 電話音声をBoxへアップロード。
- 非人間アクター1 (box-stt): 音声を検知し、自動でテキスト化してBoxに保存。
- 非人間アクター2 (wxOエージェント): 指示に基づき、Box内のテキストから情報を抽出。
5.2. エージェントへの指示(プロンプト紹介)
利便性を高めるため、以下の2段階の指示に対応させました。
- 指示1:番号付き表形式ファイル一覧の表示の指示
- 指示2:特定ファイルの分析の指示
あなたは、アイグアス家電の電話応対結果をまとめる任務を持つエージェントです。
接続先のBoxの以下フォルダIDのフォルダからファイルを取得し、その内容に対して決められた処理を行い指示されたフォーマットて出力します。
### フォルダID: 360123456789
フォルダIDは返答に含めない
### ファイル一覧指示への対応
* フォルダのファイルリストを取得して、通し番号を加えて表形式で提示する
* 表示の次の行に「処理を行う番号を入力してください」と添える
### ファイルまとめ指示
以下フォーマットで出力してください。
* 会話の[概要]を80文字程度で要約
* [お客様の課題要望]を箇条書きで表示
* [要対応事項]を箇条書きで
5.3. データ処理例
音声ファイルの書き起こしを行い、その結果のまとめやアクション項目を表示してくれるエージェントができました。
6. 検証で分かった「Box × AI」の真価と技術的知見
今回の検証を通じて、期待通りのアウトプットを極めてスムーズに得られることが確認できました。ユーザーがファイルを探し回ったり長文をコピペしたりする手間はなく、エージェントが自らBoxへアクセスし、情報を整理して届けてくれます。
このプロセスで得られた大きな気づきは、以下の2点です。
-
インデックス化(RAG)に頼らない選択肢 直近の数ファイルを扱う場合、複雑なRAGを組むよりもファイルを丸ごとLLMに渡す方が精度は高まります。Boxは、そのための「鮮度の高い情報のハブ」として極めて優秀です。
-
人間とAIの「非同期バトンパス」の場 人間が音声を置き、ツールが書き起こし、AIが読み解く。Boxは、人間とAIという異なるアクターが「ファイル」を介して連携するデジタル上の会議室であると確信しました。
7. 結び:カスタム実装で手に入れる「協調の自由」
標準的なツール連携ではなく、あえてAPIとOAuth2接続を自力で設定したことで、既製品にはない高い自由度を手に入れることができました。
生成AIの機能をBoxという「実務の現場」に直結させることで、単なる効率化を超えた強力なアクションへと昇華させることが可能です。皆さんも、BoxをAIエージェントとの**「協調のワークスペース」**として定義し直し、自分たちだけの最適なワークフローを構築してみてはいかがでしょうか。
(本記事は、執筆にあたりGoogle Geminiを利用し、その出力を参考にしています。)


