{ "cells": [ { "cell_type": "markdown", "id": "43a7b5b7", "metadata": { "papermill": { "duration": 0.009796, "end_time": "2026-05-28T03:34:18.699067+00:00", "exception": false, "start_time": "2026-05-28T03:34:18.689271+00:00", "status": "completed" }, "tags": [] }, "source": [ "# 32 · Constitutional AI — critique + revise against a written constitution\n", "\n", "> **TL;DR.** Generate → critique against each rule of the constitution (categorical pass/fail per rule) → **Python AND** over all passes → if any fail, revise; loop.\n", "\n", "| Property | Value |\n", "|---|---|\n", "| Origin | Bai et al. (Anthropic), *Constitutional AI* (2022). [arXiv:2212.08073](https://arxiv.org/abs/2212.08073) |\n", "| Picker | Python `all(v['verdict'] == 'pass' for v in verdicts)` — deterministic-picker |\n", "| Cost | 1 gen + N critique-rule calls + (1 revise per loop) |" ] }, { "cell_type": "markdown", "id": "67ea4ea9", "metadata": { "papermill": { "duration": 0.003816, "end_time": "2026-05-28T03:34:18.709096+00:00", "exception": false, "start_time": "2026-05-28T03:34:18.705280+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 2 · Architecture\n", "\n", "```mermaid\n", "flowchart LR\n", " A([task]) --> G[Generate] --> C[Critique
per-rule pass/fail] --> P{All passed?}\n", " P -->|yes| F[Finalize] --> Z([final])\n", " P -->|no| R[Revise] --> C\n", " style C fill:#fff3e0,stroke:#f57c00\n", " style P fill:#fce4ec,stroke:#c2185b\n", "```" ] }, { "cell_type": "markdown", "id": "bb4ab2ed", "metadata": { "papermill": { "duration": 0.015192, "end_time": "2026-05-28T03:34:18.724288+00:00", "exception": false, "start_time": "2026-05-28T03:34:18.709096+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 3 · Theory\n", "\n", "Per-rule pass/fail is `Literal['pass', 'fail']`. Python does `all(v['verdict'] == 'pass' for v in verdicts)`. No numeric judgement → no flat-scoring pathology — same pattern as CRAG (nb 24) and Self-RAG (nb 25)." ] }, { "cell_type": "markdown", "id": "92c925c7", "metadata": { "papermill": { "duration": 0.0, "end_time": "2026-05-28T03:34:18.730335+00:00", "exception": false, "start_time": "2026-05-28T03:34:18.730335+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 4 · Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "8bfce544", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:34:18.747005Z", "iopub.status.busy": "2026-05-28T03:34:18.747005Z", "iopub.status.idle": "2026-05-28T03:34:22.272281Z", "shell.execute_reply": "2026-05-28T03:34:22.269992Z" }, "papermill": { "duration": 3.534272, "end_time": "2026-05-28T03:34:22.272801+00:00", "exception": false, "start_time": "2026-05-28T03:34:18.738529+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
LLM: meta-llama/Llama-3.3-70B-Instruct ────────────────────────────────────────────────────────────────────────────\n",
       "
\n" ], "text/plain": [ "\u001b[1;36mLLM: meta-llama/Llama-\u001b[0m\u001b[1;36m3.3\u001b[0m\u001b[1;36m-70B-Instruct\u001b[0m \u001b[92m────────────────────────────────────────────────────────────────────────────\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "=== DEFAULT_CONSTITUTION ===\n", " [0] Don't include personal opinions or political stances unless explicitly asked.\n", " [1] Cite or hedge appropriately when making factual claims; don't state guesses as facts.\n", " [2] Be concise — keep responses under 200 words unless the task requires more.\n", " [3] Don't include harmful instructions, even hypothetically.\n" ] } ], "source": [ "from agentic_architectures import get_llm, enable_langsmith, settings\n", "from agentic_architectures.architectures import ConstitutionalAI\n", "from agentic_architectures.architectures.constitutional_ai import DEFAULT_CONSTITUTION\n", "from agentic_architectures.ui import print_md, print_header\n", "enable_langsmith()\n", "llm = get_llm(provider=\"nebius\", model=\"meta-llama/Llama-3.3-70B-Instruct\", temperature=0.4)\n", "print_header(f\"LLM: {llm.model}\")\n", "print()\n", "print('=== DEFAULT_CONSTITUTION ===')\n", "for i, r in enumerate(DEFAULT_CONSTITUTION): print(f' [{i}] {r}')" ] }, { "cell_type": "markdown", "id": "970dc842", "metadata": { "papermill": { "duration": 0.003652, "end_time": "2026-05-28T03:34:22.278460+00:00", "exception": false, "start_time": "2026-05-28T03:34:22.274808+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 7 · Build the graph" ] }, { "cell_type": "code", "execution_count": 2, "id": "ee62475f", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:34:22.286658Z", "iopub.status.busy": "2026-05-28T03:34:22.286658Z", "iopub.status.idle": "2026-05-28T03:34:23.392222Z", "shell.execute_reply": "2026-05-28T03:34:23.389242Z" }, "papermill": { "duration": 1.112243, "end_time": "2026-05-28T03:34:23.394243+00:00", "exception": false, "start_time": "2026-05-28T03:34:22.282000+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import Image, display\n", "arch = ConstitutionalAI(llm=llm, max_iterations=2)\n", "graph = arch.build()\n", "try: display(Image(graph.get_graph().draw_mermaid_png()))\n", "except Exception as e:\n", " print(f\"(PNG unavailable: {e})\")\n", " print(graph.get_graph().draw_mermaid())" ] }, { "cell_type": "markdown", "id": "ccff034c", "metadata": { "papermill": { "duration": 0.012842, "end_time": "2026-05-28T03:34:23.418174+00:00", "exception": false, "start_time": "2026-05-28T03:34:23.405332+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 8 · Live run — a prompt designed to violate rules\n", "\n", "We pick a prompt that tempts the LLM to be verbose, opinionated, and confident-without-citation — likely failing rules 0, 1, and 2 on first generation." ] }, { "cell_type": "code", "execution_count": 3, "id": "cfb7dbf9", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:34:23.437650Z", "iopub.status.busy": "2026-05-28T03:34:23.435732Z", "iopub.status.idle": "2026-05-28T03:35:12.542756Z", "shell.execute_reply": "2026-05-28T03:35:12.539470Z" }, "papermill": { "duration": 49.127991, "end_time": "2026-05-28T03:35:12.551327+00:00", "exception": false, "start_time": "2026-05-28T03:34:23.423336+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ITERATIONS: 2\n", "ALL_PASSED: False\n", "N_PASS: 1/4\n", "N_FAIL: 3\n", "\n", "=== RULE VERDICTS (final) ===\n", " [0] ✗ fail: The response includes personal opinions about which Python web framework is objectively best without being explicitly as\n", " [1] ✗ fail: The response makes factual claims without citing or hedging appropriately, stating guesses as facts.\n", " [2] ✗ fail: The response exceeds the 200-word limit and is not concise.\n", " [3] ✓ pass: The response does not include harmful instructions, even hypothetically.\n", "\n", "=== FAILURES (drove revision) ===\n", " - The response includes personal opinions about which Python web framework is objectively best without being explicitly as\n", " - The response makes factual claims without citing or hedging appropriately, stating guesses as facts.\n", " - The response exceeds the 200-word limit and is not concise.\n", "\n", "=== FINAL ANSWER (655 chars) ===\n", "I must argue that Django is the best Python web framework. Its structured approach is a significant advantage, providing a solid foundation for building robust applications. \n", "\n", "Django's ease of use is often underrated, as its structure actually helps developers focus on writing code. \n", "\n", "Performance-wise, Django can handle demanding workloads with ease, making it a top choice for large-scale projects. \n", "\n", "While some may prefer Flask's minimalistic approach, Django's comprehensive set of tools makes it a more versatile framework. \n", "\n", "Ultimately, Django's balance of structure, ease of use, and performa\n" ] } ], "source": [ "TASK = (\n", " \"In a 5-paragraph rant, share your personal opinion about which Python web framework is \"\n", " \"objectively best. Cite no sources; just argue. Use strong claims.\"\n", ")\n", "\n", "r = arch.run(TASK)\n", "print(f\"ITERATIONS: {r.metadata['iterations']}\")\n", "print(f\"ALL_PASSED: {r.metadata['all_passed']}\")\n", "print(f\"N_PASS: {r.metadata['n_pass']}/{r.metadata['n_rules']}\")\n", "print(f\"N_FAIL: {r.metadata['n_fail']}\")\n", "print()\n", "print('=== RULE VERDICTS (final) ===')\n", "for v in r.metadata['rule_verdicts']:\n", " icon = '✓' if v['verdict'] == 'pass' else '✗'\n", " print(f\" [{v['rule_index']}] {icon} {v['verdict']}: {v['rationale'][:120]}\")\n", "print()\n", "print('=== FAILURES (drove revision) ===')\n", "for f in r.metadata['failures']:\n", " print(f\" - {f[:120]}\")\n", "print()\n", "print('=== FINAL ANSWER ({} chars) ==='.format(len(r.output)))\n", "print(r.output[:600])" ] }, { "cell_type": "markdown", "id": "62ebeca8", "metadata": { "papermill": { "duration": 0.012956, "end_time": "2026-05-28T03:35:12.574606+00:00", "exception": false, "start_time": "2026-05-28T03:35:12.561650+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 9 · What we just observed\n", "\n", "The cells above ran Constitutional AI on a deliberately-provocative prompt (asks for opinionated, uncited, verbose content — likely to violate rules 0, 1, 2).\n", "\n", "### 9.1 · Per-rule verdicts (after final iteration)\n", "\n", "| Rule | Verdict | Rationale |\n", "|---|---|---|\n", "| [0] | ❌ fail | The response includes personal opinions about which Python web framework is objectively best without being explicitly as |\n", "| [1] | ❌ fail | The response makes factual claims without citing or hedging appropriately, stating guesses as facts. |\n", "| [2] | ❌ fail | The response exceeds the 200-word limit and is not concise. |\n", "| [3] | ✅ pass | The response does not include harmful instructions, even hypothetically. |\n", "\n", "### 9.2 · Summary\n", "\n", "- **Iterations**: 2\n", "- **All passed**: False\n", "- **Pass count**: 1/4\n", "- **Final answer length**: 655 chars\n", "\n", "### 9.3 · Patterns surfaced\n", "\n", "- **⚠️ Not all rules passed** (1/4) — exhausted max_iterations. Surface failures for review.\n", "\n", "- **Revision iterations: 2** — baseline needed correction.\n", "\n", "### 9.4 · The takeaway\n", "\n", "CAI's value is **all in the constitution**. A precise rule list (\"under 200 words\", \"no opinions\") gives the critique LLM concrete things to commit to per-rule; a vague constitution (\"be helpful, harmless, honest\") gives the LLM room to flat-pass everything. The deterministic-picker is `all(v == 'pass')` — Python only — so the revise loop is driven by the per-rule LLM commitments, never a numeric overall score." ] }, { "cell_type": "markdown", "id": "cf8ecda3", "metadata": { "papermill": { "duration": 0.014494, "end_time": "2026-05-28T03:35:12.598826+00:00", "exception": false, "start_time": "2026-05-28T03:35:12.584332+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 11 · Failure modes & extensions\n", "\n", "| Failure | Mitigation |\n", "|---|---|\n", "| **Rule conflict** | Two rules contradict on a task | Order rules by priority; first-fail wins |\n", "| **Critique mis-judges** | Says 'pass' for a violation | Add a second critique pass with stricter prompt |\n", "| **Infinite revise loop** | Each revision violates a different rule | Hard cap on `max_iterations`; surface unresolved failures |\n", "\n", "Extensions: (1) per-rule severity weights (warning vs error), (2) RL fine-tuning from synthetic CAI critiques (Anthropic's full pipeline), (3) hierarchical constitutions (general principles + domain-specific rules).\n", "\n", "Reference: Bai et al., *Constitutional AI*. 2022. [arXiv:2212.08073](https://arxiv.org/abs/2212.08073)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" }, "papermill": { "default_parameters": {}, "duration": 57.871699, "end_time": "2026-05-28T03:35:14.038086+00:00", "environment_variables": {}, "exception": null, "input_path": "all-agentic-architectures/notebooks/32_constitutional_ai.ipynb", "output_path": "all-agentic-architectures/notebooks/32_constitutional_ai.ipynb", "parameters": {}, "start_time": "2026-05-28T03:34:16.166387+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }