1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rustで鍛え、思考で動く:LLMを組み込んだカスタムデータベースを構築しました

Posted at

AIファーストなアーキテクチャが広がる中で、構造化データと非構造化データの境界は急速に薄れつつあります。私たちは東京の小さな開発チームとして、こう自問しました。

「もし、データベースが“保存”するだけじゃなく、“理解”できたら?」

そこで私が構築したのがこのデータベースエンジンです。Rustでゼロから書かれたインテリジェントなエンジンは、バックエンドにPostgreSQLの堅牢さを持ちつつ、NoSQLのように柔軟に振る舞い、さらにLLMによる“思考”を備えています。

考えるデータベースを作る旅へようこそ。


🛠 なぜ新しいデータベースを作ったのか?

PostgreSQLは素晴らしいデータベースですが、従来のRDBMSの枠では、現代的な開発のニーズを満たしきれないと感じました。

  • スキーマレスで自然言語にも強いインターフェース
  • 構造化+意味ベースのハイブリッド検索
  • ボイラープレート不要のRAG(生成強化検索)機能
  • ローカルかつセキュアなAI推論の統合

既存RDBMSに複雑な機能を無理やり後付けするのではなく、Postgresの信頼性はそのままに、自然言語とAIを前提とした新しいレイヤーを設計しました。


🚀 技術構成:Rust, PostgreSQL, k3s, LLM(ローカル推論対応)

  • エンジンコア:Rustで構築し、パーサ・最適化ロジック・LLMパイプラインもネイティブ実装
  • ストレージ層:PostgreSQLが永続化とインデックス処理(JOINやベクトル検索も)を担う
  • LLM統合:OllamaやGemma 3BなどのLLMをコンテナで組み込み、k3sで軽量運用
  • クエリレイヤー:LLMが自然言語からSQL(JOINやネストも対応)を自動生成

🧠 ユースケース①:自然言語クエリ(JOINも自動生成)

ユーザーはSQLを書く必要はありません。自然言語でデータを問い合わせると、LLMが内部で最適なSQLに変換して実行します。

「先月東京で購入した顧客で、それ以降購入していない人をリストアップして」

→ 複数テーブルのJOINと日付条件を含むSQLに変換して、PostgreSQLにクエリされます。

異常検知、ログとの結合、メタ情報での絞り込みなど、高度なクエリも直感的に扱えます。


🧩 ユースケース②:RAG(生成強化検索)のネイティブ対応

このエンジンは標準でRAGワークフローに対応:

  • ドキュメントをベクトル化して埋め込みとして保存
  • セマンティックに意味でフィルタリング
  • トップKをLLMアプリのプロンプトに供給

k3s上で定期的に埋め込みやメタデータを更新するジョブも動いており、
「2024年以降にJeanePaulが書いたドキュメントだけ抽出して」などのハイブリッド検索も可能です。

チャットボット、FAQ検索、ナレッジベース、エージェント向けなどに最適です。


🧪 ユースケース③:AIによるデータ自動生成

テスト用データや欠損値の補完にも対応:

  1. 欠損・未入力パターンの自動検出
  2. LLMに状況文脈を渡して入力を生成
  3. 合成されたリアルなデータをテーブルに挿入

テスト・シミュレーション・初期オンボーディングのスピードが劇的に向上します。


💡 フロントエンド開発者向け:使いやすさと互換性

このエンジンは、ドキュメントストアのようにも使えるし、必要ならPostgreSQLの機能も全開で使えます。

  • JOIN、トランザクションも対応
  • PostgreSQL拡張や全文検索も可能
  • ベクトル+構造化ハイブリッド検索もOK

🦀 Rust(擬似コード)

let result = db.query("東京在住で有効なサブスク利用者を全件取得", {
  limit: 50,
  embeddings: true
});

🟦 TypeScript

async function queryDatabase(nlQuery: string) {
  const response = await fetch('http://your-db-api.local/query', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ prompt: nlQuery })
  });

  const result = await response.json();
  console.log('Query Result:', result);
}

queryDatabase("過去30日以内に東京で購入した全アクティブユーザーを取得");

🟨 JavaScript

async function uploadDocument(doc) {
  const response = await fetch('http://your-db-api.local/documents', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      content: doc,
      metadata: { source: "website", category: "product_manual" }
    })
  });

  const data = await response.json();
  console.log('Upload Successful:', data);
}

uploadDocument("QuickStart VX-200は12Vの入力が必要です。...");

🔭 今後の展望

  • WebAssemblyでのインライン推論対応
  • CLI Copilotによるクエリデバッグ支援
  • コア機能のOSS化(ドキュメントとDX最重視)を計画中

🧬 最後に

これは、既存のDBにAIプラグインを付けただけの話ではありません。
自然言語で話しかけ、データが思考する——そんな未来をRustとPostgreSQL、そしてLLMの力で創りました。

これはただのデータベースではありません。
これは、あなたの“思考”と“データ”の橋渡しです。

📅 発表: Coming Soon

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?