Yahoo!フリマ出品文章作成AIテンプレート【エージェント最適化版】

AI

フリマ出品プロジェクト規約

概要

本規約は、Yahoo!フリマへの出品文章をAIエージェントが自律的に生成するためのルールセットです。2026年1月時点の最新プラットフォーム仕様に準拠しています。


1. METADATA

metadata:
  version: "v2.1"
  last_updated: "2026-01-11"
  platform: "Yahoo!フリマ"
  specification_reference: "2025年9月仕様変更対応版"
  author: "AI Agent"
  purpose: "フリマ出品文章の自律生成"

2. CRITICAL_RULES

2.1 文字数制限(2026年最新仕様)

【重要】2025年9月仕様変更:タイトル文字数制限が40文字→65文字に拡張されました。

character_limits:
  title:
    max_length: 65  # 2025年9月仕様変更: 40→65文字に拡張
    min_length: 10
    warning_threshold: 60
    note: "旧仕様の40文字制限は廃止済み。必ず65文字を基準とすること"
  
  description:
    max_length: 1000
    recommended_min: 200
    optimal_range: [300, 800]

2.2 禁止表現リスト

prohibited_expressions:
  # 取引ルール違反系
  transaction_violations:
    - "即購入OK"
    - "即購入◯"
    - "コメントなし購入OK"
    - "購入前にコメント必須"
    - "プロフ必読"
    - "プロフィール確認必須"
    - "取り置き可"
    - "専用出品"
    - "○○様専用"
  
  # 誇大表現系
  exaggerated_claims:
    - "最安値"
    - "業界最安"
    - "どこよりも安い"
    - "絶対"
    - "100%"
    - "完璧"
    - "新品同様"  # 実際に新品同様でない場合
  
  # 外部誘導系
  external_links:
    - "LINE"
    - "メルカリ"
    - "ラクマ"
    - "別サイト"
    - "直接取引"
    - "手渡し希望"
  
  # 曖昧表現系
  vague_expressions:
    - "ノークレームノーリターン"
    - "NC/NR"
    - "3N"
    - "神経質な方お断り"
    - "完璧を求める方はご遠慮"

  # 除外ロジック
  exclusion_rule: |
    生成された文章に上記の禁止表現が含まれる場合、
    自動的に適切な代替表現に置換するか、当該フレーズを削除すること。

2.3 必須要素

mandatory_elements:
  title:
    - brand_or_category  # ブランド名またはカテゴリ
    - item_name          # 商品名
    - key_feature        # 主要特徴(色、サイズ等)
  
  description:
    - item_condition     # 商品状態の明記
    - reason_for_sale    # 出品理由(信頼性向上)
    - size_or_spec       # サイズ・仕様
    - shipping_info      # 発送に関する情報

3. INPUT_SCHEMA

input_schema:
  type: object
  required:
    - item_name
    - category
    - condition
    - price
  
  properties:
    item_name:
      type: string
      minLength: 2
      maxLength: 100
      description: "商品名"
    
    brand:
      type: string
      nullable: true
      description: "ブランド名(任意)"
    
    category:
      type: string
      enum:
        - "ファッション"
        - "家電"
        - "本・雑誌"
        - "ゲーム"
        - "おもちゃ"
        - "スポーツ"
        - "美容・健康"
        - "インテリア"
        - "その他"
      description: "商品カテゴリ"
    
    condition:
      type: string
      enum:
        - "新品・未使用"
        - "未使用に近い"
        - "目立った傷や汚れなし"
        - "やや傷や汚れあり"
        - "傷や汚れあり"
        - "全体的に状態が悪い"
      description: "商品の状態"
    
    price:
      type: integer
      minimum: 300
      maximum: 9999999
      description: "販売価格(円)"
    
    color:
      type: string
      nullable: true
      description: "色"
    
    size:
      type: string
      nullable: true
      description: "サイズ"
    
    purchase_date:
      type: string
      format: date
      nullable: true
      description: "購入時期(YYYY-MM形式可)"
    
    reason_for_sale:
      type: string
      nullable: true
      examples:
        - "サイズが合わなくなったため"
        - "引っ越しに伴う整理"
        - "使用機会がなくなったため"
        - "買い替えのため"
      description: "出品理由"
    
    defects:
      type: array
      items:
        type: string
      default: []
      description: "ダメージ・欠陥の詳細リスト"
    
    shipping_speed:
      type: string
      enum:
        - "24時間以内"
        - "1-2日"
        - "2-3日"
        - "4-7日"
      default: "1-2日"
      description: "発送までの日数"
    
    additional_features:
      type: array
      items:
        type: string
      default: []
      description: "追加アピールポイント"

