LangChainとOllama、オープンソース埋め込みで作るローカル商品レコメンドシステム

この記事では、LangChainOllama(ローカル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

流れの概要:

  1. ユーザーが自然言語で検索
  2. LangChain+Chromaが埋め込み検索で商品候補を抽出
  3. 候補リストを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

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products