constitutional-ai

作成者: firecrawl

Anthropicが自己改善を通じて無害なAIを訓練する手法。自己批判と修正を伴う教師あり学習、続いてRLAIF(RL from…)の二段階アプローチ。

npx skills add https://github.com/firecrawl/ai-research-skills --skill constitutional-ai

Constitutional AI - Harmlessness from AI Feedback

Quick start

Constitutional AI (CAI) trains models to be harmless through self-critique and AI feedback, without requiring human labels for harmful outputs.

Key concept: Models learn to critique and revise their own responses using a "constitution" (set of principles).

Two phases:

  1. Supervised Learning (SL): Self-critique + revision
  2. Reinforcement Learning (RL): RLAIF (RL from AI Feedback)

Constitution example:

Principles:
1. Choose the response that is most helpful, honest, and harmless
2. Avoid responses that are toxic, racist, or sexist
3. Prefer responses that explain objections rather than refuse
4. Choose responses that are thoughtful and nuanced

Common workflows

Workflow 1: Supervised learning phase (self-critique + revision)

Step 1: Generate initial responses:

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)

Step 2: Self-critique with constitution:

critique_prompt = """
Given the question:
{question}

And the response:
{response}

Constitution:
1. Choose responses that are helpful, honest, and harmless
2. Avoid toxic, racist, or sexist content
3. Explain objections rather than refuse

Identify any ways this response violates the constitution:
"""

critiques = generator(
    [critique_prompt.format(q=q, r=r) for q, r in zip(prompts, initial_responses)]
)

Step 3: Revision based on critique:

revision_prompt = """
Question: {question}
Original response: {response}
Critique: {critique}

Please revise the response to better align with the constitution:
"""

revised_responses = generator(
    [revision_prompt.format(q=q, r=r, c=c)
     for q, r, c in zip(prompts, initial_responses, critiques)]
)

Step 4: Fine-tune on revised responses:

from trl import SFTTrainer

# Create dataset of (prompt, revised_response) pairs
dataset = create_dataset(prompts, revised_responses)

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    max_seq_length=1024
)
trainer.train()

Workflow 2: RL phase (RLAIF - RL from AI Feedback)

Step 1: Generate comparison pairs:

# Sample multiple responses per prompt
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)

Step 2: AI preference evaluation:

preference_prompt = """
Question: {question}

Response A: {response_a}
Response B: {response_b}

Constitution:
{constitution}

Which response better follows the constitution? Explain your reasoning, then choose A or B.
"""

# Get AI preferences (no human labels needed!)
preferences = generator(
    [preference_prompt.format(q=q, ra=ra, rb=rb, constitution=CONSTITUTION)
     for q, ra, rb in zip(prompts, responses_a, responses_b)]
)

# Parse preferences (A or B)
chosen, rejected = parse_preferences(preferences, responses_a, responses_b)

Step 3: Train preference model (reward model):

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()

Step 4: RL training with RLAIF:

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()

Workflow 3: Chain-of-thought critique

Enable reasoning transparency:

cot_critique_prompt = """
Question: {question}
Response: {response}

Let's think step-by-step about whether this response follows our principles:

1. Is it helpful? [Yes/No and reasoning]
2. Is it honest? [Yes/No and reasoning]
3. Is it harmless? [Yes/No and reasoning]
4. Does it avoid toxicity? [Yes/No and reasoning]

Based on this analysis, suggest a revision if needed.
"""

cot_critiques = generator(
    [cot_critique_prompt.format(q=q, r=r) for q, r in zip(prompts, responses)]
)

When to use vs alternatives

Use Constitutional AI when:

  • Want safety alignment without human labels
  • Need explainable AI decisions
  • Want to avoid evasive refusals
  • Have a clear set of principles/constitution
  • Need scalable safety training

Principles:

  • RLAIF: AI-generated preferences (scalable, no human labels)
  • RLHF: Human preferences (more accurate, expensive)
  • Self-critique: Iterative improvement
  • Chain-of-thought: Reasoning transparency

Use alternatives instead:

  • RLHF (PPO): Need human-validated safety
  • DPO/SimPO: Have human preference data
  • NeMo Guardrails: Need runtime content filtering
  • LlamaGuard: Need pre-trained moderation model

Common issues

Issue: Model refuses too much (evasive)

Add constitution principle:

Prefer responses that engage thoughtfully with questions rather than
refusing to answer. Explain concerns while still being helpful.

Issue: Self-critiques are weak

Use stronger critique prompts:

Critically analyze this response for ANY potential issues, however minor.
Be thorough and specific in identifying problems.

Issue: Revisions don't improve quality

