登場人物と役割
概要
Jester に関わる人物・システムの一覧とその役割を定義する。
人物
コンテンツ管理者
コンテンツの作成・管理を担当する運営担当者。管理画面(jester-user-web)から操作する。
| 操作 | 内容 |
|---|---|
| レース情報管理 | レース結果 JSON の登録・更新・削除、AI予想データの登録 |
| 記事管理 | 記事の AI 生成リクエスト・本文の確認と編集・公開 |
| 生成失敗の対応 | 生成に失敗した記事の理由確認・追加指示つきの再生成 |
| 過去ブログ管理 | 過去ブログの取り込み(スクレイピング JSON のアップロード)・カテゴリの更新 |
| ブログ管理 | AI リライト/書き下ろしのリクエスト・本文の確認と編集・削除・公開 |
| サムネイル管理 | ブログのサムネイル生成リクエスト |
| 関連情報 | ブログの関連情報(類似ブログへのリンク)の生成 |
| マスタ管理 | カテゴリ・NGワードの作成・更新・削除 |
コンテンツ閲覧者
公開されたコンテンツを閲覧するエンドユーザー。
| 操作 | 内容 |
|---|---|
| レース結果ページの閲覧 | レース結果と、その中に埋め込まれた「10秒サマリー」記事 |
| ブログ記事の閲覧 | 公開済みブログ記事 |
システム(自動処理)
App Lambda(odds_poc_app)
コンテンツ管理者からの REST API リクエストを受け付け、CRUD 操作と非同期処理の起点を担う。
| 役割 | 内容 |
|---|---|
| API ハンドリング | 全エンドポイントのリクエスト受付・レスポンス返却 |
| DB 操作 | DocumentDB への読み書き |
| メディア保存 | S3 へのメディアファイルアップロード・署名付き URL の発行 |
| ジョブ投入 | SQS への記事生成・ブログ生成・リライト・サムネイル生成ジョブ送信 |
| ベクトル化 | 過去ブログ登録時の埋め込みベクトル生成 |
| 関連情報の生成 | ブログ同士の類似度計算と、記事下部への関連情報セクションの挿入(同期処理) |
article_generation Lambda
レース結果10秒サマリーを AI で執筆する非同期処理システム。
| 役割 | 内容 |
|---|---|
| レース解析 | レース結果・レース動画・コース画像(競馬のみ)を AI エージェントが総合解析する |
| 記事執筆 | 確定事実と解析結果を根拠に、見出し1つと3文のサマリーを執筆する |
| 事実ガード | 値の差し込み・公式データとの照合・NGワード検査を行い、解消できなければ生成を失敗させる |
| 結果送信 | 生成した記事データを SQS 経由で article_builder Lambda に送信する |
| 失敗の記録 | 最終試行で失敗した場合、記事を「生成失敗」として理由つきで残す |
article_builder Lambda
生成された記事データから記事 HTML を構築し、DocumentDB に保存する非同期処理システム。
| 役割 | 内容 |
|---|---|
| 結果受信 | article_generation Lambda の生成結果を SQS 経由で受信する |
| HTML 構築 | 記事データを React コンポーネントに流し込み、サマリーボックスの HTML を構築する |
| 結果保存 | 構築した記事を「下書き」として DocumentDB に保存する(公開状態への遷移は行わない) |
blog_generation Lambda
レースの情報からブログを書き下ろす非同期処理システム。
| 役割 | 内容 |
|---|---|
| レース回顧の執筆 | レース結果・レース動画・コース画像からレース後の振り返りを書く |
| レース予想の執筆 | 出走表と AI予想印からレース前の予想を書く |
| 事実ガード | 記事生成と同じく、値の差し込み・公式データとの照合・NGワード検査を行う |
| ベクトル化 | 生成本文から埋め込みベクトルを作り、関連情報の検索に使えるようにする |
| 結果送信 | 生成したブログ本文を SQS 経由で blog_builder Lambda に送信する |
blog_rewriter Lambda
過去ブログを内容を変えずにリライトする非同期処理システム。
| 役割 | 内容 |
|---|---|
| レース解析 | レースに紐づく場合、レース結果・動画・コース画像を解析する |
| リライト | 原文の内容と書き手の文体を保ったまま書き直し、記事のブロック構造として構造化する |
| サマリー生成 | リライト後の本文から「10秒サマリー」を生成する |
| NGワード検査 | 生成結果を検査する(元記事に既にある語は対象外) |
| 結果送信 | リライト結果を SQS 経由で blog_builder Lambda に送信する |
blog_builder Lambda
ブログ本文を記事テンプレートへ流し込んで HTML を構築し、DocumentDB に保存する非同期処理システム。
| 役割 | 内容 |
|---|---|
| テンプレート選択 | カテゴリに応じて記事テンプレート(予想 / レース結果 / 汎用)を選ぶ |
| HTML 構築 | オッズパークの実コンポーネント・実 SCSS で記事エリアを描画する |
| 引き継ぎ | 既存のサムネイル・関連情報を再ビルド後も維持する |
| 結果保存 | 構築したブログを「下書き」として DocumentDB に保存する |
thumbnail_generation Lambda
レース動画からサムネイル画像を作る非同期処理システム。
| 役割 | 内容 |
|---|---|
| 瞬間の選定 | レース動画・レース結果・コース画像を AI エージェントが解析し、最適な秒数を選ぶ |
| フレーム抽出 | ffmpeg でその瞬間のフレームを切り出す |
| 結果保存 | 画像を S3 に保存し、メディア情報を DocumentDB に登録する |
| 本文への埋め込み | ブログ本文の「10秒サマリー」直下にサムネイル画像を挿入する |
外部リポジトリ
jester-user-web
コンテンツ管理者が操作する管理画面(React SPA)。 レース結果ページ・ブログ記事のプレビューも提供する。
oddspark-static-pages
オッズパークのデザイン資産(コンポーネント・SCSS)のリポジトリ。 blog_builder と jester-user-web は、ここから同期した実コンポーネントを使って描画する。