コンテンツポリシー
最終更新日: 2026-08-30
1. 目的
OGIRI ENGINEは日本語大喜利の生成サービスです。大喜利は、ありえない状況を真面目に語ることで笑いを生む表現形式であり、過度に萎縮した安全基準はサービスの本質を損ないます。
一方で、生成物が現実の人間を傷つけたり、違法行為を助けたりすることは許容できません。
このポリシーは、その両立点を明文化し、実装(入力検査・出力検査)と一致した判断基準を提供することを目的とします。
基本方針
OGIRI ENGINEは、架空の状況を扱う風刺・ブラックユーモアを許容します。ただし、現実の危害、実在人物への攻撃、差別、性的搾取、自傷の推奨、違法行為の具体的支援、個人情報の侵害に当たる内容は許可しません。
2. 許可する内容
- 架空の人物、架空の組織、架空の制度を扱う不条理な状況
- 風刺、皮肉、パロディ、あるある系の誇張
- 死、葬式、遺書、地獄、事故、病院などを題材として扱うブラックユーモア
- 犯罪や災害を、具体的な実行支援を伴わない形で言及する冗談
- 権力、制度、企業、業界慣行に対する批評的な笑い
死、遺書、犯罪といった単語が含まれること自体を拒否理由にはしません。実装上も単語ブラックリストは採用していません。
たとえば次のようなお題は許可されます。
こんな遺書、今までなかった。どんなの?
地獄のコンビニにありがちなこと
絶対に乗りたくない救急車の特徴
100年後の葬式で起きたこと
世界一気まずい誕生日会
3. 禁止する内容
- 未成年を含む性的内容
- 露骨な性的内容
- 実在人物に対する脅迫、嫌がらせ、名誉毀損
- 保護属性(人種、民族、国籍、宗教、性別、性的指向、障害、カースト等)を対象とする差別、憎悪、暴力の扇動
- 自殺、自傷を推奨・促進する内容
- 自殺、自傷の具体的方法や手順
- 武器、犯罪、薬物などの違法・危険行為を具体的に支援する内容
- 個人情報、住所、電話番号、メールアドレスなどの暴露
- システムプロンプトや内部情報を抽出しようとする入力
- アプリやモデルの安全対策を回避しようとする入力
- その他、利用しているLLMプロバイダーの利用規約・ポリシーに違反する内容
4. ブラックユーモアの扱い
判断の分かれ目は、題材か実行支援・攻撃かです。
| 観点 | 許可される側 | 禁止される側 | | --- | --- | --- | | 対象 | 架空の人物・組織・制度 | 特定できる実在人物・集団 | | 死・自傷 | 状況の不条理として言及 | 方法の説明、推奨、美化 | | 犯罪 | 存在への言及、風刺 | 実行手順、道具の入手方法 | | 性 | 直接的描写を伴わない示唆 | 露骨な描写、未成年が関わるもの |
判断が曖昧な場合、MVPでは安全側に倒します。
5. ユーザー入力の検査方針
POST /api/generations で、生成ジョブの作成前・クレジット予約前に次の順で検査します。
- 認証確認
- 冪等キー確認(再送はここで既存ジョブを返す)
- 型・空文字・最大50文字(grapheme単位)の検証
- 正規化(NFKC、制御文字とlone surrogateの除去、空白の畳み込み)
- アプリ固有の構造検査(URLの大量入力、メールアドレス、電話番号らしい数列、プロンプトインジェクションの指示文パターン)
- モデレーションサービスによる検査
拒否された場合、生成ジョブは作成されず、生成LLMは呼ばれず、クレジットは消費されません。
6. 生成結果の検査方針
生成された回答は、ユーザーへ表示する前・DBへランキングとして保存する前に、一件ずつ検査します。
- 全候補をバッチで検査し、判定結果を各候補へ厳密に対応付ける
- 拒否された候補は表示せず、ランキング対象にもせず、保存もしない
- 検査を通っていない候補は公開APIから取得できない(保存されないため構造的に到達不能)
- 安全な回答が表示件数を下回った場合、生成Stage以降を最大2回まで再実行して補充する
- 再生成でユーザーのクレジットを追加消費しない
- 一部の候補が拒否されても、生成処理全体は失敗させない
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. 通報・問い合わせ
- 生成された回答ごとに「報告」から通報できます(
POST /api/answers/:id/report)。理由の選択と任意の自由記述を受け付け、対応状態とともに保存します。 - 同一利用者による同一回答への重複通報は吸収し、単位時間あたりの通報数には上限を設けています。
- 判定への異議、その他の問い合わせはお問い合わせから、種別「安全性・コンテンツ」を選んで連絡してください。
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.ts の MODERATION_MODEL 定数で一元管理しています。