{
"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": [ "