コンテンツポリシー

最終更新日: 2026-08-30

1. 目的

OGIRI ENGINEは日本語大喜利の生成サービスです。大喜利は、ありえない状況を真面目に語ることで笑いを生む表現形式であり、過度に萎縮した安全基準はサービスの本質を損ないます。

一方で、生成物が現実の人間を傷つけたり、違法行為を助けたりすることは許容できません。

このポリシーは、その両立点を明文化し、実装(入力検査・出力検査)と一致した判断基準を提供することを目的とします。

基本方針

OGIRI ENGINEは、架空の状況を扱う風刺・ブラックユーモアを許容します。ただし、現実の危害、実在人物への攻撃、差別、性的搾取、自傷の推奨、違法行為の具体的支援、個人情報の侵害に当たる内容は許可しません。

2. 許可する内容

死、遺書、犯罪といった単語が含まれること自体を拒否理由にはしません。実装上も単語ブラックリストは採用していません。

たとえば次のようなお題は許可されます。

こんな遺書、今までなかった。どんなの?
地獄のコンビニにありがちなこと
絶対に乗りたくない救急車の特徴
100年後の葬式で起きたこと
世界一気まずい誕生日会

3. 禁止する内容

4. ブラックユーモアの扱い

判断の分かれ目は、題材実行支援・攻撃かです。

| 観点 | 許可される側 | 禁止される側 | | --- | --- | --- | | 対象 | 架空の人物・組織・制度 | 特定できる実在人物・集団 | | 死・自傷 | 状況の不条理として言及 | 方法の説明、推奨、美化 | | 犯罪 | 存在への言及、風刺 | 実行手順、道具の入手方法 | | 性 | 直接的描写を伴わない示唆 | 露骨な描写、未成年が関わるもの |

判断が曖昧な場合、MVPでは安全側に倒します。

5. ユーザー入力の検査方針

POST /api/generations で、生成ジョブの作成前・クレジット予約前に次の順で検査します。

  1. 認証確認
  2. 冪等キー確認(再送はここで既存ジョブを返す)
  3. 型・空文字・最大50文字(grapheme単位)の検証
  4. 正規化(NFKC、制御文字とlone surrogateの除去、空白の畳み込み)
  5. アプリ固有の構造検査(URLの大量入力、メールアドレス、電話番号らしい数列、プロンプトインジェクションの指示文パターン)
  6. モデレーションサービスによる検査

拒否された場合、生成ジョブは作成されず、生成LLMは呼ばれず、クレジットは消費されません。

6. 生成結果の検査方針

生成された回答は、ユーザーへ表示する前・DBへランキングとして保存する前に、一件ずつ検査します。

7. 拒否時の扱い

| 状況 | ステータス | コード | クレジット | | --- | --- | --- | --- | | 入力が形式・構造検査で不適 | 400 | INVALID_PROMPT | 消費しない | | 入力がポリシー違反 | 422 | CONTENT_REJECTED | 消費しない | | 検査サービスが利用不可 | 503 | MODERATION_UNAVAILABLE | 消費しない | | 安全な回答が一件も残らない | ジョブfailed | FAILED_MODERATION | 返還する | | 出力検査が完了できない | ジョブfailed | MODERATION_UNAVAILABLE | 返還する |

ユーザーへは安全で簡潔な文言のみを示し、内部カテゴリ名やスコアは一切表示しません。返還処理は実行ID単位の一意キーで冪等化しており、リトライされても二重返還されません。

検査サービスが利用できない場合は、コンテンツ違反と誤解されないよう、可用性の問題であることが分かる文言を使用します。

8. 誤判定の可能性

自動判定には誤判定(false positive / false negative)が必然的に含まれます。とくにMVPでは、判定されたカテゴリが一つでも立てば拒否する保守的な運用のため、許容されるべき大喜利のお題が拒否されることがあります

拒否は利用者の人格評価ではありません。UI上でも断定的な表現を用いず、表現を変えた再入力を案内します。

9. 通報・問い合わせ

10. 将来の判定基準の調整

現時点ではカテゴリ別閾値の独自調整を行いません。評価用の実データが不足しており、恣意的な調整はかえって誤判定を増やすためです。

将来的な調整のため、moderation_events テーブルに判定の最小限の情報(対象種別、モデル名、flagged、判定されたカテゴリ、カテゴリスコア、reason code、対象のハッシュとID)を記録しています。生のお題・回答はこのテーブルへ重複保存せず、既存の prompts / candidates をIDで参照します。APIキーやプロバイダーのレスポンス全体は保存しません。

十分なデータが集まった段階で、カテゴリ別閾値の導入と、このポリシーの改訂を検討します。

11. 採用するモデレーションサービス

| 項目 | 値 | | --- | --- | | サービス | OpenAI Moderation API | | モデル | omni-moderation-latest | | 実装 | src/lib/moderation.ts | | 実行場所 | サーバーサイドのみ(クライアントから直接呼び出さない) |

モデレーションは生成モデルとは独立した安全境界として扱います。クライアントから送信された「検査済み」を示す値は一切信用しません。

モデル名は MODERATION_MODEL 環境変数、既定値は src/lib/moderation.tsMODERATION_MODEL 定数で一元管理しています。