本文へスキップ
ReviewRamble

週刊ブリーフ

AIのレビューを、あなたの受信箱に。

  • ツール、モデル、MCPサーバー、リポジトリの新しいレビュー(結論を最初に)
  • 変更があったときに再確認した価格と評価
  • 公開された新しい分析記事

モデル、エージェント、MCPサーバー、そして本当に時間をかける価値のあるツール。

週に1通です。配信停止は各メールのリンクからできます。 メールアドレスの利用について

分析 コーディング

SurrealDBのレビューとインストールガイド:AIとエージェントのアプリのための1つのデータベース

執筆: Andrew Miller ·

アーカイブ記事です。 2025年8月に執筆されたもので、その後、料金やモデル、機能が変わっている可能性があります。最新の状況はおすすめのベクトルデータベースをご覧ください。

物事を覚えておくAIアプリは、たいてい3つのデータベースを抱えることになります。ユーザーとセッション用、文書用、そして検索用の別のベクトルストアです。SurrealDBは、ドキュメント、グラフ、リレーショナル、ベクトル、地理空間、時系列のデータを1か所に置く、オープンソースのマルチモデルデータベースです。ローカルファーストのアプリ、エージェントのワークフロー、言語モデルのバックエンドを作る開発者に向いています。

このガイドでは、何が違うのか、ローカルでのインストールと起動の方法、そしてOllamaで配信するモデルとの使い方を説明します。オープンソースのLLMを使ったローカルの開発環境をもとにまとめたもので、その記録によれば、すぐに動かせて扱いも簡単でした。

AIアプリケーションに向いている理由

SurrealDBは、1つのデータベースで複数の種類のデータを扱います。

  • ユーザーやセッションのような構造化されたメタデータのためのリレーショナルのテーブル
  • 関係や入れ子の内容のためのドキュメントとグラフ
  • 検索拡張生成(RAG、モデルが答える前に関連する文章を調べる仕組み)での類似検索のためのベクトル
  • 組み込み型または分散型のデプロイ

そのため、チャットボットの記憶、オープンソースの埋め込みモデルを使ったRAGのパイプライン、エージェントの状態の管理、そしてマシンの外に出ないプライベートなデプロイに合っています。

仕組み

これらのデータモデルはすべて、SQLに似た1つの言語SurrealQLで問い合わせ、データの種類や関係をまたいだクエリを扱えます。幅広さの割に軽量で、ノートパソコンで快適に動き、アプリに組み込むこともでき、クラスターにスケールアウトすることもできます。

設計では、計算とストレージを分けています。

  • クエリ層は、クエリを解析して実行し、トランザクションを管理します。
  • ストレージ層では、異なるエンジンを使えます。
    • 組み込み、インメモリでの利用にはRocksDB、
    • 分散構成にはTiKV、
    • ブラウザで動くアプリにはIndexedDB。

この分割のおかげで、同じクエリとロジックが1台のマシンでも分散システムでも動きます。SurrealDBは、アプリの背後のデータベースとしても、認証と権限を備えた完全なバックエンドサービスとしても、デスクトップやブラウザで動くAIエージェントに組み込んでも使えます。

ステップ1:SurrealDBをインストールする

UbuntuやほかのLinuxディストリビューションでは:

curl -sSf https://install.surrealdb.com | sh

バイナリをパスの通った場所に移します。

sudo mv surreal /usr/local/bin/

インストールされたか確認します。

surreal version

次のように表示されるはずです。

surreal 1.0.0-beta.9 (linux-x86_64)

ステップ2:ローカルで起動する

開発とテスト用に、インメモリで:

surreal start --log debug --user root --pass root memory

データをディスクに保存する場合:

surreal start --log debug --user root --pass root file:/path/to/data

初期設定では、HTTPのポート8000で待ち受けます。

ステップ3:Pythonから接続する

クライアントをインストールします。

pip install surrealdb

最小限の例:

from surrealdb import Surreal
import asyncio

async def run():
    db = Surreal()
    await db.connect("http://localhost:8000/rpc")

    # Sign in
    await db.signin({"user": "root", "pass": "root"})
    await db.use("test", "test")

    # Create a document
    await db.query("CREATE message CONTENT { text: 'Hello from SurrealDB!' }")

    # Query it back
    results = await db.query("SELECT * FROM message")
    print(results)

asyncio.run(run())

ステップ4:ベクトルを保存する

Ollamaで配信するものやHugging Faceのものなど、どのモデルの埋め込みでも保存できます。この例ではOpenAIの埋め込みを使います。

from openai import OpenAI
import numpy as np

# Assume you have your API key and text
response = openai.Embedding.create(
    input="This is a sample text",
    model="text-embedding-ada-002"
)
embedding = response['data'][0]['embedding']

await db.query("CREATE vector_doc CONTENT { id: 'doc1', text: 'This is a sample text', embedding: $embedding }", {"embedding": embedding})

その後、使っているバージョンが対応していれば、SurrealQLでコサイン類似度による絞り込みができます。

例:記憶を持つローカルのチャットボット

Ollamaでローカルのモデルを配信します。

ollama run llama3

チャットボットは次のように動きます。

  1. Ollamaがユーザーのメッセージを処理し、モデルが返答と要約を書きます。
  2. 要約を埋め込みに変換し、SurrealDBに保存します。
  3. チャットボットが再起動すると、ベクトルの類似度で過去の会話を探し、プロンプトに加えます。

記録によると、この基本的な形でもデータベースからの想起は速く正確で、外部のAPIを呼ばずに物事を覚えておく必要があるエージェントやアシスタントにとって、SurrealDBは妥当な選択になります。

使ってみた感触

  • 設定が速い:インストール、起動、接続まで5分未満です。
  • 有能なスキーマの仕組み:ドキュメントの型、インデックス、制約、関係をデータベース自体の中で定義できます。
  • ベクトルを内蔵:Pinecone、Qdrant、その他の独立したベクトルデータベースは不要です。
  • プロトタイプに向く:インメモリのモードなら、クラウドのインフラを用意せずにアイデアを試せます。
  • 複数の言語のSDK:ここではPythonを使っていますが、Node.js、Rust、Goなどのクライアントもあります。
  • 完全オフライン:クラウドに依存せずローカルで動くため、プライバシーに配慮が必要な仕事、エッジ、規制のある分野に役立ちます。

注意点:このガイドはベータ版(1.0.0-beta.9)をもとに書いており、SurrealQLでのベクトルの類似検索は使っているバージョン次第でした。RAGのシステムをこれを中心に計画する前に、手元のビルドが何に対応しているか確認してください。

結論:AIのプロジェクトで本来ならリレーショナルデータベースとベクトルストアを並べて使う必要があるなら、SurrealDBでは1つのローカルのプロセスで両方の仕事をこなせます。そして設定が手早いので、これでプロトタイプを作る費用はごくわずかです。

コードはGitHubにあります。このようなデータベースの上で動くエージェントのオーケストレーションについては、Kiroのレビューをご覧ください。

Kiroのウェブサイトのスクリーンショット
Kiroの公式サイト

ReviewRambleブリーフ

AIをレビュー。週に一度、あなたの受信箱に。

AI、ロボティクス、テックの重要な評価を、使うべきもの、避けるべきものとあわせてお届けします。誇張も、すべてを並べただけのまとめもありません。

モデル、エージェント、MCPサーバー、そして本当に時間をかける価値のあるツール。

週に1通です。配信停止は各メールのリンクからできます。 メールアドレスの利用について