4. ALGORITHM

4.1 タイトル生成アルゴリズム

title_generation:
  priority_order:
    1: "{{ brand }}"           # ブランド名(最優先)
    2: "{{ item_name }}"       # 商品名
    3: "{{ color }}"           # 色
    4: "{{ size }}"            # サイズ
    5: "{{ key_feature }}"     # 主要特徴
  
  format_rules:
    - separator: " "  # 要素間はスペース区切り
    - bracket_usage:
        - "【】"  # 強調したいキーワード
        - "◆"    # 特徴の列挙
    - priority_keywords:
        - "美品"
        - "送料無料"
        - "限定"
        - "レア"
  
  truncation_strategy: |
    65文字を超える場合の優先削除順序:
    1. 追加特徴(key_feature)を削除
    2. サイズ情報を短縮
    3. 色情報を短縮
    ※ブランド名と商品名は原則削除しない

4.2 説明文生成アルゴリズム

description_generation:
  structure:
    opening:
      template: |
        ご覧いただきありがとうございます。
        {{ reason_for_sale }}出品いたします。
    
    product_info:
      template: |
        ■ 商品情報
        ・商品名: {{ item_name }}
        {% if brand %}・ブランド: {{ brand }}{% endif %}
        {% if color %}・カラー: {{ color }}{% endif %}
        {% if size %}・サイズ: {{ size }}{% endif %}
    
    condition_section:
      template: |
        ■ 商品の状態
        {{ condition }}
        {% if defects %}
        【ダメージ箇所】
        {% for defect in defects %}
        ・{{ defect }}
        {% endfor %}
        {% endif %}
    
    trust_elements:
      template: |
        ■ 発送について
        ・{{ shipping_speed }}で発送いたします
        ・匿名配送対応
        ・丁寧に梱包してお届けします
    
    closing:
      template: |
        ご不明点がございましたらお気軽にコメントください。

4.3 ハッシュタグ戦略

hashtag_strategy:
  max_count: 10
  
  # ⚠️ 【重要】出力形式の厳格な仕様(HASHTAG-FORMAT-001対応)
  output_format:
    separator: " "  # 半角スペース区切り(必須)
    terminator: "#"  # 末尾に # を付加(必須)
    line_break: false  # 改行は一切使用しない(必須)
    example: "#Shokz #骨伝導イヤホン #充電ケーブル #OpenRun #美品 #"
    
    format_rules:
      - "各ハッシュタグの間は必ず半角スペース1つで区切る"
      - "最後のタグの後ろに半角スペース + # を付加する"
      - "改行は一切使用しない(全タグを1行で出力)"
      - "カンマ区切りは使用しない"
    
    prohibited_formats:
      - "改行区切り(1タグ1行)"
      - "カンマ区切り"
      - "末尾 # なし"
  
  category_mapping:
    ファッション:
      - "#ファッション"
      - "#メンズ" or "#レディース"
      - "#{{ brand }}"
      - "#おしゃれ"
    家電:
      - "#家電"
      - "#{{ brand }}"
      - "#便利グッズ"
    本・雑誌:
      - "#本"
      - "#読書"
      - "#{{ genre }}"
  
  universal_tags:
    - "#フリマ"
    - "#送料無料"  # 該当する場合のみ
    - "#美品"      # 該当する場合のみ
  
  generation_rule: |
    1. カテゴリ固有タグを優先的に選択
    2. ブランド名をタグ化
    3. 商品特性に応じたユニバーサルタグを追加
    4. 合計10個以内に収める
    5. 【必須】出力時はoutput_formatの仕様に厳格に従うこと
       - 形式例: #タグ1 #タグ2 #タグ3 #

5. TEMPLATE_STRUCTURE

5.1 タイトルテンプレート(Jinja2形式)

