Plex で最近視聴した映画を RAG を利用した LLM チェーンにフィードして、視聴履歴に基づいたおすすめを取得します。
次の 2 つのものが必要です。
preferences.xml
ファイルにあります。私は Package Center を使用して Synology NAS 上で Plex を実行しているので、 /PlexMediaServer/AppData/Plex Media Server/Preferences.xml
に私のものを見つけました。これらの両方をPLEX_ADDRESS
環境変数とPLEX_TOKEN
環境変数に指定します。
初回起動時に、システムは Plex ライブラリが Vector データベースに保存されているかどうかを検出します。そうでない場合は、メディアが取得されます。 PLEX_DEFAULT_LIBRARY_SECTION
環境変数を介してメディアをダウンロードするデフォルトのライブラリを提供する必要があります。これを取得するには、自分で Plex にクエリを実行する必要がありますが、私の映画はセクション 3 にあります。提供されない場合は、このセクションに戻ります。
このレコメンデーション エンジンは Ollama に接続します。独自のものを持ち込むことも、クラウド上で実行することもできます。 OLLAMA_ADDRESS
、 OLLAMA_EMBEDDING_MODEL
、およびOLLAMA_LANGUAGE_MODEL
を環境変数として指定するだけです。
RAG プロンプトはbackend/internal/pkg/langchain/generate.go
にあります。これは私の特定のニーズに合わせて書かれています。あなたのニーズが私のニーズと異なる場合は、それに応じてグラウンディング プロンプトを調整してください。非常に大規模なメディア コレクションがある場合は、使用しているモデルのコンテキスト ウィンドウを超える可能性があることに注意してください。 backend/internal/pkg/plex/api.go
のメディアゲッターに渡される制限を調整することで、取得するタイトルの量を調整できます。
このリポジトリをダウンロードし、 go build -o recommendations .backend/cmd/main.go
を使用してアプリをビルドします。これにより、 ./recommendations
で実行できるrecommendations
というバイナリが構築されます。
Postgres データベースは./pg-data
に接続されており、推奨事項をキャッシュするために使用されます。最近視聴したタイトルは Base-64 でエンコードされ、LLM によって提供される正規化された推奨とともに保存されます。このキャッシュは、LLM 推奨をリクエストする前に検索され、見つかった場合はそのまま返されます。
デフォルトの Postgres 環境は次のとおりです。
POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
POSTGRES_DB=caches
POSTGRES_PORT=5432
POSTGRES_HOST=postgres
これらの環境変数に独自の値を指定することで、これをオーバーライドできます。
このリポジトリのルートにdocker-compose.yml
ファイルがあります。 TAG_VERSION=foo docker compose up --build
コマンドを発行すると、レコメンデーション エンジンと関連する Weaviate データベースを実行できます。 Docker と Docker Compose がインストールされていることを確認してください。
内部パッケージにはいくつかのテストがあり、ほとんどすべて LLM によって作成されています。このリポジトリのルートからgo test ./...
を使用してこのプログラムをテストできます。これらのテストは、Docker でビルドするときに自動的に実行されます。
オープン テレメトリ トレースはバックエンドに組み込まれています。これをそのまま使用するには、環境でOTEL_EXPORTER_OTLP_TRACES_ENDPOINT=otlp://jaeger:4317
を設定し、Jaeger サービスが Docker Compose から開始されるようにします。トレースは Jaeger に収集され、 http://localhost:16686
からアクセスできます。メトリクスは、 telemetry.WithMeter
オプションtelemetry.InitOtel()
を渡すことで拡張できます。メトリクスを自分で計測する必要があります。
環境でDISABLE_TELEMETRY=true
を設定すると、テレメトリを無効にできます。 docker compose up
使用している場合でも、Jaeger コンテナーは起動することに注意してください。