ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

火宝短剧(Huobao Drama)の抽出エージェント徹底解説:SKILL 仕様とソースコードで読み解くキャラクター・シーン・小道具の自動抽出パイプライン

火宝短剧(Huobao Drama)の抽出エージェント徹底解説:SKILL 仕様とソースコードで読み解くキャラクター・シーン・小道具の自動抽出パイプライン AI 应用人工智能媒体生成音视频AI Agent后端前端【免费下载链接】huobao-drama 火宝短剧 - 基于AI的一站式短剧生成平台 《一句话生成完整短剧从剧本到成片全自动化》 Huobao Drama - An AI-Powered End-to-End Short Drama Generator One Sentence to Complete Drama: Fully Automated from Script to Final Video项目地址https://gitcode.com/gh_mirrors/hu/huobao-drama点击查看免费下载「火宝短剧Huobao Drama」は、AI エージェントの連携によって脚本生成から最終動画出力までを自動化するワンストップ短劇生成プラットフォームです。本記事は、そのパイプラインの「資産抽出」段階を担う extractor エージェントの技能仕様 backend/workspace/skills/extractor/SKILL.ja.md を主軸に、実際の実装 backend/src/agents/tools/extract-tools.ts のソースコードと突き合わせながら、抽出フィールドの定義、小道具の「判定3問」、名前正規化による重複排除ロジックまでを実装レベルで解説します。読者は、このスキルを読み解くことで、短劇生成パイプラインにおける「脚本 → 再利用可能な資産キャラクターシーン小道具」の変換ルールと、そのプロダクション実装を一体として理解できます。extractor スキルの位置づけマルチエージェント・パイプラインの中の「資産抽出」段階火宝短剧のバックエンドでは、4 種類のエージェントが直列に連携しますbackend/src/agents/index.ts のAGENT_TOOLS登録よりscript_rewriter原作小説を短劇フォーマットの脚本へ書き換えextractor本記事の主題脚本からキャラクター・シーン・小道具を抽出し、プロジェクトの既存資産と重複排除した上で保存storyboard_breaker脚本を分鏡ビデオ生成タスクに分解prompt_generator資産ごとの最終画像プロンプトと分鏡のビデオプロンプトを生成各エージェントには専用の「技能Skill」が割り当てられ、実行時にプロンプトへ全文注入されます。その対応関係は backend/src/agents/skills.ts のAGENT_SKILL_MAPに定義されていますconst AGENT_SKILL_MAP: Recordstring, string[] { script_rewriter: [script-rewriter], extractor: [extractor], storyboard_breaker: [storyboard-breaker], prompt_generator: [ prompt-generator/character-prompt, prompt-generator/scene-prompt, prompt-generator/prop-prompt, prompt-generator/video-prompt, ], }loadAgentSkillsbackend/src/agents/skills.tsは、ワークスペース配下を再帰スキャンしてSKILL.mdを含むディレクトリを検出し、SKILL.lang.mdja / en / koが存在すれば言語変体の全文を注入します。日本語環境では本記事の主題であるSKILL.ja.mdがそのまま読み込まれ、extractor エージェントの行動規範として機能します。なお、extractor エージェントの「素のプロンプト」も backend/src/agents/index.ts のDEFAULT_PROMPTS.extractorに定義されており、ワークスペースのプロンプトファイルが存在しない場合のフォールバックになっています。スキル全文と素のプロンプトの両方が注入される設計backend/src/agents/index.ts のbuildInstructionsにより、モデルは「何を抽出するか」のルールと「どう保存するか」の手順を同時に与えられます。キャラクター抽出仕様5 フィールドと「性格は容貌へ変換」ルールSKILL.ja.md は、抽出するキャラクターフィールドがsave_dedup_charactersツールのパラメータと一対一で対応すると定めていますフィールド必須内容name✅キャラクターのフルネームrole—位置づけ。主役脇役端役appearance—容姿描写300〜500字——性別、年齢感、顔立ち、体格、雰囲気styling—装い——髪型、服装、メイク、アクセサリーなどdescription—バックストーリーと人物関係任意の補足最も重要なルールはappearance の書き方です。キャラクターの性格特性は単独で出力してはならず、外的な雰囲気と表情に変換して容姿描写に溶け込ませる必要があります。SKILL.ja.md の例では「性格が冷徹」を「冷徹な眼差し、抑えた表情、滅多に笑わない」と書くことになっています。これは、appearance が後続の生図プロセスで「見た目を固定する」ための入力になるためで、抽象的な性格タグではなく視覚的に描写可能な情報へ変換することが求められています。実装上、この 5 フィールドは backend/src/agents/tools/extract-tools.ts のsaveDedupCharactersのinputSchemazod スキーマと完全に一致しますinputSchema: z.object({ characters: z.array(z.object({ name: z.string(), role: z.string().optional(), description: z.string().optional(), appearance: z.string().optional(), styling: z.string().optional(), })), }),保存先のテーブルは backend/src/db/schema.ts のcharactersテーブルで、name・role・description・appearance・stylingに加えて、後続の生図で使われるfinalPrompt・imageUrl・referenceImages・seedValueなどの列を持ちます。つまり抽出段階では見た目情報を蓄積し、プロンプト生成エージェントがfinalPromptを後から補完する設計です。シーン抽出仕様locationtime が同一性の鍵シーンフィールドもsave_dedup_scenesのパラメータと一対一対応ですフィールド必須内容location✅具体的な場所の名称time—時間帯例昼夕暮れ深夜prompt—シーン描写——空間、調度品、年代の質感、重要な視覚要素純粋な背景。人物を含まないlighting—シーンの光影——光源、色調、明暗、雰囲気特徴的なルールは「同じ場所でも時間帯が異なれば新規シーンとみなす」という点です。これは重複排除の単位が「場所」単独ではなく「【場所時間帯】」であることを意味し、実装でも backend/src/agents/tools/extract-tools.ts のsaveDedupScenesがlocationとtimeの完全一致で既存シーンを判定しています。promptは「純粋な背景」に限定される点も重要です。人物を含めず、空間・調度品・年代の質感・重要な視覚要素だけを描写することで、後続の生図で背景画像として独立利用できる純度を保っています。保存先は backend/src/db/schema.ts のscenesテーブルで、locationnotNull・timenotNull・promptnotNull・lightingに加え、生図結果のimageUrl・finalPrompt・storyboardCountなどの列を持ちます。小道具抽出仕様「寧可少提」の原則と判定3問小道具の抽出は、キャラクター・シーンと比べて一段と厳格です。SKILL.ja.md が掲げる中核原則は「多く抽出するより少なく抽出する方がよい」。理由は、小道具が「白背景の単品画像を生成し、動画のクローズアップで参照するための高コストなアセット」だからです。数量の上限1 話あたり重要な小道具は通常0〜3 個3 個を超える場合は物語上の重要度で並べ替えて上位 3 個だけを残す必須の2条件同時に満たすこと、どちらか一方でも欠けてはならない物語を直接動かすその物品の出現、受け渡し、破損、発見がプロットの転換を引き起こす凶器、形見、重要書類、愛の誓いの贈り物、重要な証拠など単独で画像生成する価値がある後続の絵コンテでクローズアップされたり繰り返し登場したりするため、外観を固定する必要がある判定の3問各候補小道具に自問自答し、いずれか1つでも「いいえ」なら諦める①それを削除しても物語は成立するか→ 成立するなら抽出しないそれは単なる背景の道具にすぎない②それはキャラクターが何気なく使う日用品にすぎないかスマホ、箸、コップ、タバコ、傘→ そうであるなら抽出しない③それはシーンの調度品の一部かテーブル・椅子、照明、ドア・窓、掛け軸、食器→ そうであるなら抽出しないこれらはシーン描写に属する小道具に当たらない典型例何気なく使われるが物語の行方に影響しない普通の物品シーンの調度品や家具一度だけ言及されて後の続きがない物品キャラクターの通常の身に付け物キャラクターの装いに帰属空配列の許容条件に合う小道具がなければ無理に抽出しない。save_dedup_props呼び出し時に空の配列を渡せばよい。この「無いなら無いで良い」という判断を明示的に許容している点が、品質を過剰生成で壊さない設計の要です。小道具フィールドフィールド必須内容name✅小道具名type—種類——日常武器交通装飾書類などdescription—物品の外観——物品そのものの物理的な外観のみ材質、色、形状、大きさ、新旧の度合い、摩耗の跡など。物語上の用途は書かず、キャラクターや他の事物との関連にも触れない重要な注意点として、小道具に画像プロンプトは出力不要です。小道具の最終プロンプトは、画像生成の直前にプロンプト生成エージェントprompt_generatorが「白背景単品仕様」で専門に生成します。抽出段階はあくまで「どの物品を固定するか」の選定と、物理的外観の記録に徹します。実装の対応物である backend/src/agents/tools/extract-tools.ts のsaveDedupPropsは、name・type・descriptionを受け取り、既存の同名小道具があれば「物理的外観の変更により旧最終プロンプトが無効化される」という配慮までしています。descriptionが新しく渡された場合、既存レコードのfinalPromptをnullにリセットするのですfinalPrompt: prop.description ? null : existing.finalPrompt,これは、外観が変わった小道具に古い画像プロンプトを再利用してしまう事故を防ぐ、実装レベルでの一貫性担保です。使用手順8 ステップの実行フローSKILL.ja.md が定める抽出エージェントの実行手順は以下の 8 ステップですread_script_for_extractionを呼び出して現在の話の脚本を読み込むread_existing_charactersを呼び出してプロジェクトの既存キャラクターと現在の話に関連付け済みのキャラクターを確認するread_existing_scenesを呼び出してプロジェクトの既存シーンと現在の話に関連付け済みのシーンを確認するread_existing_propsを呼び出してプロジェクトの既存小道具と現在の話に関連付け済みの小道具を確認する現在の話に実際に関わるキャラクター、シーン、小道具のみを抽出するsave_dedup_charactersを呼び出してキャラクターを保存し、自動的に現在の話に関連付けるsave_dedup_scenesを呼び出してシーンを保存し、自動的に現在の話に関連付けるsave_dedup_propsを呼び出して小道具を保存し、自動的に現在の話に関連付けるこの 8 ツールは backend/src/agents/tools/extract-tools.ts でextractToolsとしてエクスポートされ、backend/src/agents/index.ts のAGENT_TOOLSにより extractor エージェントへ注入されています。「読む」系ツール1〜4の実装read_script_for_extractionextract-tools.ts現在のエピソードのscriptContentなければcontentを返します。episodeIdとdramaIdはリクエストコンテキストから注入されるため、ツールはグローバルなモジュール級シングルトンとして実装されており、マルチリクエスト間で状態を汚染しません。read_existing_charactersextract-tools.tsプロジェクト内の全キャラクターと、現在の話に紐づくキャラクターを返します。返却ペイロードはcount・characters・current_episode_charactersの 3 要素で、後者が「再利用候補」の判定材料になります。read_existing_scenes/read_existing_propsも同様の構成で、それぞれcurrent_episode_scenes/current_episode_propsを返します。「保存」系ツール6〜8の実装マージ作成の分岐save_dedup_characters・save_dedup_scenes・save_dedup_propsは共通の分岐構造を持ちます既存にヒット→ ID を保持したまま新情報をマージ更新merged/reusedをカウントヒットなし→ 新規作成createdをカウントいずれの場合も、保存直後にエピソードとの関連付けリンクが実行され、最後にmessage例「角色保存完成新增 2合并更新 1」とカウント結果を返します。この「抽出自動リンク」が 8 ステップの「自動的に現在の話に関連付ける」を実現しています。「現在の話」に関するルール重複排除と正規化の仕組みSKILL.ja.md が最後に定めるのは、抽出の「範囲」と「重複排除」のルールです。範囲のルール目標は**「現在の話」に必要なキャラクター、シーン、小道具を補完すること**であり、プロジェクト全体を再スキャンすることではないプロジェクトに既に存在するが現在の話に未関連付けのものも、再利用して現在の話に関連付ける重複排除ルールキャラクター小道具名前の完全一致で判定シーン【場所時間帯】の完全一致で判定ヒットしたものを優先的に再利用し、重複作成しない近名重複排除normalized_name名前に括弧付きの位置づけや別名が含まれる場合は、括弧の前の本体部分で比較します。例「林小雨主役」と「林小雨」は同一キャラクター小道具とみなし、既存を再利用します。read_existing_characters/read_existing_propsが返すnormalized_nameが正規化後の名前であり、シーンのnormalized_locationも同様です。これらに基づいて判断すればよい、と仕様は明記しています。このルールの実装は backend/src/agents/tools/extract-tools.ts にあります// キャラクター小道具成対の全角/半角括弧内定位・別名を除去、未閉じ括弧は最初の括弧で截断、 // 空白と全角スペースを除去、小文字化してから trim function normalizeName(name: string): string { return (name || ) .replace(/[(][^()]*[)]/g, ) .replace(/[(].*$/, ) .replace(/[\s ]/g, ) .toLowerCase() .trim() } // シーン空白のみ正規化括弧は削除しない // 「火车站候车厅」と「火车站站台」は異なるシーンとみなすため function normalizeLocation(loc: string): string { return (loc || ).replace(/[\s ]/g, ).toLowerCase().trim() }注目すべきは、キャラクターとシーンで正規化戦略が意図的に異なる点です。キャラクター名の括弧は「主角」のような付随情報なので除去して同一視しますが、シーンの括弧は「火车站候车厅」と「火车站站台」を区別するための実質的な情報なので残します。コメントにも明記されており、単純な共通正規化関数にせず、データの意味に合わせて分けた設計です。エピソード関連付けの実装「現在の話に関連付ける」は、backend/src/db/schema.ts の 3 つの多対多テーブルによって実現されますepisode_charactersepisodeIdcharacterIdepisode_scenesepisodeIdsceneIdepisode_propsepisodeIdpropIdextract-tools.ts のlinkCharToEpisode/linkSceneToEpisode/linkPropToEpisodeは、リンクが既に存在するかをクエリしてから挿入する冪等な実装です。同じキャラクターを別の話で再抽出しても重複リンクは作られず、既存リンクが温存されます。まとめ抽出スキルが支える「資産の一貫性」設計火宝短剧の extractor スキルは、単なる「情報抽出の指示書」ではなく、以下の 4 つの設計思想を具現化した仕様です視覚一貫性のための純度ルール性格は容貌へ変換、シーンは純背景に限定、小道具は物理的外観のみ——いずれも後続の生図・動画生成で「見た目を固定する」入力として使いやすい形に情報を純化します。コスト意識のある選定基準小道具は高コスト資産であるという前提のもと「判定3問」と「0〜3 個」の上限を設け、過剰生成を防ぎます。プロジェクト横断の重複排除キャラクター小道具は名前正規化、シーンは【場所時間帯】によるマッチングで、同じ資産を何度も作り直さず再利用します。現在の話を単位としたスコープ管理プロジェクト全体を再スキャンせず、必要な資産だけを補完してエピソードへ関連付けます。実装面では backend/src/agents/tools/extract-tools.ts の 7 ツールが仕様を忠実にコード化し、backend/src/agents/skills.ts の言語変体スキル読み込みにより日本語・英語・韓国語の UI 環境でも同じ規範が注入されます。本記事で紹介した仕様と実装の対応関係を追えば、抽出エージェントの挙動を完全に制御・拡張できるはずです。さらに深掘りしたい読者向けに、関連する主要ファイルを列挙します仕様の基本版中国語backend/workspace/skills/extractor/SKILL.md、英語版backend/workspace/skills/extractor/SKILL.en.md、韓国語版backend/workspace/skills/extractor/SKILL.ko.mdツール実装backend/src/agents/tools/extract-tools.tsスキル注入機構backend/src/agents/skills.tsエージェント登録と素のプロンプトbackend/src/agents/index.tsデータモデルbackend/src/db/schema.ts赞分享AI 应用人工智能媒体生成音视频AI Agent后端前端【免费下载链接】huobao-drama 火宝短剧 - 基于AI的一站式短剧生成平台 《一句话生成完整短剧从剧本到成片全自动化》 Huobao Drama - An AI-Powered End-to-End Short Drama Generator One Sentence to Complete Drama: Fully Automated from Script to Final Video项目地址https://gitcode.com/gh_mirrors/hu/huobao-drama点击查看免费下载相关推荐Voyager の Markdown 太字自動修復Markdown Patcher徹底解説Gemini で壊れる **太字** を直す仕組みと実装Voyager の Markdown 太字自動修復Markdown Patcher徹底解説Gemini で壊れる 太字 を直す仕組みと実装 Gemini™AI 应用前端插件系统提示工程es-toolkit の divide 関数完全ガイドLodash 互換の除算ユーティリティをソースコードとテストで徹底解説es toolkit の divide 関数完全ガイドLodash 互換の除算ユーティリティをソースコードとテストで徹底解説 本記事は、es toolkit前端后端es-toolkit の isEmpty 完全ガイドLodash 互換の空判定の仕組みと全パターン解説es toolkit の isEmpty 完全ガイドLodash 互換の空判定の仕組みと全パターン解説 es toolkit/compat が提供する isE前端后端上一篇探秘神奇宝贝决斗客户端Pokémon Showdown Client下一篇Trigger.dev与Consul集成构建可扩展微服务配置管理的终极指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表