{# タイトル生成テンプレート - 最大65文字 #}
{% set title_parts = [] %}

{% if brand %}
  {% set _ = title_parts.append("【" ~ brand ~ "】") %}
{% endif %}

{% set _ = title_parts.append(item_name) %}

{% if condition == "新品・未使用" or condition == "未使用に近い" %}
  {% set _ = title_parts.append("美品") %}
{% endif %}

{% if color %}
  {% set _ = title_parts.append(color) %}
{% endif %}

{% if size %}
  {% set _ = title_parts.append(size) %}
{% endif %}

{{ title_parts | join(" ") | truncate(65, True, "") }}

5.2 説明文テンプレート(Jinja2形式)

{# 説明文生成テンプレート - 最大1000文字 #}
ご覧いただきありがとうございます。
{% if reason_for_sale %}{{ reason_for_sale }}{% else %}整理のため{% endif %}出品いたします。

■ 商品情報
・商品名: {{ item_name }}
{% if brand %}・ブランド: {{ brand }}
{% endif %}
{% if color %}・カラー: {{ color }}
{% endif %}
{% if size %}・サイズ: {{ size }}
{% endif %}
{% if purchase_date %}・購入時期: {{ purchase_date }}
{% endif %}

■ 商品の状態
{{ condition }}
{% if defects | length > 0 %}
【ダメージ・使用感について】
{% for defect in defects %}
・{{ defect }}
{% endfor %}
{% endif %}

{% if additional_features | length > 0 %}
■ おすすめポイント
{% for feature in additional_features %}
・{{ feature }}
{% endfor %}
{% endif %}

■ 発送について
・{{ shipping_speed | default("1-2日", true) }}で発送いたします
・匿名配送対応
・丁寧に梱包してお届けします

ご不明点がございましたらお気軽にコメントください。
よろしくお願いいたします。

6. EXECUTION_FLOW

6.1 MCPツールを用いた自律実行手順

execution_flow:
  description: "AIエージェントがMCPツールを使用して自律的に出品文章を生成する5ステップ"
  
  steps:
    step_1:
      name: "入力データの取得と検証"
      actions:
        - tool: "read_file / user_input"
          description: "商品情報をファイルまたはユーザー入力から取得"
        - validation: |
            INPUT_SCHEMA に基づき以下を検証:
            - 必須フィールドの存在確認
            - 型チェック(string, integer, enum等)
            - 値の範囲チェック(price: 300-9999999)
      error_handling: |
        検証エラー時は具体的なエラー内容を返し、
        修正を促すメッセージを生成
    
    step_2:
      name: "禁止表現スクリーニング"
      actions:
        - check: "CRITICAL_RULES.prohibited_expressions"
          description: "入力データおよび生成候補に禁止表現が含まれていないか確認"
        - replace_or_remove: |
            禁止表現検出時の処理:
            - "即購入OK" → 削除
            - "プロフ必読" → 削除
            - "ノークレームノーリターン" → 削除
            - "新品同様" → 条件に応じて "美品" に置換
      output: "クリーンな入力データ"
    
    step_3:
      name: "タイトル生成"
      actions:
        - apply_template: "TEMPLATE_STRUCTURE.title_template"
        - apply_algorithm: "ALGORITHM.title_generation"
        - validate_length: |
            生成タイトルが65文字以下であることを確認
            超過時は truncation_strategy に従い短縮
      output: "65文字以内の最適化タイトル"
    
    step_4:
      name: "説明文生成"
      actions:
        - apply_template: "TEMPLATE_STRUCTURE.description_template"
        - apply_algorithm: "ALGORITHM.description_generation"
        - add_hashtags: "ALGORITHM.hashtag_strategy"
        - validate_hashtag_format: |
            ⚠️ ハッシュタグ形式の必須チェック:
            - 全タグが半角スペースで区切られているか
            - 最後に # が付加されているか
            - 改行が含まれていないか
            - 正しい形式例: #タグ1 #タグ2 #タグ3 #
        - validate_length: |
            生成説明文が1000文字以下であることを確認
            超過時は追加情報セクションから優先的に削減
      output: "1000文字以内の説明文 + 正しい形式のハッシュタグ"
    
    step_5:
      name: "最終検証と出力"
      actions:
        - final_check:
            - "禁止表現が含まれていないこと"
            - "文字数制限を満たしていること"
            - "必須要素が含まれていること"
        - output_format:
            title: "生成されたタイトル"
            description: "生成された説明文"
            hashtags: "ハッシュタグリスト"
            validation_result: "検証結果サマリー"
      tool: "write_file / display"
      description: "結果をファイル出力または画面表示"

6.2 エラーハンドリング

error_handling:
  validation_errors:
    missing_required_field:
      action: "エラーメッセージを返し、不足フィールドを明示"
      example: "必須項目「condition」が入力されていません"
    
    invalid_value:
      action: "許容値を提示し、再入力を促す"
      example: "conditionには以下の値を指定してください: 新品・未使用, 未使用に近い, ..."
  
  generation_errors:
    title_too_long:
      action: "truncation_strategyに従い自動短縮"
      log: "タイトルを65文字に短縮しました"
    
    prohibited_word_detected:
      action: "自動置換または削除"
      log: "禁止表現「○○」を削除しました"

7. QUALITY_ASSURANCE

7.1 セルフチェックリスト

quality_checklist:
  title:
    - "65文字以内であること(必須)"
    - "ブランド名または商品カテゴリが含まれていること"
    - "商品名が含まれていること"
    - "禁止表現が含まれていないこと"
  
  description:
    - "1000文字以内であること(必須)"
    - "商品状態が明記されていること"
    - "出品理由が含まれていること(信頼性向上)"
    - "発送情報が含まれていること"
    - "禁止表現が含まれていないこと"
    - "匿名配送・迅速発送など信頼性要素が含まれていること"
  
  hashtags:  # v2.1追加: ハッシュタグ形式チェック
    - "半角スペースで区切られていること(必須)"
    - "最後に # が付加されていること(必須)"
    - "改行が含まれていないこと(必須)"
    - "形式例: #タグ1 #タグ2 #タグ3 #"
  
  overall:
    - "Jinja2変数が未解決のまま残っていないこと"
    - "文法・誤字脱字がないこと"
    - "購入者視点で魅力的な文章になっていること"

7.2 バリデーション結果テンプレート

validation_result_template:
  format: |
    ## 生成結果バリデーション
    
    ### タイトル
    - 文字数: {{ title_length }}/65文字 {{ "✅" if title_length <= 65 else "❌" }}
    - 禁止表現チェック: {{ "✅ なし" if no_prohibited_in_title else "❌ 検出" }}
    
    ### 説明文
    - 文字数: {{ desc_length }}/1000文字 {{ "✅" if desc_length <= 1000 else "❌" }}
    - 禁止表現チェック: {{ "✅ なし" if no_prohibited_in_desc else "❌ 検出" }}
    - 必須要素チェック: {{ "✅ 全て含む" if all_mandatory else "❌ 不足あり" }}
    
    ### ハッシュタグ(v2.1追加)
    - 形式チェック(スペース区切り): {{ "✅ 正常" if space_separated else "❌ 形式エラー" }}
    - 末尾 # チェック: {{ "✅ 付加済" if ends_with_hash else "❌ 未付加" }}
    - 改行チェック: {{ "✅ なし" if no_linebreak else "❌ 改行あり" }}
    - 形式例: #タグ1 #タグ2 #タグ3 #
    
    ### 総合判定
    {{ "✅ 出品可能" if all_passed else "❌ 修正が必要" }}

8. CHANGELOG

changelog:
  - version: "v2.1"
    date: "2026-01-11"
    incident_reference: "HASHTAG-FORMAT-001"
    changes:
      - "【重要】ハッシュタグ出力形式の仕様を厳格化(半角スペース区切り、末尾#付加、改行禁止)"
      - "4.3 hashtag_strategyにoutput_formatセクションを追加し、具体的な形式例を明記"
      - "6.1 step_4にハッシュタグ形式の必須チェックを追加"
      - "7.1 quality_checklistにhashtagsセクションを新設"
      - "7.2 validation_result_templateにハッシュタグ形式チェック項目を追加"
  
  - version: "v2.0"
    date: "2026-01-10"
    changes:
      - "タイトル文字数制限を40→65文字に更新(2025年9月仕様変更対応)"
      - "変数記法をJinja2形式 {{ variable }} に統一"
      - "禁止表現リストを拡充し、自動除外ロジックを追加"
      - "INPUT_SCHEMAをJSON Schema形式で厳格化"
      - "MCPツールによる自律実行フローを追加"
      - "セールスライティング要素(出品理由、信頼性要素)を必須化"
      - "QUALITY_ASSURANCEセクションを新設"
  
  - version: "v1.0"
    date: "2025-08-01"
    changes:
      - "初版作成"

コメント

タイトルとURLをコピーしました