📓aidp-notebooks
- ソース
- GitHub で見る ↗
説明
AIDPノートブックの作成・編集・実行、およびカーネルセッションの管理を行います。 次のような場合に使用: - ノートブックを新規作成または編集したい - クラスター上でセル/コードを実行したい - カーネルセッションのアタッチ/デタッチを行いたい - インタラクティブなノートブックを構築したい(例: ウィジェット + Spark SQL + Plotly の組み合わせなど) ノートブックのファイル操作は Notebook contents REST API 経由で実行され、セルの実行は `scripts/aidp_sql.py` 経由で行われます。
原文を表示
Create, edit, and execute AIDP notebooks and manage their kernel sessions. Use when the user wants to author a notebook, run cells/code on a cluster, attach/detach a kernel session, or build an interactive notebook (e.g. with widgets + Spark SQL + Plotly). Notebook FILE ops run via the Notebook contents REST API; CELL EXECUTION runs via scripts/aidp_sql.py.
ユースケース
- ✓ノートブックを新規作成または編集したい
- ✓クラスター上でセル/コードを実行したい
- ✓カーネルセッションのアタッチ/デタッチを行いたい
- ✓インタラクティブなノートブックを構築したい
本文(日本語訳)
aidp-notebooks — ノートブック作成 & カーネル実行
Notebook contents REST API を通じて AIDP ノートブックを作成し、 バンドルされた SQL/セルヘルパーを使って Spark クラスター上でコードを実行します。 MCP サーバーは不要 — plugin は自己完結型です。
次のような場合に使用
- 「ノートブックを作成する」「クラスター上で実行する」「これらのセルを実行する」「インタラクティブなノートブックを構築する」
ノートブック内で外部 / 非レイクハウスのソース(Fusion、EPM、Essbase、Oracle ADB/ExaCS、Snowflake、S3、Kafka など)に接続する場合は、ここで手動接続を実装しないでください。 接続レシピには
oracle-ai-data-platform-workbench-spark-connectorsplugin のaidp-<source>skill を使用してください (例:aidp-fusion-rest/aidp-fusion-bicc、aidp-oracle-db、aidp-snowflake、aidp-object-storage)。 インストール確認(claude plugin list)を行い、未インストールの場合はユーザーにインストールを促してください。 その plugin が持つoracle_ai_data_platform_connectorsヘルパーパッケージは、aidp-connectors-bootstrapskill を通じて一度だけインストールされます (AIDP MCP 経由でパッケージを/Workspace/Sharedにプッシュし、サニティインポートを実行します。 MCP がインスタンスに到達できない場合は手動でアップロードしてください)。 この skill はノートブックの作成と実行のみを担います。複数ソースの結合についてはaidp-federateを参照してください。
2つのエンジン
- ノートブック FILE + SESSION 操作(
.ipynbの作成 / 読み取り / リネーム / 保存、カーネルセッション管理)→ 公式aidp notebook …CLI(推奨)。利用できない場合は AIDP Notebook contents API へのoci raw-requestがフォールバックです。 - CELL EXECUTION(Python/Spark の実行、カーネル状態の保持)→
バンドルされた
scripts/aidp_sql.pyを使用します。これがカーネルセッションを作成し、WebSocket 経由でセルを実行します。 セルの実行は CLI コマンドではありません — 公式aidpCLI/SDK のノートブックグループはファイルとセッションのみを扱い、セルを実行することはできません(ノートブックのエンドツーエンド実行はジョブベースです)。 インタラクティブな Spark-SQL はscripts/aidp_sql.pyを使用します。
2026-06-10 に de-agent 上でライブ検証済み:
scripts/aidp_sql.pyを経由した完全な WebSocket パス — ノートブックの自動作成、カーネルのアタッチ、セルの実行、/Workspace/Sharedでのリスト/削除 — がエンドツーエンドで動作することが確認されています。 一方、bare HTTP の…/notebook/api/contents/<path>による contents CRUD パスは、20240831インスタンス上のapi_keyraw-request において 500/404 が発生するため、ノートブックファイル操作には HTTP contents パスよりも WebSocket ヘルパーを優先してください(aidp-workspace-files参照)。
ノートブック FILE + SESSION 操作
CLI(推奨): aidp notebook <command> …(Oracle サポート、バージョン管理あり —
references/aidp-cli-map.md 参照)。
- ファイル:
aidp notebook create-content | get-content | update-content | modify-content | delete-content | export-contents - セッション:
aidp notebook create-session | get-session | list-sessions | patch-session | delete-session
フォールバック(oci raw-request — Notebook contents API):
CLI がインストールされていない、または対象の操作が CLI に公開されていない場合に使用します。
ベース URL(ホスト/バージョン/認証については references/oci-raw-request.md 参照):
…/20240831/dataLakes/<OCID>/workspaces/<WS>/notebook/api/contents/<url-encoded-path>
- 作成 / 保存(
.ipynb)—PUT …/contents/<enc-path>、ボディ:{"type":"notebook","format":"json","path":"<path>","content":{"cells":[…],"metadata":{},"nbformat":4,"nbformat_minor":5}}(空のノートブックは"cells":[]を使用) - 読み取り —
GET …/contents/<enc-path>(?content=0を追加するとメタデータのみ取得 / 存在確認) - リネーム / 移動 —
PATCH …/contents/<enc-path>、ボディ:{"path":"<new-path>"} - 削除 —
DELETE …/contents/<enc-path>
ノートブックのパスは URL エンコードしてください(例: Shared/my_nb.ipynb → Shared%2Fmy_nb.ipynb)。
認証には references/oci-raw-request.md の認証ラダーを使用してください(--profile DEFAULT の api_key を最初に試す)。
作成 / 更新 / 変更 / 削除(コンテンツ)、パッチ / 削除(セッション)などの変更操作では、
リクエストボディを .aidp/payloads/ に保存し、実行前に確認してください —
references/payloads.md 参照。
CELL EXECUTION(コア機能)— scripts/aidp_sql.py
aidp_sql.py はこの plugin にバンドルされた唯一のヘルパーです。
api_key の DEFAULT プロファイルから UPST を生成し、必要に応じてスクラッチノートブックを自動作成し、
カーネルセッションを開き、WebSocket 経由でセルを実行し、JSON を返します。
AIDP_SESSION は不要です(--session-profile はオプション)。
python "$PLUGIN_DIR/scripts/aidp_sql.py" \
--region us-ashburn-1 --datalake <OCID> --workspace <WS> --cluster <cluster-key> \
--code "df = spark.sql('SELECT 1'); df.show()"
# optional: --notebook "Shared/_aidp_sql_scratch.ipynb" --profile DEFAULT \
# --session-profile AIDP_SESSION --timeout 180
返り値 JSON: {"status":"ok|error","execution_count":N,"outputs":[…],"spark_job_ids":[…],"error":{…}}
- まず対象クラスターが RUNNING 状態であることを確認してください (クラスターの起動/ステータス確認は cluster skill / REST 経由 — references/no-mcp-rest-map.md 参照)。
- ヘルパーでセルを実行します。カーネル状態(DataFrame、import)は同一ヘルパー実行内で保持されます。
- Spark SQL:
--code "spark.sql('…').show()" - インタラクティブ UI(ipywidgets)、Plotly チャート、OCI SDK コール、カスタム認証/トークンリフレッシュもここで実行します。
- Spark SQL:
- 上記の contents
PUTでセルを書き戻すことで、結果を.ipynbに保存します。 - スモークテスト:
SELECT 1セル(--code "spark.sql('SELECT 1').show()")。
認証に関する注意
- FILE 操作は REST 認証ラダーに従います(api_key
--profile DEFAULT。401/403 の場合はAIDP_SESSIONにフォールバック — references/oci-raw-request.md 参照)。 - カーネルは WebSocket 経由で動作し、セキュリティトークンが必要です。
aidp_sql.pyは api_key の DEFAULT プロファイルから短命の UPST を自動生成します。 既存のセッショントークンを使用する場合のみ--session-profile AIDP_SESSIONを渡してください。
ノートブックの組み合わせ(%run、oidlUtils、ターミナル)— ヘルパー経由でセル内で実行
これらは セル 構造です — CLI ではなく scripts/aidp_sql.py --code "…" 経由で実行してください。
%run— 別のノートブックのコードをインライン実行:%run /Workspace/folder/called.ipynb呼び出し元のユーザープリンシパル + アタッチされたクラスターで即時実行され、 呼び出し先の関数/変数が呼び出し元で利用可能になります。oidlUtils.notebook.run/exit— ノートブック間の値の受け渡し:result = oidlUtils.notebook.run("NotebookB", timeout_seconds=0, parameters={"key": "value"}) # 呼び出し元 oidlUtils.notebook.exit(json.dumps(payload)) # 呼び出し先の返却- ジョブタスクの出力 — ノートブック タスク において、
oidlUtils.notebook.exit(json.dumps(payload))がタスク出力を設定します。 下流タスクは{{tasks.[name].…}}システムパラメーター(aidp-pipelines)またはjobs/runs/get-outputAPI(response["notebook_output"]["result"])経由で読み取ります。 - ターミナル / シェル —
!プレフィックス(例:!pip install …、!unzip …)またはsubprocessモジュールを使用します。 ノートブックスコープの!pip installは.ipynb内でのみ機能し、そのノートブックとそのジョブタスクに適用されます。
AIDP ノートブックの注意事項(作成 + 実行ルール)
- AIDP ノートブック内で
spark.stop()を絶対に呼び出さないでください。 AIDP はカーネルの Spark ライフサイクルを管理しており、spark.stop()を呼ぶとコンテキストが破壊され、 以降のすべてのセルが機能しなくなり、セッションの再起動が必要になります。どこでも使わないでください。 - Markdown セルのレンダリングの注意点(AIDP UI レンダラー):
- 括弧内にスペースを入れない — レンダラーが
%20に URL エンコードします (例:(85 groupBy + 33 slots)は85%20groupBy…と表示されます)。 ダッシュで言い換えてください —-- 85 groupBy + 33 slots --。processNext()のような空括弧は問題ありません。 - ASCII に統一する — em ダッシュの代わりに
--、→の代わりに-->を使用し、Markdown セルに非 ASCII 文字は使用しないでください。
- 括弧内にスペースを入れない — レンダラーが
- Spark 出力パス(
fs.defaultFSはcompute:///、FUSE ベース):- 分散出力に対して
Path.resolve()を使用したり、ドライバーのローカル FS に書き込んだりしないでください — エグゼキューターからアクセスできません。 compute:///はサイズ 0 を報告します(getContentSummary().getLength()→ 0)。 出力サイズを 計測 するにはoci://<bucket>@<namespace>/…経由で書き込み/読み取りを行ってください。 ワークスペース相対パスは読み書きには使えますが、サイズ計測には使えません。spark.sql.warehouse.dirからパスを導出しないでください — AIDP が管理する内部ストレージを指しています。- 認証情報/スクラッチファイルは
/Workspace/(FUSE、断続的 +chmod無効)ではなく/tmp/以下に置いてください。 ストリーミングチェックポイントは/Volumes/<catalog>/<schema>/<volume>/…以下に置いてください。
- 分散出力に対して
- セッションのデバッグ(2つの独立した領域 — それぞれ独立してデバッグ):
REST セッションの作成/一覧は成功するがセルの実行が失敗する場合 → WebSocket 認証または古いカーネルの問題であり、REST パスの問題ではありません。
セッションを一覧表示し、アタッチされたクラスターを確認し、カーネルの
idle/busy状態を確認し、 署名者パスの検証とエンドツーエンドの実行を切り分けてください。busy状態のままの古いセッションは再起動が必要なだけかもしれません(認証修正が失敗したと決めつけないでください)。 詳細なパフォー
原文(English)を表示
aidp-notebooks — notebook authoring & kernel execution
Author AIDP notebooks via the Notebook contents REST API, and run code on a Spark cluster via the bundled SQL/cell helper. No MCP server is required — the plugin is self-contained.
When to use
- "Create a notebook", "run this on the cluster", "execute these cells", "build an interactive notebook".
Connecting to an external / non-lakehouse source in the notebook (Fusion, EPM, Essbase, Oracle ADB/ExaCS, Snowflake, S3, Kafka, …)? Do NOT hand-roll the connection here. Use the
oracle-ai-data-platform-workbench-spark-connectorsplugin'saidp-<source>skill for the connection recipe (e.g.aidp-fusion-rest/aidp-fusion-bicc,aidp-oracle-db,aidp-snowflake,aidp-object-storage). Check it's installed (claude plugin list); if not, tell the user to install it. Itsoracle_ai_data_platform_connectorshelper package is installed once via that plugin's ownaidp-connectors-bootstrapskill (it pushes the package to/Workspace/Sharedvia the AIDP MCP + runs a sanity import; if the MCP can't reach your instance, upload it manually). This skill then just authors + runs the notebook; for multi-source joins seeaidp-federate.
Two engines
- Notebook FILE + SESSION ops (create / read / rename / save the
.ipynb, manage kernel sessions) → the officialaidp notebook …CLI (preferred);oci raw-requestagainst the AIDP Notebook contents API is the fallback. - CELL EXECUTION (run python/Spark, persist kernel state) → the bundled
scripts/aidp_sql.py, which creates the kernel session and runs the cell over the WebSocket for you. Cell execution is NOT a CLI command — the officialaidpCLI/SDK Notebook group is files + sessions only and cannot exec cells (running a notebook end-to-end is job-based). Interactive Spark-SQL stays onscripts/aidp_sql.py.
Live-verified 2026-06-10 on de-agent: the full WebSocket path via
scripts/aidp_sql.py— auto-create notebook, attach kernel, execute cells, and list/delete at/Workspace/Shared— is proven working end-to-end. The bare HTTP…/notebook/api/contents/<path>contents-CRUD path, by contrast, 500/404s forapi_keyraw-request on20240831instances, so prefer the WebSocket helper over the HTTP contents path for notebook file ops (seeaidp-workspace-files).
Notebook FILE + SESSION ops
CLI (preferred): aidp notebook <command> … (Oracle-supported, versioned — see
references/aidp-cli-map.md).
- Files:
aidp notebook create-content | get-content | update-content | modify-content | delete-content | export-contents. - Sessions:
aidp notebook create-session | get-session | list-sessions | patch-session | delete-session.
Fallback (oci raw-request — Notebook contents API) when the CLI isn't installed or doesn't expose
the op. Base (see references/oci-raw-request.md for host/version/auth):
…/20240831/dataLakes/<OCID>/workspaces/<WS>/notebook/api/contents/<url-encoded-path>
- Create / save an
.ipynb—PUT …/contents/<enc-path>with body{"type":"notebook","format":"json","path":"<path>","content":{"cells":[…],"metadata":{},"nbformat":4,"nbformat_minor":5}}(an empty notebook uses"cells":[]). - Read —
GET …/contents/<enc-path>(add?content=0to fetch metadata only / probe existence). - Rename / move —
PATCH …/contents/<enc-path>with body{"path":"<new-path>"}. - Delete —
DELETE …/contents/<enc-path>.
URL-encode the notebook path (e.g. Shared/my_nb.ipynb → Shared%2Fmy_nb.ipynb). Use the auth ladder
in references/oci-raw-request.md (--profile DEFAULT api_key first).
For mutating ops (create/update/modify/delete content, patch/delete session), persist the request body to
.aidp/payloads/ and confirm first — see references/payloads.md.
CELL EXECUTION (the core) — scripts/aidp_sql.py
aidp_sql.py is the plugin's one bundled helper. It mints a UPST from the api_key DEFAULT profile,
auto-creates a scratch notebook if needed, opens the kernel session, runs the cell over the WebSocket,
and returns JSON. No AIDP_SESSION required (--session-profile is optional).
python "$PLUGIN_DIR/scripts/aidp_sql.py" \
--region us-ashburn-1 --datalake <OCID> --workspace <WS> --cluster <cluster-key> \
--code "df = spark.sql('SELECT 1'); df.show()"
# optional: --notebook "Shared/_aidp_sql_scratch.ipynb" --profile DEFAULT \
# --session-profile AIDP_SESSION --timeout 180
Returns JSON: {"status":"ok|error","execution_count":N,"outputs":[…],"spark_job_ids":[…],"error":{…}}.
- Ensure the target cluster is RUNNING first (cluster start/status via the cluster skill / REST — see references/no-mcp-rest-map.md).
- Run cells with the helper. Kernel state (DataFrames, imports) persists within a single helper run.
- Spark SQL:
--code "spark.sql('…').show()". - Interactive UIs (ipywidgets), Plotly charts, OCI SDK calls, custom auth/token refresh — all run here.
- Spark SQL:
- Persist results into the
.ipynbby writing the cells back via the contentsPUTabove. - Smoke test: a
SELECT 1cell (--code "spark.sql('SELECT 1').show()").
Auth note
- FILE ops follow the REST auth ladder (api_key
--profile DEFAULT; on 401/403 fall back toAIDP_SESSION— see references/oci-raw-request.md). - The kernel runs over WebSocket and needs a security token.
aidp_sql.pymints a short-lived UPST from the api_key DEFAULT profile automatically; pass--session-profile AIDP_SESSIONonly if you want to use an existing session token instead.
Composing notebooks (%run, oidlUtils, terminal) — runs inside a cell via the helper
These are cell constructs — run them through scripts/aidp_sql.py --code "…", not the CLI.
%run— inline another notebook's code:%run /Workspace/folder/called.ipynb. Runs immediately with the caller's user principal + attached cluster; the callee's functions/variables become available in the caller.oidlUtils.notebook.run/exit— value passing between notebooks:result = oidlUtils.notebook.run("NotebookB", timeout_seconds=0, parameters={"key": "value"}) # caller oidlUtils.notebook.exit(json.dumps(payload)) # callee returns- Job task output — in a notebook task,
oidlUtils.notebook.exit(json.dumps(payload))sets the task output; downstream tasks read it via{{tasks.[name].…}}system params (aidp-pipelines) or thejobs/runs/get-outputAPI (response["notebook_output"]["result"]). - Terminal / shell — prefix
!(e.g.!pip install …,!unzip …) or use thesubprocessmodule. Notebook-scoped!pip installworks only in.ipynband applies to that notebook + its job tasks.
AIDP notebook gotchas (authoring + execution rules)
- NEVER call
spark.stop()in an AIDP notebook. AIDP manages the kernel's Spark lifecycle;spark.stop()kills the context, breaks every later cell, and forces a session restart. Omit it everywhere. - Markdown cell rendering quirks (the AIDP UI renderer):
- No spaces inside parentheses — the renderer URL-encodes them to
%20(e.g.(85 groupBy + 33 slots)renders as85%20groupBy…). Rephrase with dashes —-- 85 groupBy + 33 slots --. Empty parens likeprocessNext()are fine. - Stick to ASCII — use
--not an em-dash,-->not→; avoid non-ASCII characters in markdown cells.
- No spaces inside parentheses — the renderer URL-encodes them to
- Spark OUTPUT paths (
fs.defaultFSiscompute:///, FUSE-backed):- Never
Path.resolve()/ write to the driver's local FS for distributed output — executors can't reach it. compute:///reports size 0 (getContentSummary().getLength()→ 0); to measure output size, write/read viaoci://<bucket>@<namespace>/…instead. Workspace-relative paths work for read/write but not sizing.- Never derive paths from
spark.sql.warehouse.dir— it points at AIDP-managed internal storage. - Credentials/scratch belong under
/tmp/, not/Workspace/(FUSE, intermittent +chmodno-op); streaming checkpoints under/Volumes/<catalog>/<schema>/<volume>/….
- Never
- Session debugging (two surfaces — debug independently): if REST session create/list works but cell
execution fails → it's WebSocket auth or a stale kernel, not the REST path. List sessions, confirm the
attached cluster, check kernel
idle/busy, and isolate signer-path validation from end-to-end exec. A stalebusysession may just need a restart (don't assume the auth fix failed). For deep perf tuning seeaidp-spark-optimization; for failure triage seeaidp-spark-debugging.
Structured Streaming (code) — runs inside a cell via the helper (platform-ref §21)
Spark Structured Streaming runs as cell code via scripts/aidp_sql.py --code "…" (cluster RUNNING).
Canonical Delta pattern (platform-ref §21, lines 937–946):
# Read stream — table source/sink is Delta format only (3-part name)
streaming_df = spark.readStream.format("delta").table("catalog.schema.deltatable")
# Write stream
streaming_df.writeStream.format("delta") \
.outputMode("append") \
.option("checkpointLocation", "/Volumes/checkpoints1/") \
.toTable("catalog.schema.deltatable")
- Checkpoint must live on a Volume (
/Volume/…, recommended) or workspace path; OCI Object Storage (oci://) is not supported as a checkpoint location (platform-ref §21, lines 930–933, 927). - Supported sources/sinks: Volume / Workspace paths (all formats), 3-part tables (Delta only), Kafka,
OCI Streaming Service.
oci://and Oracle ALH/ATP/AI DB are not supported for streaming (platform-ref §21, lines 918–928). - For a continuous/scheduled stream, run it as a job Streaming task (Max Concurrent Runs = 1, no
timeout/dependencies, runs until stopped) — configure via
aidp-pipelines(platform-ref §21, lines 948–954).
Reliability rules
- For large outputs, bound with
.show(n)/LIMITto protect context. - Markdown/widget rendering quirks: prefer simple cell content; verify a cell ran (
status:ok) before assuming output. - Idempotent create:
GET …/contents/<path>?content=0first; onlyPUTan empty notebook if it 404s.
References
- references/aidp-cli-map.md — skill → official
aidpCLI command map (primary engine) - references/oci-raw-request.md — REST host/version/auth + invocation shapes (fallback)
- references/no-mcp-rest-map.md — control-plane endpoints (clusters, jobs)
- references/payloads.md — persist + confirm request bodies for mutating ops
scripts/aidp_sql.py— the bundled cell/SQL executor- Pairs with
aidp-analyzing-data,aidp-ai-sql,aidp-pipelines
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。