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