
Image generated by deep ai
この記事では、Box AIとDoc Gen APIを使用してワークフローを効率化し、構造化されていない映画脚本を最小限の労力で実用的なインサイトに変換する方法について説明します。
はじめに
あなたが映画制作会社で働いていて、すべてのドキュメントとコンテンツの保存にBoxを使用していると想像してください。
プロデューサーのアシスタントは、毎月、数十本の映画脚本を受け取り、主な脚本の詳細を要約した社内メモを作成する必要があります。
従来、この手動によるタスクは面倒で時間がかかります。しかし、このタスクをAIで自動化できるとしたらどうでしょうか。
ワークショップ: AIを活用した自動化の実践
このワークショップは、経験レベルに関係なく開発者が利用できるように、シンプルさを念頭に置いて設計されました。以下が用意されています。
- Box SDKを使用した実践的なPythonソリューション
- テストを容易にするための事前に構成されたサンプルスクリプト
- 参加者が変更および検証するための全面的にカスタマイズ可能なコード
このワークショップを終了すると、以下のことが可能になります。
✅ Box AI extractおよび質問エンドポイントの使用方法を理解する
✅ Box Doc Genの使用経験を得る
✅ 今後の参考用のPythonプロジェクトを入手する
こちらのGitHubリポジトリに着手しましょう。
ユースケース: 映画脚本から要約の作成
ある制作会社が送られてくる脚本の確認を任されていると想像してみてください。脚本ごとに、以下の内容を含む社内メモが必要になります。
- 基本的な詳細 (タイトル、日付、ジャンル、著者)
- プロットの要約
- 場所や小道具の説明
- 俳優の候補を含む登場人物のリスト
- 監督とプロデューサーの推薦
- 著者の背景情報 (過去の作品、制作史、収益インサイト)
この情報を手作業でまとめるのは、手間がかかるうえに反復的な作業となります。その解決方法として、Box AIを使用して、この構造化データを自動的に抽出して生成できます。
Box AIとDoc Genでプロセスを自動化する方法
このワークショップでは、2つの主要なBox AI機能を使用して、映画脚本の分析を自動化する実践的なPythonベースの手法を紹介します。
Box Doc Genを使用するには、ドキュメントテンプレートを作成するために、Microsoft Wordへのアクセス権限が必要です。Box Doc Genは、ビジネスドキュメントの動的な生成を容易にするように設計されていますが、Boxでは、ユーザーのMicrosoft Wordへのアクセス権限は制御していません。ユーザーは、ドキュメントテンプレートを効果的に作成するために必要なMicrosoft Wordに対する権限やアクセス権限があることを確認する必要があります。
映画脚本からデータを抽出する
Box AI extractエンドポイントを使用すると、開発者は、明確に定義されたJSONスキーマを提供できます。その後、Box AIは、映画脚本をスキャンし、関連する詳細をJSON形式で入力します。
これは、次のように簡単です。
) -> AiResponseFull:
script_schema = Script().json_schema()
properties = script_schema["allOf"][1]["properties"]
prompt = f"{script_schema}"
item = AiItemBase(id=box_file.id, type=AiItemBaseTypeField.FILE)
return client.ai.create_ai_extract(prompt, [item])
いくつかの優れたライブラリを使用することで、Pythonデータクラスであるclass Scriptから直接JSONスキーマを抽出していることに注目してください。
Pythonデータクラスのメタデータプロパティを使用して、情報の取得方法についてAIにヒントを与えることができます。次に例を示します。
@dataclass
class Script(MergeBase):
title: str = ""
author: str = ""
genre: str = ""
date_written: str = ""
date_written_iso: date = field(
default=None,
metadata={"description": "script written data in iso format"}
// ISO形式の脚本データ
)
plot_summary: str = field(
default="",
metadata={
"description": "A summary of the plot of this movie script.",
// この映画脚本のプロットの要約。
},
)
📌 課題: AIによる抽出は必ずしも完璧とは限りません。開発者は、欠落しているデータや不正確なデータを処理する必要があります。
脚本を超えたインサイトを生成する
俳優や監督の提案など、必要な情報の中には脚本に含まれていないものもあります。そこで役に立つのがBox AIの質問エンドポイントです。リクエストの書式を適切に設定することで、AIが生成した推奨事項をJSON形式で取得できます。
たとえば、登場人物のリストを取得するには、映画脚本を読み取り、それぞれの役に提案する俳優をAIに質問する必要があります。
) -> AiResponseFull:
sample_json_object = [Character.gen_sample_data()]
mode = CreateAiAskMode.SINGLE_ITEM_QA
prompt = (
"read this movie script and give me a character list, "
"(without the original actor name, just the character name) "
"with one sentence description "
"and suggest 5 actors for each character "
"do not suggest the original movie actors if the movie has been already produced. "
"format the output this directors list in a json format using this example: {sample_json_object}"
// "この映画脚本を読んで、登場人物のリスト "
// "(オリジナルの俳優名ではなく、登場人物の名前のみ) を"
// "1文の説明を添えて提示し、"
// "各登場人物に5人の俳優を提案してください。"
// "映画がすでに制作されている場合は、オリジナルの俳優を提案しないでください。"
// "次の例を使用して、この監督のリストの出力をJSON形式に設定します: {sample_json_object}"
)
item = AiItemBase(id=box_file.id, type=AiItemBaseTypeField.FILE)
return client.ai.create_ai_ask(mode, prompt, [item])
上記のサンプルデータは次のようになります。
"name": "Character A", # 登場人物A
"description": "Character A description", # 登場人物Aの説明
"suggested_actors": "Actor A, Actor B, Actor C" # 俳優A、俳優B、俳優C
}
出力結果は次のようになります。
{
"name": "Ripley", # リプリー
"description": "A strong and determined survivor who has...", # 強くて意思が固く、逆境に強い人物で...
"suggested_actors": "Jessica Chastain, Charlize Theron, Emily Blunt, Kate Beckinsale, Rebecca Ferguson" # ジェシカ・チャステイン、シャーリーズ・セロン、エミリー・ブラント、ケイト・ベッキンセイル、レベッカ・ファーガソン
},
{
"name": "Burke", # バーク
"description": "A corporate representative with a ...", # 会社の代表で...
"suggested_actors": "Aaron Paul, John C. Reilly, Dan Stevens, Oscar Isaac, Michael Shannon" # アーロン・ポール、ジョン・C・ライリー、ダン・スティーヴンス、オスカー・アイザック、マイケル・シャノン
},
📌 課題: AIは、ミスをすることも、コンテキストを失うことも、誤ったデータを返すこともあります。
社内メモを作成する
Box AIによって必要なデータが抽出および生成されたら、Box Doc Gen APIを使用して、そのデータの書式を意思決定のための構造化されたメモに整えます。
まず、MS Wordテンプレートが必要です。このテンプレートに含まれる特殊なタグは、テンプレートをデータとマージする際に置き換えられます。

