はじめに
AIを活用した検索システムやレコメンデーションエンジンを構築する際、**テキストのベクトル化(Embeddings)と結果の再ランキング(Reranking)**は重要な処理工程です。本記事ではDockerを使い、2つのコアサービスを迅速に構築する方法を解説します:
-
Embeddings API:
multilingual-e5-large-instruct
モデルによるテキストベクトル生成 -
Rerank API:
bce-reranker-base_v1
モデルを用いた意味的関連性による並び替え
注意:OpenAI は Rerank API を提供していません。こちらは Rerank API は Dify用のために構築したものです。
これらのサービスを連携させることで、ベクトル検索による候補抽出と、意味的な精度向上を実現するパイプラインを構築できます。
環境準備
ハードウェア要件
- 推奨構成:16GBメモリ + NVIDIA GPU(CUDA対応)
ソフトウェア要件
- Docker
- NVIDIA Container Toolkit
- 空きポート:7965(Embeddings)、7987(Rerank)
デュアルサービスデプロイガイド
1. Embeddings APIのデプロイ
コンテナ起動
docker run -d --name embeddings-api \
-p 7965:7965 \
--gpus all \
engchina/embeddings-api:multilingual-e5-large-instruct
主要パラメータ
パラメータ | 説明 |
---|---|
--gpus all |
GPUアクセラレーション有効化 |
-p 7965:7965 |
サービス公開ポート |
2. Rerank APIのデプロイ
コンテナ起動
docker run -d --name rerank-api \
-p 7987:7987 \
engchina/rerank-api:bce-reranker-base_v1
サービス検証とテスト
共通確認方法
APIドキュメントにアクセス(起動約1分後):
- Embeddings API: http://localhost:7965/docs
- Rerank API: http://localhost:7987/docs
1. Embeddings APIテスト
リクエスト例
curl -X POST "http://localhost:7965/v1/embeddings" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-large",
"input": "OpenAI API互換性テスト",
"encoding_format": "float"
}' | jq
レスポンス特徴
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.015018302015960217,
0.020674465224146843,
0.006224486045539379,
-0.05334381014108658,
0.021632926538586617,
略
-0.029829557985067368,
-0.024390950798988342,
0.015266106463968754
],
"index": 0
}
],
"model": "text-embedding-3-large",
"usage": {
"prompt_tokens": 16,
"total_tokens": 16,
"completion_tokens": 0
}
}
2. Rerank APIテスト
リクエスト例
curl -X POST "http://localhost:7987/v1/rerank" \
-H "Content-Type: application/json" \
-d '{
"model": "rerank-multilingual-v3.0",
"query": "機械学習の学び方",
"documents": [
"深層学習入門チュートリアル",
"Python基本構文ガイド",
"機械学習実践ハンドブック"
],
"top_n": 3,
"return_documents": true
}' | jq
レスポンス解析
{
"results": [
{
"credentials": "set to no dict to skip update",
"index": 0,
"relevance_score": 0.4491826891899109,
"document": "深層学習入門チュートリアル"
},
{
"credentials": "set to no dict to skip update",
"index": 1,
"relevance_score": 0.3655696511268616,
"document": "Python基本構文ガイド"
},
{
"credentials": "set to no dict to skip update",
"index": 2,
"relevance_score": 0.565743625164032,
"document": "機械学習実践ハンドブック"
}
]
}
連携ワークフロー
典型的な適用シナリオ
ユーザークエリ → Embeddings API → ベクトルDB検索 → Rerank API → 最適化結果
連携呼び出し例
import requests
# ステップ1: ベクトル化
embedding_res = requests.post(
"http://localhost:7965/v1/embeddings",
json={"model": "text-embedding-3-large", "input": "推薦アルゴリズムの種類"}
).json()
vector = embedding_res['data'][0]['embedding']
print(vector)
# # ステップ2: ベクトルDB検索(疑似コード)
# candidates = vector_db.search(vector, top_k=50)
candidates = [
"富士山は綺麗です。",
"ABCを推薦します。",
"天気がいいですね。"
]
# ステップ3: 再ランキング
rerank_res = requests.post(
"http://localhost:7987/v1/rerank",
json={
"model": "bce-reranker-base_v1",
"query": "推薦アルゴリズムの種類",
"documents": candidates,
"top_n": 10
}
).json()
final_results = [(doc['document'], doc["relevance_score"]) for doc in rerank_res['results']]
print(final_results)
パフォーマンス最適化
-
GPUリソース割当:
docker run -d --gpus '"device=0,1"' # 特定GPU指定
-
サービスオーケストレーション:
# docker-compose.yml version: '3' services: embeddings: image: engchina/embeddings-api:multilingual-e5-large-instruct ports: ["7965:7965"] rerank: image: engchina/rerank-api:bce-reranker-base_v1 ports: ["7987:7987"]
FAQ
Q1 モデルのアップグレード方法
# 最新イメージ取得後に再起動
docker pull engchina/embeddings-api:multilingual-e5-large-instruct
docker restart embeddings-api
Q2 APIパフォーマンス監視
# ログ確認(最新100行)
docker logs -f embeddings-api --tail 100
まとめ
本手法により以下を迅速に構築可能:
- 即時利用可能なベクトル化サービス(7965ポート)
- 高精度な意味的再ランキングサービス(7987ポート)
AIアプリケーション開発の基盤として、ぜひご活用ください。