0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでOpenAI互換のEmbedding & Rerank APIサービスを高速構築

Posted at

はじめに

AIを活用した検索システムやレコメンデーションエンジンを構築する際、**テキストのベクトル化(Embeddings)結果の再ランキング(Reranking)**は重要な処理工程です。本記事ではDockerを使い、2つのコアサービスを迅速に構築する方法を解説します:

  1. Embeddings APImultilingual-e5-large-instructモデルによるテキストベクトル生成
  2. Rerank APIbce-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分後):

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)


パフォーマンス最適化

  1. GPUリソース割当
    docker run -d --gpus '"device=0,1"' # 特定GPU指定
    
  2. サービスオーケストレーション
    # 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アプリケーション開発の基盤として、ぜひご活用ください。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?