AIによる対話型の鑑定
星詠の公開仕様では、Claude APIとOpenAI APIを使ってAI応答を生成。占い結果・対話・PDF鑑定書をAI生成コンテンツとして扱う。
ASTRAIA企画と設計の
記録
個人で企画・開発し、本番公開した星詠 / Hoshiyomi。対話から鑑定書を届ける体験を、生成待ち・生成中・完成・失敗、保存先の条件へ具体化。実物PDF見本とDB設計をもとに紹介します。
設計の過程を読む設計上の問い:対話から生まれる鑑定書を、生成中や失敗も含めてどう届け、後から確認できるようにするか。
PDF注文に状態・進捗・失敗理由・保存先を持ち、会話と記憶も分ける。状態名の制約と、正しい遷移や再実行の保証は分けて考える。
設計判断を読む実物の鑑定書PDF。PDF注文の進捗・失敗理由・保存先と、会話・記憶を記録するDB定義を確認できます。
実画面を見る個人で企画し、生成AIを活用して設計・実装から本番公開まで担当。対話・PDF注文の設計と、生成した実物PDF見本を紹介します。
使う人:占いや対話を通じて自分を振り返りたい人占いや診断の結果を読む。
fortune_readingsに結果や生成モデル・利用量を保持。
結果をもとに会話を続ける。
会話に鑑定の参照キーを持ち、要約や重要度付きの記憶を別に保存。
PDFの出来上がりを待つ。
注文に状態・進捗・エラー・完了日時を保持する構造。
鑑定書を読み返す。
保存資料ではMinIOにPDFを保存。サンプルのメタデータはChromium / Skiaによる出力。
会話・鑑定結果・要約と記憶
Claude API / OpenAI API
チャット応答・鑑定書として届ける
AIによる対話、占い結果の生成、読み返せるPDF鑑定書。会話の文脈と生成物の管理を組み合わせた、星詠 / Hoshiyomiの体験です。
星詠の公開仕様では、Claude APIとOpenAI APIを使ってAI応答を生成。占い結果・対話・PDF鑑定書をAI生成コンテンツとして扱う。
鑑定の参照キー、会話の要約、重要度付きの記憶を保持。会話の続きに必要な情報を分けて管理する構造。
生成モデル名と入出力トークン数を記録。PDFは進捗・完了・失敗を管理し、成果物をMinIOに保存する。
本番公開済みのサービスです。星詠 / Hoshiyomiで利用するAPIと、対話・生成物の保存設計を紹介しています。
会話の文脈から、続く体験と生成物へ。
資料から整理した構成図項目を選ぶと、そのデータにつながる関係を確認できます。
fortune_readingsuser_id接続先:app_userschat_sessionsuser_id接続先:app_userschat_messagessession_id接続先:chat_sessionsmemory_entriesuser_id接続先:app_userspdf_ordersuser_id接続先:app_userschat_sessionscontext_fortune_id接続先:fortune_readings実線はSQL上の外部キー、破線は保存されている参照キーです。鑑定と会話の参照キーについて、外部キー制約はこの資料では確認できません。

その場の発言と、後に引き継ぐ文脈を異なる情報として整理できる。
参照:astraia.sql / chat_sessions・memory_entries
参照:astraia.sql / pdf_orders_status_check
参照:astraia.sql / chat_messages・daily_fortunes_cache
生成待ちから完成まで、保存する情報を4つの場面で紹介します。説明用のため、実際のAI生成や課金は行いません。
下の状況を選ぶと、図や説明が切り替わります。
注文内容・生成に使う条件・作成日時を保存します。まだ完成していない注文も、状態を分けて管理できる構造です。
実運用で確認したいこと長時間待ったままの注文を見つけられるかを確認します。
対話から読み返せる鑑定書へ、必要な画面・会話の文脈・生成中の状態を分けて企画を具体化する。
体験・仕様・画面構成を自分で決め、コード作成に生成AIを活用。対話からPDF生成まで、意図した動作になっているか検証し、改善する。
生成中断、再実行、保存先の実在を確認条件にする。実物PDFがあることと、復旧や二重生成防止が動くことを区別する。
MinIOのsamples領域に「星詠 / HOSHIYOMI」の鑑定書見本を確認。人物名は例文。
PDF注文の状態・進捗・失敗理由・保存先をDB定義で紹介。掲載するPDF見本は、実際に生成した鑑定書です。
本番環境へ公開済みです。Claude API・OpenAI APIを利用し、AI対話とPDF鑑定書を提供。掲載の図と条件切替デモでは、生成処理と保存する状態の関係を説明します。