OpenSpace で自己進化型 AI エージェントを構築
本文の状態
日本語全文を表示中
詳細モードで約10分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
MarkTechPost
MarkTechPost は、OpenSpace を用いて環境構築からスキル進化、MCP ベースの統合に至るまでのワークフローを解説し、低コストで再利用可能なエージェント行動を実現する手法を紹介した。
AI深層分析を開く2026年7月27日 01:37
AI深層分析
キーポイント
OpenSpace の包括的なワークフロー構築
環境設定や疎なリポジトリクローンから始まり、非同期 Python API の呼び出し、SQLite を用いた進化能力のバージョン管理と行跡メタデータの保存までを含む一連の手順を提示する。
スキル進化と低コスト再利用の実現
FIX、DERIVED、CAPTURED の各スキルタイプがどのように機能するかを分析し、これらがエージェントの挙動をより安価で再利用可能にする仕組みを解説する。
MCP サーバーとカスタムスキルの統合
ホストエージェントのスキル接続、ウォームタスクの再利用テスト、そしてストリーミング HTTP MCP サーバーの起動方法を具体的なコード例と共に示す。
Python 3.12+ と環境構築の要件
OpenSpace は Python 3.12 以上が必要であり、Colab の場合はランタイムタイプの変更や仮想環境の使用が推奨される。
リポジトリのクローンと依存関係のインストール
Git を用いて OpenSpace リポジトリをスパースチェックアウトで取得し、パッケージを直接インストールして MCP ツールを有効化する。
重要な引用
analyze the showcase evolution database to understand how FIX, DERIVED, and CAPTURED skills support lower-cost, reusable agent behavior
inspect how OpenSpace stores evolved capabilities in SQLite with versioning and lineage metadata
launch the streamable HTTP MCP server
"OpenSpace needs Python 3.12+, Colab has {sys.version}. Runtime > Change runtime type, or use a fallback py312 venv."
編集コメントを表示
編集コメント
本記事は、単なるツールの紹介に留まらず、エージェントの「進化」をどうデータとして管理し、コストを抑えて再利用するかという実務的な課題に対する具体的な解決策を示している。MCP(Model Context Protocol)との連携や SQLite を活用した行跡管理は、今後エージェンシーシステムが複雑化する中で重要なアーキテクチャパターンとなるだろう。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
本チュートリアルでは、OpenSpace を用いたワークフローの構築と検証を行います。環境設定やリポジトリのクローンから始まり、ライブタスクの実行、スキルの進化、そして MCP ベースのエージェント統合へと段階的に進んでいきます。
まずモデル認証情報やワークスペース変数の設定を行い、プロジェクトを編集可能なモードでインストールします。その後、非同期 Python API を呼び出して、OpenSpace が SQLite 上でどのようにバージョン管理と系譜(ラインージ)メタデータを付与しながら進化させた能力を保存するかを検証します。
さらに、カスタム SKILL.md の作成やホストエージェントとのスキル連携、ウォームタスクの再利用テスト、ストリーミング対応 HTTP MCP サーバーの起動を行います。最後にショーケース用データベースを分析し、FIX(修正)、DERIVED(派生)、CAPTURED(捕捉)という 3 つのスキルタイプが、低コストで再利用可能なエージェント行動を実現する仕組みを理解します。
import os, sys, subprocess, sqlite3, json, textwrap, shutil, time, pathlib
ANTHROPIC_API_KEY = ""
OPENAI_API_KEY = ""
OPENSPACE_MODEL = "anthropic/claude-sonnet-4-5"
OPENSPACE_CLOUD_KEY = ""
assert sys.version_info >= (3, 12), (
f"OpenSpace needs Python 3.12+, Colab has {sys.version}. "
"Runtime > Change runtime type, or use a fallback py312 venv."
)
print("
image Python:", sys.version.split()[0])
REPO_DIR = "/content/OpenSpace"
if not os.path.exists(REPO_DIR):
subprocess.run(
["git", "clone", "--filter=blob:none", "--sparse",
"https://github.com/HKUDS/OpenSpace.git", REPO_DIR],
check=True,
)
subprocess.run(
["git", "sparse-checkout", "set", "--no-cone", "/*", "!/assets/"],
cwd=REPO_DIR, check=True,
)
print("
image Cloned to", REPO_DIR)
print("Top-level:", sorted(os.listdir(REPO_DIR)))
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "-e", REPO_DIR], check=True)
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "nest_asyncio"], check=True)
for cli in ["openspace-mcp", "openspace-dashboard"]:
path = shutil.which(cli)
print(f"{'
image' if path else '
image '} {cli}: {path}")
subprocess.run(["openspace-mcp", "--help"], check=False)
WORKSPACE = "/content/openspace_workspace"
SKILLS_DIR = "/content/my_agent_skills"
os.makedirs(WORKSPACE, exist_ok=True)
os.makedirs(SKILLS_DIR, exist_ok=True)
env_lines = [
f"OPENSPACE_MODEL={OPENSPACE_MODEL}",
f"OPENSPACE_WORKSPACE={WORKSPACE}",
f"OPENSPACE_HOST_SKILL_DIRS={SKILLS_DIR}",
]
if ANTHROPIC_API_KEY: env_lines.append(f"ANTHROPIC_API_KEY={ANTHROPIC_API_KEY}")
if OPENAI_API_KEY: env_lines.append(f"OPENAI_API_KEY={OPENAI_API_KEY}")
if OPENSPACE_CLOUD_KEY: env_lines.append(f"OPENSPACE_API_KEY={OPENSPACE_CLOUD_KEY}")
env_path = os.path.join(REPO_DIR, "openspace", ".env")
pathlib.Path(env_path).write_text("\n".join(env_lines) + "\n")
pathlib.Path("/content/.env").write_text("\n".join(env_lines) + "\n")
for line in env_lines:
k, _, v = line.partition("=")
os.environ[k] = v
print("
image .env written:\n" + "\n".join(l.split("=")[0] + "=***" if "KEY" in l else l for l in env_lines))
HAS_LLM_KEY = bool(ANTHROPIC_API_KEY or OPENAI_API_KEY)
if not HAS_LLM_KEY:
print("
image No LLM key set — Steps 4/6 (live execution) will be skipped.")
Python の実行環境を検証し、必要な API 認証情報を定義して OpenSpace モデルとオプションのクラウドアクセス設定を構成します。リポジトリはスパースチェックアウトでクローンし、パッケージを編集可能モード(editable mode)でインストールして、OpenSpace コマンドラインツールが利用可能か確認します。その後、ワークスペースとスキルディレクトリを作成し、環境設定ファイルを記述、必要な変数をエクスポート、そしてライブ LLM 実行が有効化されているかどうかを検出します。
Copy CodeCopiedUse a different Browser
import asyncio, nest_asyncio
nest_asyncio.apply()
async def run_task(query: str):
from openspace import OpenSpace
async with OpenSpace() as cs:
result = await cs.execute(query)
print("── RESPONSE " + "─" * 50)
print(result["response"][:3000])
for skill in result.get("evolved_skills", []):
print(f"
image Evolved: {skill['name']} (origin={skill['origin']})")
return result
if HAS_LLM_KEY:
result_1 = asyncio.run(run_task(
"Write a Python function that parses a CSV of employee hours and "
"computes weekly payroll with overtime (1.5x beyond 40h). Test it "
"on a small synthetic example and show the output."
))
else:
print("
image Skipped live task (no key).")
def dump_db(db_path, max_rows=8):
if not os.path.exists(db_path):
print("No DB at", db_path); return
con = sqlite3.connect(db_path)
cur = con.cursor()
tables = [r[0] for r in cur.execute(
"SELECT name FROM sqlite_master WHERE type='table'").fetchall()]
print(f"
image {db_path}\n tables: {tables}")
for t in tables:
try:
cols = [c[1] for c in cur.execute(f"PRAGMA table_info({t})").fetchall()]
rows = cur.execute(f"SELECT * FROM {t} LIMIT {max_rows}").fetchall()
print(f"\n
image {t} ({len(rows)} shown) cols={cols[:8]}{'…' if len(cols)>8 else ''}")
for r in rows:
print(" ", str(r)[:160])
except Exception as e:
print(f" (skip {t}: {e})")
con.close()
runtime_db = os.path.join(WORKSPACE, ".openspace", "openspace.db")
alt_db = os.path.join(REPO_DIR, ".openspace", "openspace.db")
dump_db(runtime_db if os.path.exists(runtime_db) else alt_db)
try:
from openspace.skill_engine.registry import SkillRegistry
from openspace.skill_engine import types as sk_types
print("\n
image skill_engine importable:",
[n for n in dir(sk_types) if n[0].isupper()][:6])
except Exception as e:
print("
image registry import note:", e)
Google Colab で非同期実行を初期化し、OpenSpace Python API を通じてタスクを送信するための再利用可能な関数を定義します。まず給与計算生成の初期タスクを実行し、事後分析で OpenSpace が進化させたスキルを確認します。さらに SQLite データベースの構造を検証し、保存されたレコードを表示。スキルレジストリと型定義がプログラムからアクセス可能か検証します。
LLM キーが存在する場合は、以下のタスクを実行します。
payroll ロジックを拡張し、従業員ごとの税額控除率を示す第 2 の CSV ファイルを追加して手取り給与を算出します。既存の payroll スキルも再利用してください。
run_task を非同期で実行した結果を result_2 に格納し、ランタイムデータベース(存在すればそれを、なければ代替用データベース)に最大 12 行分ダンプします。
LLM キーがない場合は、ウォームアップ再実行デモをスキップした旨を表示します。
次に、カスタムスキル用のディレクトリ「colab-csv-report」を作成します。存在しない場合は親ディレクトリも一緒に作成されます。
このディレクトリに SKILL.md ファイルを生成し、以下の内容を書き込みます。
name: colab-csv-report
description: 任意の CSV を読み込み、要約統計、null 値の数、データ型、および重要な観察点 3 つを含む短い Markdown レポートを作成します。pandas を使用しますが、プロットは行いません。
colab-csv-report
- pandas で CSV を読み込みます(エラー時は「on_bad_lines="skip"」でフォールバック)。
- 形状、データ型テーブル、describe() 結果、null 値の数を出力します。
- Markdown の箇条書き形式で重要な観察点 3 つを記述します。
- パースに失敗した場合は、「sep=None, engine="python"」で再試行します。
カスタムスキルの作成が完了しました。ファイルは「colab-csv-report/SKILL.md」です。
次に、ホストスキル(delegate-task と skill-discovery)をエージェントディレクトリにインストールします。REPO_DIR 内の openspace/host_skills ディレクトリから該当フォルダを検索し、SKILLS_DIR にコピーします。既に存在する場合は上書きせず、新規作成のみ行います。
ホストスキルのインストールが完了しました。SKILLS_DIR 内に以下のファイルが配置されています:delegate-task, skill-discovery。
最後に、LLM キーが存在する場合に限り、デモ用 CSV ファイル(/content/demo.csv)を作成し、以下のデータを書き込みます。
name,dept,hours,rate
Ada,Eng,45,90
Grace,Eng,38,95
Alan,Math,50,80
その後、colab-csv-report スキルを使用して、この CSV ファイルの Markdown レポートを生成するタスクを実行します。
OpenSpace が以前に生成されたスキルから能力をどのように再利用・派生させるかを観察するため、関連する給与計算タスクを実行しました。まず、CSV ファイルの分析と構造化された Markdown レポートの作成を指示するカスタム SKILL.md を作成します。その後、OpenSpace のホストスキルをインストールし、デモンストレーション用データセットを生成して、同じ進化型エージェントワークフローを通じてこのカスタム機能を実行します。
mcp_proc = subprocess.Popen(
["openspace-mcp", "--transport", "streamable-http",
"--host", "127.0.0.1", "--port", "8081"],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True,
env={**os.environ},
)
time.sleep(8)
try:
import urllib.request
req = urllib.request.Request("http://127.0.0.1:8081/mcp", method="GET")
try:
urllib.request.urlopen(req, timeout=5)
print("
image MCP streamable-HTTP endpoint is up at http://127.0.0.1:8081/mcp")
except urllib.error.HTTPError as e:
print(f"
image MCP server alive (HTTP {e.code} on bare GET, expected for MCP)")
except Exception as e:
print("
image MCP probe failed:", e)
print(json.dumps({
"mcpServers": {
"openspace": {
"command": "openspace-mcp",
"toolTimeout": 600,
"env": {
"OPENSPACE_HOST_SKILL_DIRS": SKILLS_DIR,
"OPENSPACE_WORKSPACE": WORKSPACE,
"OPENSPACE_API_KEY": "sk-xxx (optional, for cloud)",
},
}
}
}, indent=2))
mcp_proc.terminate()
OpenSpace の MCP サーバーは、ストリーミング HTTP トランスポートを使用して起動し、ローカルの Colab エンドポイントにバインドします。サーバープロセスが稼働していることを確認するためにエンドポイントをプローブしますが、これは基本的な HTTP リクエストに対して MCP 固有の応答ステータスが返される場合でも同様です。また、外部エージェントが OpenSpace のワークスペースやスキルディレクトリにアクセスできるよう、MCP ホスト設定の例も生成します。
OPENSPACE_CLOUD_KEY が設定されている場合、カスタムスキルをクラウドにアップロードするコマンドを実行し、完了のメッセージを表示します。キーが未設定の場合は、アップロード・ダウンロード機能の有効化に必要な環境変数の設定を促すメッセージが表示されます。
次に、リポジトリ内の showcase ディレクトリにある SQLite データベース(openspace.db)をダンプします。データベースが存在する場合、接続して各テーブルの構造を確認し、「origin」という列が含まれているテーブルについて、その値ごとの行数を集計・表示します。これにより、進化モードにおけるデータの内訳が把握できます。
最後に、チュートリアルの完了メッセージを表示します。これで以下が実現しています:
- Colab 環境に OpenSpace がインストールされ、設定済み
- Python API を介したリアルタイムタスク実行(キー設定時)
- エージェントが自動的に検出するカスタム SKILL.md の作成
- Claude Code、Codex、OpenClaw、nanobot など、SKILL.md に準拠するあらゆるエージェントで利用可能なホストスキル(delegate-task、skill-discovery)の準備完了
- ストリーミング HTTP を介して起動した MCP サーバー
- 60 以上のスキル進化履歴を記録したデータベースの完全な系譜調査機能
次は、関連タスクを実行し、スキルが自動的に修正・派生・キャプチャされることでトークン使用量が減少する様子を確認してください。ダッシュボード(Node.js バージョン 20 以上が必要)は以下のコマンドで起動できます:
openspace-dashboard --port 7788
その後、フロントエンドディレクトリに移動し、依存関係をインストールして開発サーバーを起動します。
cd frontend && npm i && npm run dev
有効なクラウド API キーが存在する場合、カスタムスキルを OpenSpace クラウドコミュニティへ条件付きでアップロードします。また、リポジトリに格納されたスキルの展示用 SQLite データベースを検証し、保存されているスキルやメタデータ、品質情報、そして完全な進化の系譜(ラインジ)を調査しました。
最後に、スキルの起源タイプごとに集約し、本チュートリアルを通じて構築した Colab 環境、カスタム機能、MCP(Model Context Protocol)の統合、そして自己進化するワークフローについて要約します。
結論として、エージェントの機能がどのように実行され、永続化され、再利用され、段階的に改善されるかを示す実用的な OpenSpace 環境を構築しました。Python API、ローカルのスキルディレクトリ、SQLite ベースのレジストリ、MCP トランスポート、そしてオプションのクラウド共有コマンドに直接取り組むことで、ユーザー向けのワークフローと背後にあるスキルエンジンアーキテクチャの両方を可視化できました。
さらに、関連タスクが以前に進化した知識をどのように再利用できるか、カスタムスキルがランタイム時にどのように検出可能になるか、そして各機能の開発履歴をラインジ記録がどのように明らかにするかを検証しました。これにより、Colab 上で自己進化しコスト効率の高いエージェントシステムを構築するための堅固な基盤が得られました。
AI算出
技術分析ainew評価標準
記事は OpenSpace という具体的なツールを用いたエージェントの構築・進化プロセスを技術的に詳述しており、再現可能な実装知見が含まれるため technical_analysis に分類されます。また、Claude Sonnet 4.5 や MCP といった具体名が明記されているため検索機会スコアも高く設定されています。
6つの評価軸を見る
- AI関連度
- 90
- 情報源の信頼性
- 25
- 新規性
- 75
- 調べる価値
- 75
- 重複の少なさ
- 100
- 日本での有用性
- 25
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み