使用するテンプレート
Box Doc Gen APIは、構造化されたJSONデータを受け取り、事前定義されたドキュメントテンプレートにマージします。これにより、プロデューサーがすぐに確認できる、整った社内メモを作成できます。
以下に、データのサンプルを示します。
"title": "Aliens", # エイリアン
"author": "James Cameron", # ジェームズ・キャメロン
"genre": "Action Horror Sci-Fi Thriller", # アクションホラーSFスリラー
"date_written": "May 28, 1985", # 1985年5月28日
"date_written_iso": "1985-05-28",
"plot_summary": "In 'Aliens,' Ellen Ripley awakens from hypersleep after...", # 「エイリアン」では、エレン・リプリーがハイパースリープから目覚め...
"character_list": [{
"name": "Ripley", # リプリー
"description": "A strong and determined survivor...", # 強くて意思が固く、逆境に強い人物...
"suggested_actors": "Jessica Chastain, Charlize Theron, Emily Blunt, Kate Beckinsale, Rebecca Ferguson" # ジェシカ・チャステイン、シャーリーズ・セロン、エミリー・ブラント、ケイト・ベッキンセイル、レベッカ・ファーガソン
}, {...}
],
"props": [{
"name": "Pulse Rifle", # パルスライフル
"description": "A standard-issue weapon for the Colonial..." # 植民地海兵隊の標準仕様の武器...
}, {...}
],
"locations": [{
"name": "Gateway Station", # ゲートウェイステーション
"description": "A sprawling space station orbiting Earth..." # 地球を周回する広大な宇宙ステーション...
}, {...}
],
"producers": [{
"name": "Jerry Bruckheimer", # ジェリー・ブラッカイマー
"description": "A prolific producer known for high-octane..." # 精力的で知られる多くの作品を制作したプロデューサー...
}, {...}
],
"accomplishments": [{"description": "Academy Award for Best Picture for 'Titanic'"}, {...}], # タイタニックのアカデミー作品賞
"other_scripts": [{"description": "The Terminator"}, {...}], # ターミネーター
"produced_movies": [{
"title": "Titanic", # タイタニック
"gross_revenue": "$2.195 billion" # 21億9500万ドル
}, {...}
],
"companies_worked_with": [{"description": "20th Century Fox"}, {...}]
}
📌 Doc Genのベストプラクティス: JSONはフラットに保つようにしてください。マージエンジンでは入れ子になったリストがサポートされません。
テンプレートとデータのマージもわかりやすくシンプルです。ワークショップのサンプルを以下に示します。
# Get a box client
ap = AppConfig()
client = ap.get_box_client()
# Check Box API connection
user = client.users.get_user_me()
print("\n\n-- Box API --")
print(f"Connected to Box API as {user.name}")
# Get the data
source_data, file_name = get_sample_movie_data()
movie_data = {}
movie_data["script"] = source_data
print(f"Using movie data from {file_name}")
file_reference = FileReferenceV2025R0(ap.doc_gen_template_file_id)
destination_folder = CreateDocgenBatchV2025R0DestinationFolder(ap.merge_folder_id)
document_data = DocGenDocumentGenerationDataV2025R0(file_name, movie_data)
# Merger the files
merge_batch: DocGenBatchBaseV2025R0 = client.docgen.create_docgen_batch_v2025_r0(
file=file_reference,
input_source="api",
destination_folder=destination_folder,
output_type="pdf",
document_generation_data=[document_data],
)
print(f"Merge batch created: {merge_batch.id}")
上記のサンプルにより、Doc Genのバッチが作成され、次のようなPDFが出力されます。

