LangChainとOllama、オープンソース埋め込みで作るローカル商品レコメンドシステム
この記事では、LangChain、Ollama(ローカルLLM)、および**オープンソースの埋め込み(Embeddings)**を使い、
クラウドや外部API不要の「完全ローカル」な商品レコメンドエンジンを自作する方法を解説します。
このアプローチのメリット
- 顧客データが外部に出ない(プライバシー重視)
- API利用料がゼロ
- Llama 3やMistralなどオープンソースLLMがすぐ使える
- 柔軟性抜群(商品カタログ・FAQ・社内ナレッジにも応用可)
ソリューション全体像
仕組みは主に3つのコンポーネントから成り立ちます:
- SentenceTransformers:商品の意味情報をベクトル化
- Chroma:ローカルで動くベクトルDB(高速検索)
- Ollama:ローカルLLMサーバー(Llama 3、Mistralなど)
データフロー図
flowchart TD
U["ユーザーの質問<br/>(例:『女性用の防水ランニングシューズが欲しい』)"]
Q["LangChain<br/>類似検索"]
V["Chromaベクトルストア<br/>+埋め込み"]
P["商品データ<br/>(JSON, CSV, DB)"]
R["該当商品"]
LLM["Ollama LLM<br/>(Llama 3, Mistral など)"]
A["最終レコメンド<br/>(チャットボット応答)"]
U --> Q
Q --> V
V -->|最も近い候補| R
R --> LLM
LLM --> A
P --> V
流れの概要:
- ユーザーが自然言語で検索
- LangChain+Chromaが埋め込み検索で商品候補を抽出
- 候補リストをOllama LLMに渡し、自然な説明・推薦文を生成
実装ステップ
1. 商品データを用意する
たとえばJSON形式で:
[
{
"id": "1",
"name": "Nike Pegasus 39",
"description": "女性向けの防水ランニングシューズ",
"category": "ランニングシューズ",
"tags": ["防水", "ランニング", "女性"]
}
]
2. 必要なライブラリをインストール
pip install langchain-community langchain-core chromadb sentence-transformers ollama
Ollama公式サイトの手順でOllamaをインストールし、
例:ollama pull llama3
でモデルをダウンロードしてください。
3. Pythonサンプルコード
from langchain_community.llms import Ollama
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import SentenceTransformerEmbeddings
import json
# 商品データを読み込み
with open('products.json', encoding='utf-8') as f:
products = json.load(f)
texts = [p['description'] for p in products]
metadatas = [{"id": p["id"], "name": p["name"], "category": p["category"], "tags": p["tags"]} for p in products]
# 埋め込みを生成
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
# ベクトルストア作成
vectorstore = Chroma.from_texts(texts, embeddings, metadatas=metadatas)
# 商品検索
query = "女性向けの防水ランニングシューズ"
results = vectorstore.similarity_search(query, k=2)
print("おすすめ商品:")
for r in results:
print("-", r.metadata['name'], "|", r.page_content)
# LLM(Ollama)で推薦文を生成
llm = Ollama(model="llama3")
context = "\n".join([f"{r.metadata['name']}: {r.page_content}" for r in results])
user_question = f"この中から、女性向けの防水ランニングシューズとしておすすめを教えてください。\n\n{context}"
response = llm.invoke(user_question)
print("\nチャットボットの回答:")
print(response)
仕組みのポイント
- 意味ベース検索:キーワードだけでなく文脈・意味で検索
- ChromaベクトルDB:ローカル&高速
- Ollama LLM:自然な推薦文を自動生成
さらに発展するには?
- 商品情報(メタデータ)を増やしリッチな回答へ
- WebのチャットUIやLINEボット等と連携
- OllamaでさまざまなLLMを試す(Mistral、Phi、Gemmaなど)
あなたのECサイトを、クラウドレス&完全自社管理AIで進化させよう!
この仕組みなら、無料&プライバシーフレンドリー。
質問や実装サポートもお気軽にご連絡ください!
Get in Touch with us
Related Posts
- 2025年版:主要モバイルアプリフレームワーク徹底比較(Flutter、React Native、Expo、Ionic ほか)
- NumPy の `np.meshgrid()` を徹底解説:なぜ必要なのか?順序を入れ替えるとどうなるのか?
- PyMeasure を使って実験装置を自動制御する方法
- チャットボットを強化しよう:業務システムと連携するAPI開発サービス
- 今注目の「日本語対応Rasaチャットボットガイド」が話題の理由と、その活用方法
- 数学なしで「方程式」を推測する方法:猫と鳥の個体数の関係を探る
- AIに負けないプロジェクトの作り方:人とのつながりで価値を生むアイデア
- GNS3 + Wazuh + Dockerでサイバーセキュリティ演習ラボを構築しよう
- GNS3を使ってネットワーク機器の構成をシミュレーション&トレーニングする方法
- LMSとは?そしてなぜFrappe LMSに注目すべきか
- 工場における Agentic AI:スマートで自律的な次世代製造
- EVバイクをもっとスマートに、安全に管理する:ジオフェンシングとリアルタイム追跡システム
- FastAPI で Google OAuth を使った Single Sign-On (SSO) を実装する方法
- Simplicoで始めるタクシー配車アプリ開発:スケーラブル、安全、即スタート可能!
- 拡張性のあるEV充電ステーション管理システムのバックエンド設計 — Simplicoによる開発
- Odooで受注生産商品の複雑な価格設定をどう扱う?
- オーダーメイド商品を効率的に提供する「Made-to-Order」システムの作り方
- Agentic AIで業務を自動化・効率化:次世代の業務支援AIがもたらす変革
- 軽量EXFO管理パネルで光ファイバーテスト業務を効率化
- MEEPとPythonで実現するEMI対策