Marqoとは

Marqoは、単なるベクトルデータベースではなく、エンドツーエンドのベクトル検索エンジンです。テキストと画像の両方に対応し、ベクトル生成、保存、検索をすべて単一のAPIで処理します。独自の埋め込みを用意する必要がなく、開発者フレンドリーな設計が特徴です。

主な特徴

統合型アーキテクチャ

  • オールインワンソリューション: ベクトル生成から検索まで一貫して処理
  • マルチモーダル対応: テキストと画像の両方をサポート
  • 自動埋め込み生成: 事前の埋め込み準備が不要
  • ドキュメントレベルの抽象化: 純粋なベクトルではなくドキュメントとして扱う

高度な検索機能

  • 複雑なセマンティッククエリ: 重み付けされた検索語の組み合わせ
  • フィルタリング: Marqo独自のクエリDSLによる結果フィルタリング
  • 検索可能属性: 特定のフィールドに限定した検索が可能
  • ハイブリッド検索: テンソル、レキシカル、ハイブリッドの3つの検索タイプをサポート

最新機能(2024-2025)

  • Stella埋め込みモデル対応: stella_en_400M_v5などの高性能モデルをサポート
  • FFmpeg-CUDA統合: GPU加速による動画処理(最大5倍高速化)
  • 動画・音声ファイルサイズ制限: 設定可能なファイルサイズ制限
  • Python 3.9対応: セキュリティと互換性の向上

メリット・デメリット

メリット

  • 埋め込み生成の手間が不要
  • シンプルなAPI設計で学習コストが低い
  • マルチモーダル対応で柔軟性が高い
  • クラウドとオンプレミスの両方で利用可能
  • 活発な開発とコミュニティサポート

デメリット

  • 純粋なベクトルデータベースより機能が限定的な場合がある
  • 特定のユースケースでは過剰な機能となる可能性
  • カスタム埋め込みモデルの柔軟性が制限される場合がある

主要リンク

インストール方法

Dockerを使用したインストール

# Dockerイメージの取得
docker pull marqoai/marqo:latest

# 既存のコンテナを削除(必要な場合)
docker rm -f marqo

# Marqoコンテナの起動
docker run --name marqo -it -p 8882:8882 marqoai/marqo:latest

Pythonクライアントのインストール

pip install marqo

使用例

基本的な使用方法

import marqo

# Marqoクライアントの作成
mq = marqo.Client(url='http://localhost:8882')

# インデックスの作成
mq.create_index("movies-index", model="hf/e5-base-v2")

# ドキュメントの追加
mq.index("movies-index").add_documents([
    {
        "Title": "マルコ・ポーロの東方見聞録",
        "Description": "13世紀の旅行記。ポーロの旅を記述"
    },
    {
        "Title": "宇宙服(EMU)",
        "Description": "EMUは環境保護を提供する宇宙服",
        "_id": "article_591"
    }
], tensor_fields=["Description"])

# 検索の実行
results = mq.index("movies-index").search(
    q="月面で着るのに最適な服装は?",
    searchable_attributes=["Description"]
)

# 結果の表示
for result in results['hits']:
    print(f"タイトル: {result['Title']}")
    print(f"説明: {result['Description']}")
    print(f"スコア: {result['_score']}")

画像検索の例

# 画像インデックスの作成
mq.create_index("image-index", model="open_clip/ViT-B-32/openai")

# 画像の追加
mq.index("image-index").add_documents([
    {
        "image_url": "https://example.com/image1.jpg",
        "caption": "美しい夕日の風景"
    },
    {
        "image_url": "https://example.com/image2.jpg",
        "caption": "都市の夜景"
    }
], tensor_fields=["image_url", "caption"])

# テキストで画像を検索
results = mq.index("image-index").search(
    q="夕暮れの景色"
)

統合とエコシステム

LangChain統合

from langchain_community.vectorstores import Marqo

# LangChainでMarqoを使用
vectorstore = Marqo(
    marqo_url="http://localhost:8882",
    marqo_api_key="",  # オプション
    index_name="langchain-demo"
)

Haystack統合

HaystackパイプラインでMarqoをドキュメントストアとして使用可能。検索拡張生成(RAG)、質問応答、ドキュメント検索などに活用できます。

まとめ

Marqoは、エンドツーエンドのベクトル検索を簡単に実現できる強力なツールです。埋め込み生成の手間を省き、テキストと画像の両方に対応することで、開発者の生産性を大幅に向上させます。クラウドサービスとセルフホスト版の両方が利用可能で、さまざまな規模のプロジェクトに対応できます。