2025年12月19日
RAG
RAG構築: OpenAIとOllamaでの構築の違いと注意点
RAG(Retrieval-Augmented Generation)システムを構築する際、Embeddingモデルの選択は、システムの性能、コスト、運用体制に大きな影響を与える重要な意思決定です。本記事では、OpenAI APIとOllama(ローカルLLM)それぞれでRAGを構築する際の実装上の違いと、実際のプロダクション環境で直面する課題について解説します。

RAG(Retrieval-Augmented Generation)システムを構築する際、Embeddingモデルの選択は、システムの性能、コスト、運用体制に大きな影響を与える重要な意思決定です。本記事では、OpenAI APIとOllama(ローカルLLM)それぞれでRAGを構築する際の実装上の違いと、実際のプロダクション環境で直面する課題について解説します。
Embeddingモデルの選択
OpenAI API
OpenAIではtext-embedding-3-smallが現在の推奨モデルです。主な特徴は以下の通りです:
- 次元数: 1536次元(
dimensionsパラメータで256~1536の範囲で調整可能) - コスト: )
- 性能: MTEB(Massive Text Embedding Benchmark)で高いスコアを記録
- コンテキスト長: 8,191トークンまで対応
次元数を削減することで、ベクトルDBのストレージコストを抑えつつ、検索性能の大幅な低下を避けることができます。例えば、512次元に削減しても、多くのユースケースで実用的な精度を維持できます。
Ollama(ローカルLLM)
Ollamaでは以下のオープンソースモデルが利用可能です:
- nomic-embed-text: 768次元、コンテキスト長8,192トークン
- mxbai-embed-large: 1024次元、高精度だがリソース消費大
- all-minilm: 384次元、軽量で高速
ローカル実行のため、API利用料が発生せず、データの外部送信が不要という利点があります。医療・金融などの機密性の高いデータを扱う場合、特に有効です。
バッチ処理の実装上の違い
最も注意すべき違いは、Embedding生成時のバッチ処理の仕組みです。
OpenAI APIの実装
OpenAIはバッチAPIをサポートしており、複数テキストを1回のAPI呼び出しで処理できます: