Appearance
有料記事 AI 相談チャット
有料記事(月刊まっく / paid_article)編集画面の AI 相談パネルと、記事単位の会話履歴を定義する。一括生成(EP-021 / EP-022)や Cursor 会話執筆(MCP / Skill)とは別経路であり、編集画面内で対話しながら下書きを欄末尾へ追記する。
日別記事の AI 相談(EP-027 / EP-028)と UI 上は類似するが、対象選択・履歴テーブル・Tool カタログは有料記事専用とする。
画面
| 項目 | 契約 |
|---|---|
| 投稿タイプ | paid_article |
| 配置 | 編集画面右端ドック(メタボックス paid-article-ai-chat を wpwrap 直下へ移設) |
| 対象ホール | HallEnum::get_available_halls_for_daily_article() のチェック。初期は全オン。未選択は送信エラー(全日別扱いしない) |
| 対象欄選択 | ページ上の .paid-article-ai-generate__button[data-target-field][data-editor-id] から検出。「全てつける」「全て外す」で一括切替可 |
| 対象欄ラベル | 生成ボタンの data-label を優先(固定欄は PaidArticleAiTargetField、可変/特定機種は表題+サフィックス)。fieldLabels は固定欄のフォールバック。postbox 見出しは使わない |
| 送信・消去 | EP-029 / EP-030 |
| 下書き反映 | post meta へは自動保存しない。window.paidArticleCommentEditorAppendContent(editorId, html) で末尾追記(置換しない) |
| 未保存投稿 | post_id <= 0 のとき送信・消去を無効化し案内を表示 |
| 文字サイズ | パネルヘッダの「小 / 中 / 大」(共通モジュール article-ai-chat-font-size)。既定は中(ルート 15px)。localStorage キー articleAiChatFontSize に保存(未設定時のみ旧キー paidArticleAiChatFontSize を読む)。ラベル・履歴・エラー・入力はルート基準の em で連動する。日別記事 AI 相談ドックも同一契約 |
サーバ
| 項目 | 契約 |
|---|---|
| Service | PaidArticleAiChatService(PaidArticleAiChatServiceInterface) |
| 入力 | post_id / message / halls(1 つ以上) / target_fields(1 つ以上) / current_field_contents |
halls | 日別記事対象ホール slug。空は拒否(全日別へフォールバックしない)。履歴テーブルには保存しない |
target_fields | PaidArticleAiTargetField::parse で検証。許可外は拒否 |
| LLM 設定 | PaidArticleAiOptions(プロバイダ・モデル・API キー・欄別指針・有料相談用システムプロンプト) |
| システムプロンプト | ADM-028 の mycustom_paid_article_ai_chat_system_prompt。空のときは PaidArticleAiChatServiceCopy::DEFAULT_SYSTEM_PROMPT。生成用システムプロンプトは使わない |
| ユーザープロンプト | 対象月・選択ホール・選択欄・欄別指針・現行欄本文(切り詰め)・ユーザー文 |
| Tool | PaidArticleAiToolDispatcherInterface(管理画面カタログ)のみ。DailyArticleAiToolDispatcher は使わない |
| 投稿コンテキスト | 対象月を解決後、set_post_context(post_id, month, '' if multiple else single field) |
| Tool ホール制約 | 送信中のみ set_selected_halls。halls 引数を持つ Tool は省略/選択外を UI 選択へ交差・置換(選択外へ広げない)。終了時に clear_selected_halls。CLI/一括生成は制約なしのまま |
| LLM 応答形式 | {"reply":"...","drafts":{"paid_article_intro":"<p>...</p>"}}。drafts キーは選択 target_field のみ |
| 下書き保存 | Service は post meta を更新しない。返信と drafts を返すだけ |
履歴
| 項目 | 契約 |
|---|---|
| テーブル | db_paid_article_ai_chat_message |
| スコープ | post_id 単位(セッション分割は対象外) |
| 列 | id / post_id / role / body / target_fields_json / drafts_json / created_at |
| インデックス | (post_id, id) |
| 上限 | 投稿あたり直近 50 件(古い行は insert 後に削除) |
| 消去 | EP-030、および before_delete_post で当該 paid_article の行を削除 |
日別記事 AI 相談との差分
| 観点 | 有料記事(本設計) | 日別記事(EP-027 / EP-028) |
|---|---|---|
| 対象選択 | ホール + target_field(考察欄)。ホールは履歴に保存しない | ホール + pre / after(ホールは履歴に保存) |
| 履歴テーブル | db_paid_article_ai_chat_message | db_daily_article_ai_chat_message |
| Tool カタログ | 有料記事管理画面カタログ | 日別記事専用カタログ |
| 下書き挿入 API | paidArticleCommentEditorAppendContent | dailyArticleAppendConsiderationContent |
| 文字サイズ | 両 CPT 共通(小 / 中 / 大・articleAiChatFontSize) | 同左 |
関連
- Tool 契約: paid-article-ai-tools-design.md
- LLM 設定画面: ADM-028
- CPT: CPT-002
- テーブル一覧: custom-application-tables.md