7月25日、MarkTechPostのSana Hassanが「Building Self-Evolving AI Agents with OpenSpace Using Skills, MCP, Lineage, and Low-Cost Reuse」と題した記事を公開した。この記事では、OpenSpaceを使ってスキルの自己進化・MCP統合・SQLiteによる永続化を組み合わせた自己進化型AIエージェントをGoogle Colab上で構築する手順について詳しく紹介されている。OpenSpaceは香港大学データサイエンス研究室(HKUDS)が開発するオープンソースプロジェクトであり、「実行するたびにスキルが蓄積され、同じLLM呼び出しを繰り返さずに済む」という設計思想が核心にある。コスト削減の定量的な数値は元記事には示されていないが、スキルの再利用によってトークン消費を抑えられるという観察がチュートリアルを通じて確認できる構成になっている。
「スキルが蓄積されるほど、トークン消費が下がる」という設計思想
AIエージェントの実行コストは、同じ処理を毎回ゼロから生成していては下がらない。OpenSpaceが解決しようとしているのはこの問題だ。
エージェントがタスクを実行すると、その過程で生まれた能力がSQLiteデータベースにスキルとして保存される。次回以降、関連タスクが来たとき、エージェントはLLMを呼び直すのではなく、既存スキルを再利用・派生させて処理する。スキルには以下の3種類のoriginが付与される:
- FIX:固定された完成済みスキル
- DERIVED:既存スキルから派生したもの
- CAPTURED:実行中に捕捉・記録されたもの
リポジトリ内のshowcaseデータベースには60件以上のスキル進化履歴が含まれており、このチュートリアルではその中身をSQLiteで直接クエリして確認する手順も含まれている。なお、「関連タスクを追加で実行するほどトークン使用量が下がっていく」という点はチュートリアル上での観察として示されているものであり、元記事に具体的な削減率などの定量データは記載されていない。
チュートリアルの構成
チュートリアルはGoogle Colab用のJupyterノートブックとして公開されており、以下の流れで進む。
1. 環境セットアップ
Python 3.12以上が必要。Colabのデフォルトランタイムが条件を満たすか確認してから始める。リポジトリは--sparseオプションでassets/ディレクトリを除外してクローンし、editable installで導入する。
subprocess.run(
["git", "clone", "--filter=blob:none", "--sparse",
"https://github.com/HKUDS/OpenSpace.git", REPO_DIR],
check=True,
)
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "-e", REPO_DIR], check=True)
APIキーはANTHROPIC_API_KEYまたはOPENAI_API_KEYのいずれかを設定する。未設定でもスキルDB閲覧やMCPサーバー起動など、LLMを使わないステップは実行可能だ。
2. タスク実行とスキル進化の確認
非同期APIでタスクを投げると、レスポンスとともにevolved_skillsが返ってくる。
async def run_task(query: str):
from openspace import OpenSpace
async with OpenSpace() as cs:
result = await cs.execute(query)
for skill in result.get("evolved_skills", []):
print(f" 🧬 Evolved: {skill['name']} (origin={skill['origin']})")
return result
チュートリアルでは最初に「従業員の時間外労働を含む給与計算」タスクを実行し、続けて「税控除を加えた純支払額の計算」タスクを投げる。2回目のタスクで1回目のスキルが再利用・派生される様子が確認できる。
3. カスタムSKILL.mdの作成
エージェントが自動で発見・利用できるスキルをSKILL.mdとして定義できる。記述はMarkdownとYAMLフロントマターの組み合わせで、自然言語で振る舞いを指定するだけだ。
(custom / "SKILL.md").write_text(textwrap.dedent("""\
---
name: colab-csv-report
description: Turn any CSV into a short markdown report with summary stats,
null counts, dtypes, and 3 key observations. Use pandas; never plot.
---
# colab-csv-report
1. Load the CSV with pandas (`on_bad_lines="skip"` fallback).
...
"""))
このスキルを配置したディレクトリをOPENSPACE_HOST_SKILL_DIRSに指定しておくと、エージェントが実行時に自動検出する。
4. MCPサーバーの起動
MCP(Model Context Protocol)はAnthropicが主導するエージェント間通信の標準仕様で、Claude CodeやCursorなど対応ツールとの連携に使われる。OpenSpaceはstreamable HTTPトランスポートでMCPサーバーを立ち上げられる。
mcp_proc = subprocess.Popen(
["openspace-mcp", "--transport", "streamable-http",
"--host", "127.0.0.1", "--port", "8081"],
...
)
外部エージェントから接続するための設定JSONも記事中に掲載されており、delegate-taskやskill-discoveryといったホストスキルを通じてOpenSpaceのワークスペースにアクセスできる。
SQLiteで進化履歴を直接確認する
チュートリアルの終盤では、showcaseデータベースのoriginカラムを集計して、どのタイプのスキルが何件存在するかを確認する。
for origin, n in cur.execute(
f"SELECT origin, COUNT(*) FROM {t} GROUP BY origin ORDER BY 2 DESC"):
print(f" {origin:>10}: {n}")
60件超のスキル進化履歴を通じて、タスクの繰り返しによってFIX/DERIVED/CAPTUREDの比率がどう変化するかが観察できる。チュートリアルの締めくくりには「関連タスクを追加で実行するほどトークン使用量が下がっていく」という確認ポイントが示されているが、これはあくまでチュートリアル内での定性的な観察であり、特定条件下での削減率を保証するものではない点に留意してほしい。HKUDSはOpenSpaceのほかにも複数のエージェント基盤研究を手がけており、プロジェクトの継続性という観点では参考になる。
詳細はBuilding Self-Evolving AI Agents with OpenSpace Using Skills, MCP, Lineage, and Low-Cost Reuseを参照していただきたい。