はじめに
Difyにモデルプロバイダーを統合する上で、OllamaはLLMとText Embeddingのみのようだけど、Xinferenceはこれに加えてRerank, Speech-to-Text, Text-to-Speechもサポートしている様子。
Xinference経由で標準モデル以外を入れたい、日本語特化モデルが無いしね。
どうやらRegister modelから登録できるようだけどドキュメントが見当たらない。公式を参考にするしかないか。
公式ドキュメント > Models > Custom Models
モチベーション
- LLM, Embedding, Rerankをすべて日本語モデルでRAGを構築したい
- GGUF形式以外のモデルも使えるようにしたい
- huggingfaceの膨大な公開モデルから自由に選択したい
JSONの用意
名大 笹野研のRuriが良いようなので、ありがたく使わせて頂きます。
hppさんの記事: Ruri: 日本語に特化した汎用テキスト埋め込みモデル
ぬこぬこさんの記事: 日本語の高性能な文埋め込みモデルを試す
LLMは前回いれたcyberagentが日本語でファインチューニングしたDeepSeek-R1のまま。
公式によるとURLの記述がなかったらmodel_idでhuggingfaceのリポジトリを読みに行くそうな。なんて素晴らしいんだ!!
ファイル形式に指定はないのかな。
model_id: A string representing the model ID, possibly referring to an identifier used by Hugging Face. If model_uri is missing, Xinference will try to download the model from the huggingface repository specified here..
とりあえずJSONにhuggingfaceのモデルを書いて準備する。
Embedding model
{
"model_name": "ruri-large",
"model_type": "embedding",
"model_id": "cl-nagoya/ruri-large",
"dimensions": 1024,
"max_tokens": 512,
"language": [
"ja"
]
}
model_typeをembeddingにして、dimとmax tokenは公式の数値を指定しています。
model_idはhuggingfaceのリポジトリ名とモデル名を入れる。
Rerank model
Rerankも同じ要領で、typeをnormalに指定するくらい。
{
"model_name": "ruri-reranker-large",
"type": "normal",
"model_id": "cl-nagoya/ruri-reranker-large",
"language": [
"ja"
]
}
xinferenceのコンテナにモデルを登録
前回 docker composeで起動しておいたxinferenceコンテナにjsonを入れてCLIで登録を実行します。
まずはEmbedding model
- JSONをコピー
docker cp ruri-large.json xinference:/ruri-large.json
- コンテナの外(ホスト)から登録を試みる
docker exec -it xinference xinference register --model-type embedding --file /ruri-large.json --persist
次にRerank model
- JSONをコピー
docker cp ruri-reranker-large.json xinference:/ruri-reranker-large.json
- コンテナの外(ホスト)から登録を試みる
docker exec -it xinference xinference register --model-type rerank --file /ruri-reranker-large.json --persist
登録したモデルをロード(Launch)
Launch Model > CUSTOM MODELS > EMBEDDING MODELS / RERANK MODELS に追加されました。
Launch時はDifyに渡すModel UIDをちゃんと書きましょう。
CLIでlaunchする方法は公式ドキュメントに記載があります。
WebアプリからではなくCLIでコンテナの外(ホスト)からLaunchする場合
docker exec -it xinference xinference launch -n ruri-large -t embedding
docker exec -it xinference xinference launch -n ruri-reranker-large -t rerank
Dify
Difyの管理ページに移って、前回と同様にServer urlとModel UIDに注意してモデルプロバイダーから登録します。
jina-embeddingとbge-rerankerがまだ残ってますが、ひとまず連携完了。
おわりに
以上で、日本語DeepSeek-R1に日本語特化Embeddin, RerankでRAGを構築する準備が整いました。
前回の組み合わせより賢くなってる気がする(不要な前置きが無くなって完結に返事してくれてる気がする)。
※ Dify + Xinferenceで用意できるのでollamaは不要かもしれないが、VRAMの管理をみて検討します。