コンテンツにスキップ

blog テーブル

概要

項目 内容
テーブル名 blog
説明 AI が生成したブログ記事を管理するテーブル。過去ブログのリライト(blog_rewriter)と、レースの情報から書き下ろす回顧・予想(blog_generation)の両方を扱う
主な用途 ブログ記事の生成・編集・公開管理・関連情報の類似検索

カラム定義

カラム名 データ型 PK FK Unique Nullable デフォルト 備考
_id ObjectId ◯ ◯ DocumentDB自動採番
name string ブログのタイトル。本文 HTML にも h2 見出しとして焼き込まれるため、更新時は本文の見出しも差し替える
race_id string auto_racing:_id / bicycle_racing:_id / horse_racing:_id ◯ 紐づくレース。レースに紐づかないブログでは null
race_type enum ◯ auto_racing / bicycle_racing / horse_racing。レース由来のブログのみ設定
blog_type string ◯ ブログのシリーズ種別(例: ジョッキーインタビュー、斎藤コラム)
old_blog_id string old_blog:_id ◯ リライト元の過去ブログ。書き下ろし(回顧・予想)では null
source_url string ◯ リライト元の過去ブログの掲載元 URL(old_blog から引き継ぐ)
category_id string category:_id ◯
body_html string HTML形式。blog_builder が oddspark の実コンポーネントを SSR して構築する
embedding number[] ◯ 埋め込みベクトル。関連ブログの類似検索(コサイン類似度)に使用
status enum draft generating: 生成中 / draft: 下書き / published: 公開
created_at number
updated_at number 一覧取得のデフォルトは更新日時順にする
deleted_at number ◯

出自(origin)

ブログが「リライト」か「書き下ろし」かは保存せず、old_blog_id の有無から導出する。 API レスポンスでは origin フィールドとして返る。

origin 条件 生成元
rewrite old_blog_id あり blog_rewriter(過去ブログのリライト)
generation old_blog_id なし blog_generation(レース回顧・予想の書き下ろし)

embedding の取得経路

経路 内容
リライト old_blog 登録時に odds_poc_app が付与したベクトルを、ブログ作成時に引き継ぐ
書き下ろし blog_generation が生成本文から作成して保存する

ベクトル生成には Amazon Bedrock の Titan Text Embeddings v2(amazon.titan-embed-text-v2:0)を使用する。

body_html のマークアップ契約

複数のサービスが body_html を正規表現で後加工するため、次のマークアップを維持する必要がある。

要素 用途
<div class="nb-body"> 本文コンテナ。thumbnail_generation の挿入アンカー
<img class="nb-thumbnail" src="..."> サムネイル画像。再ビルド時に抽出して引き継ぐ
<section class="nb-related"> 関連情報セクション。再ビルド時に抽出して引き継ぐ
ルート要素の末尾 </div> 関連情報はルート閉じタグ直前に挿入する