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
- 工場・製造業向け Python 開発&トレーニングサービス
- Python + Django がモダンな eコマース開発に最適な理由(完全ガイド + 料金プラン付き)
- 中国ビジネス戦略「三十六計」:中国企業の思考・競争・交渉術を理解するための現代版ガイド
- Training・Validation・Test を理解する
- ニューラルネットワークを深く理解する
- AIによる真贋判定システム:現代のリテールブランド向け最新ソリューション
- 永遠の知恵:実験物理学者のように「考える」ための本
- SimpliBreakout:世界市場対応のブレイクアウト&トレンドスクリーナー
- SimpliUni:大学生活をスマートにするキャンパスサービスアプリ
- Pythonでマルチマーケット株式ブレイクアウトスクリーナーを作る
- Agentic AI と MCP サーバー:インテリジェント・オートメーションの次なる進化
- Django + DRF + Docker + PostgreSQL を使った EC システムにおける DevOps の活用
- AIがアジャイル開発の課題をどのように解決するか
- TAKとWazuhを連携し、リアルタイムの脅威認識を実現する
- Wazuhによるマルチサイト・ネットワークセキュリティ監視のスケーリング
- なぜERPプロジェクトは失敗するのか ― 成功のための10のポイント
- テクノロジーで強いコミュニティをつくる方法
- AIがオープン動物園をもっと楽しく、スマートで学びのある場所に変える
- 工場スクラップのための最適なリサイクル工場を選ぶ方法
- 現代のデータベース技術を理解する — 最適なデータベースの選び方