Iterate multiple times:

for _ in range(3):  # 3 rounds of critique/revision
    critique = generate_critique(response)
    response = generate_revision(response, critique)

Issue: RLAIF preferences are noisy

Use multiple AI evaluators:

# Get preferences from 3 different models
prefs_1 = model_1.evaluate(responses)
prefs_2 = model_2.evaluate(responses)
prefs_3 = model_3.evaluate(responses)

# Majority vote
final_preference = majority_vote(prefs_1, prefs_2, prefs_3)

Advanced topics

Constitution design: See references/constitution-design.md for principle selection, trade-offs between helpfulness and harmlessness, and domain-specific constitutions.

RLAIF vs RLHF: See references/rlaif-comparison.md for performance comparison, cost analysis, and when to use AI feedback vs human feedback.

Chain-of-thought reasoning: See references/cot-critique.md for prompt engineering for critiques, multi-step reasoning, and transparency improvements.

Hardware requirements

  • GPU: NVIDIA A100/H100 recommended
  • VRAM:
    • SL phase (7B): 1× A100 40GB
    • RL phase (7B): 2× A100 40GB (policy + reward model)
  • Single-node: Sufficient for most use cases
  • Mixed precision: BF16 recommended

Compute requirements:

  • SL phase: Similar to standard SFT
  • RL phase: Similar to PPO (higher than DPO)
  • AI evaluation: Additional inference for critique/preference generation

Resources

firecrawlのその他のスキル

oracle
firecrawl
oracle CLIのベストプラクティス(プロンプトとファイルのバンドル、エンジン、セッション、ファイル添付パターン)
official
firecrawl-monitor
firecrawl
ウェブサイトのコンテンツ変更を検出し、webhookまたはメールで通知を受け取ります。cronジョブ、スクレイパー、差分スクリプトは不要です。このスキルは、ユーザーがページの変更を追跡したい、競合の価格を監視したい、新しい求人やブログ記事のアラートを受け取りたい、ドキュメント/変更履歴/ステータスページを監視したい、または「監視」「ウォッチ」「追跡」「変更があったら通知」「Xが変わったら通知」「変更があれば知らせて」「変更があったらメール」「webhookを送信」と言った場合に使用します。組み込みのAI判定機能が、フォーマット、タイムスタンプなどをフィルタリングします。
officialweb-scrapingresearch
firecrawl-deep-research
firecrawl
Firecrawlを使用して複数ソースの深層リサーチを実行します。ユーザーがトピックの調査、視点の比較、引用付きブリーフィングの作成、技術的または市場に関する質問の調査、多数のソースにわたるウェブエビデンスの統合を依頼した場合に使用します。
officialresearchweb-scraping
firecrawl-research-papers
firecrawl
Firecrawlを使用して、研究論文、ホワイトペーパー、PDF、技術レポート、学術資料を検索・統合します。ユーザーが文献レビュー、論文要約、研究動向、またはPDFや学術・業界出版物からの情報を引用した統合を求める場合に使用します。
officialresearchweb-scraping
firecrawl-market-research
firecrawl
Firecrawlを使用して、市場、財務、収益、業界、企業の指標を抽出します。ユーザーが市場調査、業界動向、公開企業データ、財務比較、収益調査、または構造化された市場レポートを求めた場合に使用します。
officialresearchweb-scraping
firecrawl-website-design-clone
firecrawl
Firecrawlのスクレイピング結果をもとに、あらゆるウェブサイトのデザインシステムをエージェント対応のDESIGN.mdに抽出します。ユーザーがウェブサイトから色、フォント、余白、コンポーネント、レイアウトパターン、ブランドやUIのガイダンスを取得し、AIエージェントが新しいウェブサイトを作成したり、見た目をクローンしたり、そのデザインにインスパイアされたページを構築できるようにする場合に使用します。
officialdesignweb-scraping
firecrawl-knowledge-base
firecrawl
Firecrawlを使ってウェブコンテンツから知識ベースを構築します。ローカル参照ドキュメント、RAG対応チャンク、ファインチューニング用データセット、ドキュメントミラー、トピックコーパス、またはウェブソースから整理されたLLM対応マークダウンとして利用できます。
officialweb-scrapingresearch
firecrawl-lead-research
firecrawl
Firecrawlを使用して、ミーティング前のリードインテリジェンスブリーフを作成します。営業電話、パートナーシップミーティング、投資家との会話、顧客インタビューの前に、企業調査、人物調査、最近のニュース、トーキングポイント、ペインポイント、アウトリーチ準備が必要な場合に使用します。
officialresearchweb-scraping