blaxel-sdk について
Blaxel で AI エージェントやクラウド開発環境を構築する開発者向けのリファレンスです。TypeScript と Python の SDK、`bl` CLI を使い、サンドボックスの作成、プロセス実行、プレビュー URL の発行、テンプレートやサービスのデプロイを解説します。
主な機能
- 01TypeScript と Python の SDK
- 02クラウドサンドボックスの作成と管理
- 03ファイル書き込みとプロセス実行
- 04公開・非公開プレビュー URL の作成
- 05サンドボックステンプレート、エージェント、ジョブのデプロイ
活用シーン
- 01分離されたサンドボックスで開発サーバーを実行
- 02アプリのライブプレビューリンクを作成
- 03依存関係を事前導入した環境を再利用
- 04AI エージェント、MCP サーバー、バッチジョブをデプロイ
MCP 対応
Blaxel では MCP サーバーをサーバーレスエンドポイントとしてデプロイできます。CLI と SDK によるリソースの作成、デプロイ、管理も説明しています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ blaxel-ai/ agent-skills --skill blaxel-sdkインストール後、Claude Code で/blaxel-sdkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/blaxel-logo.svgreferences/sdk-python.mdsdk-typescript.md詳細
Blaxel スキルリファレンス
Blaxel とは
Blaxel(https://blaxel.ai)は、AI エージェントに専用のコンピューティング環境を提供するクラウドプラットフォームです。主力製品は常時利用可能なサンドボックスです。スタンバイ状態から 25ms 未満で即座に起動するマイクロ VM で、数秒間操作がないとゼロまでスケールダウンします。
Blaxel は主に次の用途に使用します。
- サンドボックスを起動し、依存関係をインストールして開発サーバーを実行し、ライブプレビュー URL を公開する
- 再利用可能な環境向けに、サンドボックステンプレート(カスタム Docker イメージ)を作成してデプロイする
- AI エージェント、MCP サーバー、バッチジョブをサーバーレスエンドポイントとしてデプロイする
SDK:TypeScript(@blaxel/core)と Python(blaxel)
CLI:bl(https://docs.blaxel.ai/cli-reference/introduction からインストール)
ドキュメント:https://docs.blaxel.ai
認証
SDK は、次の優先順位で認証情報を使用します。
- ログイン済みの Blaxel CLI
.envファイル内の環境変数(BL_WORKSPACE、BL_API_KEY)- システム環境変数
- Blaxel 設定ファイル(
~/.blaxel/config.yaml)
ローカルでログインします(開発時に推奨)。
bl login YOUR-WORKSPACE
または環境変数を設定します(リモート環境/CI 環境の場合)。
export BL_WORKSPACE=your-workspace
export BL_API_KEY=your-api-key
Blaxel 上で実行する場合、認証は自動的に行われます。
サンドボックスのワークフロー(主なユースケース)
最も一般的なワークフローは、サンドボックスを作成し、その中でコマンドを実行してプレビュー URL を取得することです。
ステップ 1:サンドボックスを作成する
Blaxel Hub(https://github.com/blaxel-ai/sandbox/tree/main/hub)の公開イメージを使用します。
blaxel/base-image:latest— 最小構成の Linuxblaxel/node:latest— Node.jsblaxel/nextjs:latest— Next.jsblaxel/vite:latest— Viteblaxel/expo:latest— Expo(React Native)blaxel/py-app:latest— Python
または、自分でデプロイしたカスタムテンプレートイメージを使用します。
作成時に必要なポートを指定してください。ポートは作成後に追加できません。ポート 80、443、8080 は予約済みです。
import { SandboxInstance } from "@blaxel/core";
const sandbox = await SandboxInstance.createIfNotExists({
name: "my-sandbox",
image: "blaxel/base-image:latest",
memory: 4096,
ports: [{ target: 3000, protocol: "HTTP" }],
});
from blaxel.core import SandboxInstance
sandbox = await SandboxInstance.create_if_not_exists({
"name": "my-sandbox",
"image": "blaxel/base-image:latest",
"memory": 4096,
"ports": [{"target": 3000, "protocol": "HTTP"}],
})
createIfNotExists/create_if_not_exists を使用すると、名前で既存のサンドボックスを再利用するか、新しいサンドボックスを作成できます。
get してから create する方法にフォールバックするより、常にこちらを優先してください。削除されたサンドボックスは数分間 TERMINATED 状態で保持されるため(ログへのアクセスを維持するため)、通常の get で、ゲートウェイやプレビュー URL が workload-not-found で失敗する終了済みのサンドボックスが返されることがあります。createIfNotExists はステータスを確認し、既存レコードが FAILED、TERMINATED、TERMINATING、または DELETING の場合にサンドボックスを再作成します。@blaxel/core 0.2.88/blaxel 0.2.55 以降では、削除直後の短い DELETING 期間が終わるまで待機するため、削除してから直接再作成できます。古い SDK バージョンでは、この期間中に「Unable to create sandbox after 3 attempts」が発生する場合があります。その場合は少し待ってから再試行するか、アップグレードしてください。get を使用する必要がある場合は、インスタンスを再利用する前に sandbox.status を確認してください。
ステップ 2:ファイルを書き込み、コマンドを実行する
// Write files
await sandbox.fs.write("/app/package.json", JSON.stringify({
name: "my-app",
scripts: { dev: "astro dev --host 0.0.0.0 --port 3000" },
dependencies: { "astro": "latest" }
}));
// Or write multiple files at once
await sandbox.fs.writeTree([
{ path: "src/pages/index.astro", content: "<h1>Hello</h1>" },
{ path: "astro.config.mjs", content: "import { defineConfig } from 'astro/config';\nexport default defineConfig({});" },
], "/app");
// Execute a command and wait for it to finish
const install = await sandbox.process.exec({
name: "install",
command: "npm install",
workingDir: "/app",
waitForCompletion: true,
timeout: 60, // seconds (default 600; 0 = no auto-kill with keepAlive)
});
// Start a long-running dev server (don't wait for completion)
const devServer = await sandbox.process.exec({
name: "dev-server",
command: "npm run dev",
workingDir: "/app",
waitForPorts: [3000], // returns once port 3000 is open
});
await sandbox.fs.write("/app/package.json", '{"name":"my-app","scripts":{"dev":"astro dev --host 0.0.0.0 --port 3000"},"dependencies":{"astro":"latest"}}')
await sandbox.fs.write_tree([
{"path": "src/pages/index.astro", "content": "<h1>Hello</h1>"},
{"path": "astro.config.mjs", "content": "import { defineConfig } from 'astro/config';\nexport default defineConfig({});"},
], "/app")
install = await sandbox.process.exec({
"name": "install",
"command": "npm install",
"working_dir": "/app",
"wait_for_completion": True,
"timeout": 60, # seconds (default 600; 0 = no auto-kill with keep_alive)
})
dev_server = await sandbox.process.exec({
"name": "dev-server",
"command": "npm run dev",
"working_dir": "/app",
"wait_for_ports": [3000],
})
重要:プレビュー URL 経由でアクセスできるよう、開発サーバーは localhost ではなく 0.0.0.0 にバインドする必要があります。--host 0.0.0.0 または HOST 環境変数を使用してください。
ステップ 3:プレビュー URL を作成する
const preview = await sandbox.previews.createIfNotExists({
metadata: { name: "app-preview" },
spec: { port: 3000, public: true },
});
const url = preview.spec?.url;
// url => https://xxxx.us-pdx-1.preview.bl.run
preview = await sandbox.previews.create_if_not_exists({
"metadata": {"name": "app-preview"},
"spec": {"port": 3000, "public": True},
})
url = preview.spec.url
プライベートプレビューの場合は、public: false を設定してトークンを作成します。
const preview = await sandbox.previews.createIfNotExists({
metadata: { name: "private-preview" },
spec: { port: 3000, public: false },
});
const token = await preview.tokens.create(new Date(Date.now() + 10 * 60 * 1000));
// Access: preview.spec?.url + "?bl_preview_token=" + token.value
ステップ 4:サンドボックスを管理する
// Reconnect to an existing sandbox. Careful: get can return a recently
// deleted sandbox still in TERMINATED state — check status before reuse,
// or use createIfNotExists which handles this for you.
const sandbox = await SandboxInstance.get("my-sandbox");
// List files
const { subdirectories, files } = await sandbox.fs.ls("/app");
// Read a file
const content = await sandbox.fs.read("/app/src/pages/index.astro");
// Get process info / logs
const proc = await sandbox.process.get("dev-server");
const logs = proc.logs; // available if waitForCompletion was true
// Kill a process
await sandbox.process.kill("dev-server");
// Delete the sandbox (all data is erased)
await sandbox.delete();
sandbox = await SandboxInstance.get("my-sandbox")
result = await sandbox.fs.ls("/app")
content = await sandbox.fs.read("/app/src/pages/index.astro")
proc = await sandbox.process.get("dev-server")
# proc.logs available if wait_for_completion was True
await sandbox.process.kill("dev-server")
await sandbox.delete()
サンドボックステンプレート(カスタムイメージ)
再利用可能な環境(依存関係をすべて事前にインストールした Astro プロジェクトなど)が必要な場合は、テンプレートを作成します。
bl new sandbox my-astro-template
cd my-astro-template
次のファイルが作成されます:blaxel.toml、Dockerfile、entrypoint.sh、Makefile。
Dockerfile をカスタマイズします。必ず sandbox-api バイナリを含めてください。
FROM node:22-alpine
WORKDIR /app
COPY --from=ghcr.io/blaxel-ai/sandbox:latest /sandbox-api /usr/local/bin/sandbox-api
RUN npm install -g astro
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh で sandbox-api を起動する必要があります。
#!/bin/sh
/usr/local/bin/sandbox-api &
while ! nc -z 127.0.0.1 8080; do sleep 0.1; done
echo "Sandbox API ready"
# Optionally start a process via the sandbox API:
# curl http://127.0.0.1:8080/process -X POST -d '{"workingDir":"/app","command":"npm run dev","waitForCompletion":false}' -H "Content-Type: application/json"
wait
テンプレートをデプロイします。
bl deploy
次に IMAGE_ID を取得し、それを使ってサンドボックスを作成します。
bl get sandboxes my-astro-template -ojson | jq -r '.[0].spec.runtime.image'
const sandbox = await SandboxInstance.createIfNotExists({
name: "project-sandbox",
image: "IMAGE_ID",
memory: 4096,
ports: [{ target: 3000, protocol: "HTTP" }],
});
チュートリアルとサンプル
サンドボックス
Astro:https://docs.blaxel.ai/Tutorials/Astro Expo:https://docs.blaxel.ai/Tutorials/Expo Next.js:https://docs.blaxel.ai/Tutorials/Nextjs
エージェント
概要:https://docs.blaxel.ai/Tutorials/Agents-Overview
CLI の主なコマンド
確認などの入力を求めることがある CLI コマンドを、非対話型/TTY なしの環境(スクリプト、CI、エージェントなど)で実行する場合は、-y を追加して自動的に確認してください。
| コマンド | 用途 |
|---|---|
bl login | ワークスペースに認証します |
bl new sandbox|agent|job|mcp NAME | テンプレートから新しいリソースを初期化します |
bl deploy | リソースをビルドして Blaxel にデプロイします |
bl deploy -d DIR | 指定したディレクトリからデプロイします |
bl serve | テスト用にリソースをローカルで実行します |
bl serve --hotreload | ホットリロードを有効にしてローカルで実行します |
bl get sandboxes|agents|jobs|functions | リソースを一覧表示します |
bl get sandbox NAME --watch | サンドボックスのデプロイ状況を監視します |
bl delete sandbox|agent|job|function NAME | リソースを削除します |
bl connect sandbox NAME | サンドボックス内で対話型ターミナルを開きます |
bl chat AGENT-NAME | デプロイ済みエージェントと対話形式でチャットします |
bl run job NAME --data JSON | デプロイ済みバッチジョブを実行します |
blaxel.toml の構造
name = "my-resource"
type = "sandbox" # sandbox, agent, function, job, volume-template
[env]
NODE_ENV = "development" # NOT for secrets — use Variables-and-secrets
[runtime]
memory = 4096 # MB
generation = "mk3"
# timeout = 900 # seconds (agents max 900, jobs max 86400)
# Ports (sandbox only)
[[runtime.ports]]
name = "dev-server"
target = 3000
protocol = "tcp"
重要な注意点
- ポートはサンドボックスの作成時に宣言する必要があります。後から追加することはできません
- ポート 80、443、8080 は Blaxel によって予約されています
- プレビュー URL を機能させるには、開発サーバーを
localhostではなく0.0.0.0にバインドする必要があります - サンドボックスのメモリの約 50% はインメモリファイルシステム(tmpfs)用に予約されています。追加のストレージにはボリュームを使用してください
- サンドボックスは、約 5 秒間操作がないと自動的にゼロまでスケールダウンします。状態はスタンバイ中も保持され、25 ミリ秒未満で再開します
- 削除したサンドボックスは、ログにアクセスできるよう、数分間
TERMINATED状態で表示され続けます。通常のgetで取得される場合があります。再利用する前にcreateIfNotExistsを使用するか、sandbox.statusを確認してください - プロセスの
timeoutは秒単位です(デフォルトは 600)。これはwaitForCompletionの上限時間です。上限を超えると呼び出しはタイムアウトエラー(HTTP 422)をスローしますが、プロセスは実行を続けます。失敗したと判断せず、process.get/process.waitで再接続してください。keepAliveを指定すると、タイムアウト後にプロセスが自動終了します(0 = 自動終了なし)。通常の長時間実行プロセス(waitForPortsで起動した開発サーバーなど)は、この設定によって自動終了しません waitForCompletionはプロセスの実行中、HTTP リクエストを開いたままにします(サンドボックスの MCP サーバー経由では約 58 秒が上限です)。長時間実行するプロセスでは、これを指定せずに開始し、代わりにprocess.wait(name, { maxWait })で待機してくださいprocess.execはenv(プロセスごとの環境変数)、restartOnFailure、maxRestartsも受け付けます- すべてのプロセスの stdout/stderr の各行は、デフォルトでテレメトリとしてエクスポートされます。大量のログは CPU に深刻な負荷をかけます。下記の「プロセスログのエクスポートを無効にする」を参照してください
- シークレットを
[env]に設定してはいけません。Console の「変数とシークレット」ページを使用してください
サンドボックスのベストプラクティス
詳しいリファレンス:https://docs.blaxel.ai/Sandboxes/best-practices
ファイルの一括アップロード:zip + writeBinary + unzip
多数のファイルを、ファイルごとに fs.write を呼び出して書き込んではいけません。各呼び出しでネットワークを往復するため(約 100 ミリ秒)、数百個のファイルでは数分かかります。ファイルを zip にまとめ、1 回の writeBinary 呼び出しでアップロードしてから、サンドボックス内で解凍してください。N 回ではなく 2 回の呼び出しで済みます。
import AdmZip from "adm-zip";
const zip = new AdmZip();
for (const f of files) zip.addFile(f.path, Buffer.from(f.content));
await sandbox.fs.writeBinary("/tmp/project.zip", zip.toBuffer());
await sandbox.process.exec({
name: "unzip",
command: "unzip -o /tmp/project.zip -d /app/project && rm /tmp/project.zip",
waitForCompletion: true,
});
import io, zipfile
buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf:
for f in files:
zf.writestr(f["path"], f["content"])
await sandbox.fs.write_binary("/tmp/project.zip", buf.getvalue())
await sandbox.process.exec({
"name": "unzip",
"command": "unzip -o /tmp/project.zip -d /app/project && rm /tmp/project.zip",
"wait_for_completion": True,
})
少数のファイルであれば、fs.writeTree(1 回のバッチ呼び出し)で十分です。サンドボックスイメージに unzip がない場合は、代わりに python3 -m zipfile -e /tmp/project.zip /app/project で展開するか、テンプレートイメージに unzip をインストールしてください。
サンドボックスの再作成後もプロジェクトの状態を保持する
コールドブートのたびにリポジトリを再クローンして npm install を再実行するのは避けてください。サンドボックスを削除すると(TTL の期限切れ、または明示的な削除)、ファイルシステムは消去されますが、永続化には次の方法があります。
- ボリューム:サンドボックスの作成時に接続する永続ブロックストレージです(
volumes: [{ name, mountPath }])。プロジェクトのワークスペースと依存関係のキャッシュをボリュームに配置すると、再作成時に再接続され、再プルを省略できます。詳しい例については、./references を参照してください。 - Agent Drive:実行中のサンドボックスにマウントできる共有ファイルシステムです(プライベートプレビュー)。複数のサンドボックス間で状態を共有する場合に適しています。
- テンプレートイメージ:重い依存関係をカスタムサンドボックスイメージに組み込むと、コールドブート時にインストール済みの状態で起動できます。
また、アイドル状態のサンドボックスはスタンバイ状態になります(無料で、25 ミリ秒未満で再開します)。セッションごとに削除して再構築するのではなく、TTL を設定してサンドボックスをアイドル状態のままにしておくことをおすすめします。
プロセスログのエクスポートを無効にする
デフォルトでは、サンドボックス内のプロセスから出力されるすべての stdout/stderr 行が構造化テレメトリとしてエクスポートされます。ログ出力の多いプロセス(詳細なログを出す開発サーバーや、トレースレベルのポーラーなど)は、1 分あたり数千行を出力することがあり、このエクスポート負荷はサンドボックス内の CPU 競合を引き起こす既知の原因です。
無効にする方法は 2 つあります。
- サンドボックス単位:サンドボックスに環境変数
SANDBOX_DISABLE_PROCESS_LOGGING=trueを設定します(例:テンプレートの Dockerfile にENV SANDBOX_DISABLE_PROCESS_LOGGING=trueを記述する、または作成時にサンドボックスの環境変数として設定する)。 - ワークスペース全体:管理者は Console > Workspace settings で、すべてのサンドボックスのプロセスログを無効にできます。
Blaxel Console ではプロセスログを確認できなくなりますが、SDK/API(process.get、ログストリーミング)経由でログを読み取ることは引き続きできます。
インテグレーションのレビュー時に注意すべき一般的なアンチパターン
| アンチパターン | 症状 | 修正方法 |
|---|---|---|
createIfNotExists ではなく、取得してから作成する | 削除後すぐに再作成すると、ゲートウェイ/プレビュー URL で workload-not-found が発生する(サンドボックスが TERMINATED 状態で返される) | createIfNotExists を使用するか、get の後に sandbox.status を確認する |
| コールドブートのたびにリポジトリを再プルし、依存関係を再インストールする | セッションごとに起動に数分かかる | ワークスペースにはボリュームまたは Agent Drive を使用し、依存関係にはテンプレートイメージを使用する |
多数のファイルに対してファイルごとに fs.write を実行する | 復元に数分かかる(N 回のネットワーク往復) | zip + writeBinary + unzip(2 回の呼び出し)を使用する。少量の場合は writeTree を使用する |
| ログエクスポートを有効にしたまま、stdout に大量のログを出力する | コンパイル中や大量出力時に CPU 使用率が急増する | SANDBOX_DISABLE_PROCESS_LOGGING=true またはワークスペースの切り替えを使用し、アプリケーションのログ出力も抑える |
| アイドル状態のサンドボックスを削除する | 再訪のたびにコールドビルドが発生する | アイドル状態の管理はスタンバイに任せ、クリーンアップには ttl を使用する |
Agent Drive(共有ファイルシステム)
Agent Drive は SeaweedFS を基盤とする分散ファイルシステムで、実行中かどうかにかかわらず、いつでも複数のサンドボックスまたはエージェントにマウントできます。サンドボックスの作成時にのみ接続するブロックストレージであるボリュームとは異なり、ドライブは複数のサンドボックスからの同時読み書きに対応し、動的に接続および切断できます。
この機能は現在、プライベートプレビュー中です。プレビュー期間中、Agent Drive は
us-was-1リージョンでのみ利用できます。ドライブとサンドボックスの両方がこのリージョンにある必要があります。
ユースケース:
- 中間サービスを使わずにサンドボックス間でデータを受け渡す
- 他のエージェント向けにツールの出力やコンテキスト履歴を保存する
- 複数のエージェント間でデータセットを共有する
- パッケージの依存関係を保存する共有ファイルシステムキャッシュを作成する
ドライブを作成する
import { DriveInstance } from "@blaxel/core";
const drive = await DriveInstance.createIfNotExists({
name: "my-drive",
region: "us-was-1",
displayName: "My Project Drive", // optional; defaults to name
labels: { env: "dev", project: "x" }, // optional
});
from blaxel.core.drive import DriveInstance
drive = await DriveInstance.create_if_not_exists(
{
"name": "my-drive",
"region": "us-was-1",
"display_name": "My Project Drive",
"labels": {"env": "dev", "project": "x"},
}
)
ドライブをサンドボックスにマウントする
import { SandboxInstance } from "@blaxel/core";
const sandbox = await SandboxInstance.get("my-sandbox");
await sandbox.drives.mount({
driveName: "my-drive",
mountPath: "/mnt/data",
drivePath: "/", // optional; defaults to root of the drive
});
from blaxel.core import SandboxInstance
sandbox = await SandboxInstance.get("my-sandbox")
await sandbox.drives.mount(
drive_name="my-drive",
mount_path="/mnt/data",
drive_path="/",
)
マウントすると、サンドボックス内のマウントパスに書き込まれたファイルはドライブに保存され、サンドボックスを削除した後も保持されます。
サブディレクトリをマウントする
await sandbox.drives.mount({
driveName: "my-drive",
mountPath: "/app/project",
drivePath: "/projects/alpha",
});
await sandbox.drives.mount(
drive_name="my-drive",
mount_path="/app/project",
drive_path="/projects/alpha",
)
ドライブの一覧表示、マウント解除、削除
// List mounted drives on a sandbox
const mounts = await sandbox.drives.list();
// List all drives
const drives = await DriveInstance.list();
// Unmount
await sandbox.drives.unmount("/mnt/data");
// Delete a drive
await DriveInstance.delete("my-drive");
// or instance-level:
const drive = await DriveInstance.get("my-drive");
await drive.delete();
mounts = await sandbox.drives.list()
drives = await DriveInstance.list()
await sandbox.drives.unmount("/mnt/data")
await DriveInstance.delete("my-drive")
# or instance-level:
drive = await DriveInstance.get("my-drive")
await drive.delete()
CLI:bl get drives
Agent Drive の完全な例
import { SandboxInstance, DriveInstance } from "@blaxel/core";
// 1. Create a drive
const drive = await DriveInstance.createIfNotExists({
name: "agent-storage",
region: "us-was-1",
});
// 2. Create a sandbox (use image ID from custom template)
const sandbox = await SandboxInstance.createIfNotExists({
name: "my-agent-sandbox",
image: "my-sandbox-image-id",
memory: 2048,
region: "us-was-1",
});
// 3. Mount the drive
await sandbox.drives.mount({
driveName: "agent-storage",
mountPath: "/mnt/storage",
drivePath: "/",
});
// 4. Write a file to the mounted drive
await sandbox.fs.write("/mnt/storage/hello.txt", "Hello from the drive!");
// 5. Read it back
const content = await sandbox.fs.read("/mnt/storage/hello.txt");
console.log(content); // "Hello from the drive!"
// 6. List mounted drives
const mounts = await sandbox.drives.list();
console.log(mounts);
import asyncio
from blaxel.core.drive import DriveInstance
from blaxel.core import SandboxInstance
async def main():
drive = await DriveInstance.create_if_not_exists(
{"name": "agent-storage", "region": "us-was-1"}
)
sandbox = await SandboxInstance.create_if_not_exists(
{
"name": "my-agent-sandbox",
"image": "my-sandbox-image-id",
"memory": 2048,
"region": "us-was-1",
}
)
await sandbox.drives.mount(
drive_name="agent-storage",
mount_path="/mnt/storage",
drive_path="/",
)
await sandbox.fs.write("/mnt/storage/hello.txt", "Hello from the drive!")
content = await sandbox.fs.read("/mnt/storage/hello.txt")
print(content)
mounts = await sandbox.drives.list()
print(mounts)
asyncio.run(main())
ドキュメント:https://docs.blaxel.ai/Agent-drive/Overview
その他の Blaxel リソース
エージェントのホスティング
AI エージェントを、サーバーレスで自動スケーリングする HTTP エンドポイントとしてデプロイします。フレームワークに依存しません(LangChain、CrewAI、Claude SDK など)。
bl new agent
# develop in src/agent.ts or src/agent.py
bl serve # test locally
bl deploy # deploy
bl chat AGENT-NAME # query
同期エンドポイントは最大 100 秒間、非同期エンドポイントは最大 10 分間リクエストを処理します。 ドキュメント:https://docs.blaxel.ai/Agents/Overview
MCP サーバーのホスティング
MCP プロトコルに準拠したカスタムツールサーバーをデプロイします。
bl new mcp
# implement in src/server.ts or src/server.py
bl serve --hotreload # test locally
bl deploy
エージェントは SDK を介して、デプロイ済みの MCP サーバーに接続します。
const tools = await blTools(["functions/my-mcp-server"]);
各サンドボックスには、プロセス管理、ファイルシステム、コード生成用のツールを備えた、独自の組み込み MCP サーバーもあります。URL は https://<SANDBOX_URL>/mcp です。
ドキュメント:https://docs.blaxel.ai/Functions/Overview
バッチジョブ
並列バックグラウンドタスク向けのスケーラブルなコンピューティング(数分から数時間)です。
bl new job
# implement in src/index.ts or src/index.py
bl deploy
bl run job NAME --data '{"tasks": [...]}'
タスクごとの最大実行時間は 24 時間です。blaxel.toml で maxConcurrentTasks を設定してください。
ドキュメント:https://docs.blaxel.ai/Jobs/Overview
リソース
- デプロイ設定のリファレンス:https://docs.blaxel.ai/deployment-reference
- CLI コマンドのリファレンス:https://docs.blaxel.ai/cli-reference/introduction
詳しい説明やコード例については、各 SDK ファイルを参照してください。
- ./references/sdk-python.md
- ./references/sdk-typescript.md
各 SDK の README には、以下が含まれています。
- SDK の概要
- 要件
- サンドボックス、ボリューム、エージェント、バッチジョブ、MCP の操作に関するコード例
- その他の役立つ情報
その他のドキュメントについては、https://docs.blaxel.ai/llms.txt を参照してください。