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
- コーディング向けLM Studioの調整方法:`top_p`、`top_k`、`repeat_penalty`を理解する
- 工場向けリサイクル管理システム:スクラップ販売をもっと簡単・透明に
- ユースケースをお客様の言葉で書く方法
- AIバブルの後に残るもの:ゲームコンソールとローカルAIが真の約束
- SVマトリックスでRE102とRS103をつなぐ ― 船舶におけるEMC分析
- 危機のあとに信頼を取り戻すテクノロジーの力
- 美容クリニックの未来を変えるモバイルアプリ
- AIで進化するEC体験:画像解析・翻訳・クロスセルの新時代
- TAKシステムが洪水災害対応を変革する
- 写真から商品をおすすめ:AIで実現するスマートショッピング
- 高度なシミュレーションプログラムでアンテナ結合の課題に取り組む
- 未来の働き方:オープンソースが切り拓く労働省力化オートメーション
- 次なるフロンティア:富裕層のためのデジタル・プライベートクラブ
- コードで「よりよく考える」:数学的ショートカットで大規模ソフトウェアを理解する
- 今日のMacrohardをつくる:企業向けAIエージェント・プラットフォーム
- Aider × IDE連携で Vue.js 開発を一気にスマートに!
- ねぇ開発者さん!Codex CLI や Aider で AIにコーディング手伝ってもらおうぜ
- 正しい方法でAIと共にコーディングする
- 最適なLLMモデルの選び方: Instruct・MLX・8-bit・Embedding
- ローカル LLM モデルを日常業務で活用する方法