## 期間・役割・体制
期間:2025年12月 - 2026年7月
職種・役割:バックエンドエンジニア・リーダー(LLM・バックエンド全般)
チーム規模:5名
担当分担:LLM・バックエンド全般を自身が担当。フロントエンドは別のエンジニアが担当。
## プロジェクト概要
Webサイト訪問者の属性や閲覧コンテンツに応じて、CTA(行動喚起)文言を生成・最適化して配信する基盤の開発。LLM・バックエンド全般を担当し、LLMコンテキスト生成パイプライン、CTA文言生成API、ABテストのCTR集計・検定結果に基づく文言の差し替えを自動化するバックエンドを設計・実装。フロントエンド担当者と分担して基盤を構築
## 課題・設計判断・成果
- 事業部ではCTA文言の作成・集計・判定・差し替えに、1記事あたり半日〜1日程度の実作業を要していました。事業部が表現を調整しながら運用できるよう、プロンプトによるトーン調整、文言ごとの表示回数を分母にしたCTR集計、設定した検定ルールに基づく差し替えを設計しました。候補変更時は評価期間と集計データをリセットして前後の結果を分離しました。導入後、4つの対象URLで文言更新が自動稼働し、当該4作業の手作業は不要になりました。担当交代後も約3ヶ月、障害なく稼働しています(導入前工数は本人概算。テスト中の待機時間を除く)。
- 全対象を毎回LLMで生成すると費用が増えるため、既存出力の再利用と環境別のモデル切替を採用しました。初回フル実行では940記事を129回のLLM呼び出し、概算513円で処理し、全件を毎回生成した場合の見積額に対して実行コストを約86%削減しました。
## 担当業務
- 事業部との折衝をリードし、要件整理、モデルごとの出力確認・選定、運用方法の合意形成を担当
- 事業部担当者がプロンプトを通じて文言のトーンや表現を調整できる運用を設計・実装
- データパイプラインの設計・構築
- 文言ごとの表示回数・クリック数からCTRを集計し、検定結果に基づいて文言を自動で差し替えるバックエンドを設計・実装
- 評価期間の可視化と生成候補の変更に対応。候補変更時には集計データと評価期間をすべてリセットし、変更前後のデータを分離
- LLMコンテキスト生成パイプライン(記事コンテンツ・訪問者属性・遷移先URL・ペルソナ抽出の4ステージ)の設計・実装
- Amazon Bedrock連携の実装(推論プロファイル対応、認証をboto3標準チェーンへ統一、Structured Outputsによるスキーマ準拠出力とリトライ制御)
- CTAボタン文言生成APIの開発と、生成品質を担保するプロンプト設計(禁止語ルール、過度表現の抑制、遷移先URLの重複チェック)
- 実行ID単位のトレーサビリティ確保と、失敗・生成不可データの取り扱い方針の全ステージ統一
- DDD(ドメイン駆動設計)に従った実装と、クリーンアーキテクチャに沿った責務分離・モジュール設計
## 主な実績・取り組み
- 環境別のモデル切替(開発=Haiku 4.5 / 本番=Sonnet 4.5)と、既存出力がある場合に再生成をスキップする制御を導入し、開発環境のLLM単価を約1/3に削減
- Bedrock呼び出し回数・トークン数・概算費用をSlackへ通知する仕組みを構築し、LLMコストの継続的な可観測性を確保
- 4ステージに散在していた共通処理(記事取得・失敗記録・S3パス定義)を集約し、機能追加時の変更範囲を削減
- LLMコンテキストの参照元をS3へ統一することで、既存APIで発生していた500/504エラーを解消
## 使用技術
Python, FastAPI, Amazon Bedrock (Claude Haiku 4.5 / Sonnet 4.5), AWS (ECS, EventBridge, S3), Docker, uv, Poetry, pandas, BeautifulSoup, pytest, SonarQube