生成されたPDF
ワークフローを自動化する
自動化は、以下の複数の方法でトリガーできます。
- Webhookにより、指定したBoxフォルダ内で新しい脚本のアップロードを検出します。
- Boxウェブアプリ内の手動アクションにより、ユーザーは処理を開始できます。
- Box Skill統合により、既存のワークフローへのシームレスな埋め込みが可能になります。
開発者は、このソリューションをBox内で自己完結させることも、サードパーティのデータソースを統合して拡張することもできます。
主な習得事項と考慮事項
以下に、この概念実証の構築中に得られた知見をいくつか紹介します。
🔹 AIの制限事項への対処: AIは詳細の一部を抽出できない場合があるため、開発者は欠落したデータを考慮する必要があります。
🔹 事実確認が不可欠: LLMモデルだけに頼るのは危険です。検証には複数のソースを使用してください。
🔹 データの形式が重要: Doc Genに提供されたJSONはできるだけフラットにする必要があります。入れ子になったリストはサポートされません。
🔹 スクリプトサイズの制約: 一部のスクリプトは、Box AIで効率的に処理するには大きすぎました。
🔹 Pythonで簡単に: Box Python SDKにより、わずか数行のコードでこの自動化が可能になります。
まとめ: AIを活用したドキュメントの自動化の実現
このワークショップは、単に技術を紹介するデモではなく、不可能なことは追い求めずに実現できることを実行する技術の探求を提案しています。この例では映画脚本に焦点を当てていますが、業界を超えて同じ原則を当てはめることができ、契約書、財務報告書、研究論文のいずれを扱う場合でも、Box AIとDoc Genにより、構造化されていないコンテンツを構造化された実用的なインサイトに変換できます。
ワークフローの自動化に関心をお持ちの方は、こちらのワークショップをお試しいただき、Box AIとDoc Genで何ができるかを再考してみてください。🚀
- トピックス:
- 開発者