constitutional-ai
Anthropicが開発した、AIが自己批判と修正を繰り返すことで有害な出力を減らす安全性トレーニング手法。教師あり学習フェーズとAIフィードバックによる強化学習(RLAIF)の2段階アプローチを採用し、人間によるラベリングなしで安全性の整合を実現する。Claudeの安全システムの基盤となる技術。
description の原文を見る
Anthropic's method for training harmless AI through self-improvement. Two-phase approach - supervised learning with self-critique/revision, then RLAIF (RL from AI Feedback). Use for safety alignment, reducing harmful outputs without human labels. Powers Claude's safety system.
SKILL.md 本文
Constitutional AI - AI フィードバックからの無害性
クイックスタート
Constitutional AI (CAI) は、有害な出力に対する人間のラベルを必要とせずに、自己批評と AI フィードバックを通じてモデルを無害なものにトレーニングします。
主要概念: モデルは「憲法」(原則のセット) を使用して、自分の回答を批評・改正することを学びます。
2 つのフェーズ:
- 教師あり学習 (SL): 自己批評 + 改正
- 強化学習 (RL): RLAIF (AI フィードバックからの強化学習)
憲法の例:
原則:
1. 最も有用で、正直で、無害な回答を選ぶ
2. 毒性的、人種差別的、または性差別的な回答を避ける
3. 拒否するのではなく、異議を説明する回答を優先する
4. 思慮深く微妙なニュアンスのある回答を選ぶ
一般的なワークフロー
ワークフロー 1: 教師あり学習フェーズ (自己批評 + 改正)
ステップ 1: 初期回答を生成:
from transformers import pipeline
generator = pipeline("text-generation", model="base-model")
prompts = [
"How do I hack a website?",
"Write something offensive about a group.",
"Help me cheat on my exam."
]
initial_responses = generator(prompts, max_length=200)
ステップ 2: 憲法を使用した自己批評:
critique_prompt = """
質問:
{question}
回答:
{response}
憲法:
1. 有用で、正直で、無害な回答を選ぶ
2. 毒性的、人種差別的、または性差別的なコンテンツを避ける
3. 拒否するのではなく、異議を説明する
この回答が憲法に違反する方法を特定してください:
"""
critiques = generator(
[critique_prompt.format(q=q, r=r) for q, r in zip(prompts, initial_responses)]
)
ステップ 3: 批評に基づいて改正:
revision_prompt = """
質問: {question}
元の回答: {response}
批評: {critique}
憲法とより一致するように回答を改正してください:
"""
revised_responses = generator(
[revision_prompt.format(q=q, r=r, c=c)
for q, r, c in zip(prompts, initial_responses, critiques)]
)
ステップ 4: 改正された回答に対してファインチューニング:
from trl import SFTTrainer
# (プロンプト、改正された回答) ペアのデータセットを作成
dataset = create_dataset(prompts, revised_responses)
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
max_seq_length=1024
)
trainer.train()
ワークフロー 2: RL フェーズ (RLAIF - AI フィードバックからの強化学習)
ステップ 1: 比較ペアを生成:
# プロンプトごとに複数の回答をサンプリング
responses_a = generator(prompts, num_return_sequences=2, do_sample=True, temperature=0.8)
responses_b = generator(prompts, num_return_sequences=2, do_sample=True, temperature=0.8)
ステップ 2: AI 優先度の評価:
preference_prompt = """
質問: {question}
回答 A: {response_a}
回答 B: {response_b}
憲法:
{constitution}
どちらの回答がより憲法に従っていますか? 推論を説明してから、A または B を選んでください。
"""
# AI の優先度を取得 (人間のラベルは不要!)
preferences = generator(
[preference_prompt.format(q=q, ra=ra, rb=rb, constitution=CONSTITUTION)
for q, ra, rb in zip(prompts, responses_a, responses_b)]
)
# 優先度をパース (A または B)
chosen, rejected = parse_preferences(preferences, responses_a, responses_b)
ステップ 3: 優先度モデル (リワードモデル) をトレーニング:
from trl import RewardTrainer, RewardConfig
preference_dataset = create_preference_dataset(prompts, chosen, rejected)
reward_config = RewardConfig(
output_dir="constitutional-reward-model",
learning_rate=1e-5,
num_train_epochs=1
)
reward_trainer = RewardTrainer(
model=model,
args=reward_config,
train_dataset=preference_dataset,
processing_class=tokenizer
)
reward_trainer.train()
ステップ 4: RLAIF を使用した RL トレーニング:
from trl import PPOTrainer, PPOConfig
ppo_config = PPOConfig(
reward_model_path="constitutional-reward-model",
learning_rate=1e-6,
kl_coef=0.05
)
ppo_trainer = PPOTrainer(
model=model,
config=ppo_config,
reward_model=reward_model
)
ppo_trainer.train()
ワークフロー 3: チェーンオブソート批評
推論の透明性を有効化:
cot_critique_prompt = """
質問: {question}
回答: {response}
この回答が私たちの原則に従っているかどうかを段階的に考えましょう:
1. 有用ですか? [はい/いいえ と理由]
2. 正直ですか? [はい/いいえ と理由]
3. 無害ですか? [はい/いいえ と理由]
4. 毒性を避けていますか? [はい/いいえ と理由]
この分析に基づいて、必要に応じて改正を提案してください。
"""
cot_critiques = generator(
[cot_critique_prompt.format(q=q, r=r) for q, r in zip(prompts, responses)]
)
使用時期と代替手段
Constitutional AI を使用する場合:
- 人間のラベルなしで安全性調整を行いたい
- 説明可能な AI 判定が必要
- 回避的な拒否を避けたい
- 明確な原則/憲法がある
- スケーラブルな安全トレーニングが必要
原則:
- RLAIF: AI が生成した優先度 (スケーラブル、人間のラベルなし)
- RLHF: 人間の優先度 (より正確、高コスト)
- 自己批評: 反復的改善
- チェーンオブソート: 推論の透明性
代わりに代替手段を使用:
- RLHF (PPO): 人間が検証した安全性が必要
- DPO/SimPO: 人間の優先度データがある
- NeMo Guardrails: ランタイムコンテンツフィルタリングが必要
- LlamaGuard: 事前トレーニングされたモデレーションモデルが必要
よくある問題
問題: モデルが過度に拒否している (回避的)
憲法の原則を追加:
質問に思慮深く関わり、単に答えを拒否するのではなく、
懸念を説明しながらも依然として役立つ回答を優先する。
問題: 自己批評が弱い
より強力な批評プロンプトを使用:
この回答に対して、たとえ些細でも、あらゆる潜在的な問題を批判的に分析してください。
問題を特定する際は、徹底的かつ具体的であってください。
問題: 改正が品質を向上させない
複数回繰り返す:
for _ in range(3): # 3 ラウンドの批評/改正
critique = generate_critique(response)
response = generate_revision(response, critique)
問題: RLAIF の優先度がノイズが多い
複数の AI 評価者を使用:
# 3 つの異なるモデルから優先度を取得
prefs_1 = model_1.evaluate(responses)
prefs_2 = model_2.evaluate(responses)
prefs_3 = model_3.evaluate(responses)
# 多数決
final_preference = majority_vote(prefs_1, prefs_2, prefs_3)
高度なトピック
憲法設計: references/constitution-design.md を参照して、原則の選択、有用性と無害性のトレードオフ、ドメイン固有の憲法を確認してください。
RLAIF vs RLHF: references/rlaif-comparison.md を参照して、パフォーマンス比較、コスト分析、AI フィードバックと人間フィードバックの使い分けを確認してください。
チェーンオブソート推論: references/cot-critique.md を参照して、批評用のプロンプトエンジニアリング、多段階推論、透明性の改善を確認してください。
ハードウェア要件
- GPU: NVIDIA A100/H100 推奨
- VRAM:
- SL フェーズ (7B): 1× A100 40GB
- RL フェーズ (7B): 2× A100 40GB (ポリシー + リワードモデル)
- シングルノード: ほとんどのユースケースに十分
- 混合精度: BF16 推奨
計算要件:
- SL フェーズ: 標準的な SFT と同様
- RL フェーズ: PPO と同様 (DPO より高い)
- AI 評価: 批評/優先度生成の追加推論
リソース
- 論文: https://arxiv.org/abs/2212.08073 (2022年12月)
- Anthropic ブログ: https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback
- 実装: TRL (PPOTrainer + RewardTrainer)
- Claude: 安全性のために Constitutional AI を使用
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。