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
- AIが実現する病院システムの垂直統合(Vertical Integration)
- Industrial AIにおけるAIアクセラレータ なぜ「チップ」よりもソフトウェアフレームワークが重要なのか
- 日本企業向け|EC・ERP連携に強いAI×ワークフロー型システム開発
- 信頼性の低い「スマート」システムが生む見えないコスト
- GPU vs LPU vs TPU:AIアクセラレータの正しい選び方
- LPUとは何か?日本企業向け実践的な解説と活用事例
- ソフトウェアエンジニアのためのサイバーセキュリティ用語マッピング
- モダンなサイバーセキュリティ監視・インシデント対応システムの設計 Wazuh・SOAR・脅威インテリジェンスを用いた実践的アーキテクチャ
- AI時代におけるクラシック・プログラミングの考え方
- SimpliPOSFlex 現場の「現実」に向き合うためのPOS(日本市場向け)
- 古典的プログラミング思考 ― Kernighan & Pike から学び続けること
- コードを書く前に:私たちが必ずお客様にお聞きする5つの質問
- なぜ利益を生むシステムでも「本当の価値」を持たないことがあるのか
- 彼女の世界(Her World)
- Temporal × ローカルLLM × Robot Framework 日本企業向け「止まらない・壊れない」業務自動化アーキテクチャ
- RPA × AI: なぜ「自動化」は知能なしでは破綻し、 知能は制御なしでは信頼されないのか
- 国境紛争・代理戦争をどうシミュレーションするか
- 検索とアクセスを最初に改善する 大学図書館の戦略的価値を最短で回復する方法
- 工場とリサイクル事業者をつなぐ、新しいスクラップ取引プラットフォームを開発しています
- Python で MES(製造実行システム)を開発する方法 ― 日本の製造現場に適した実践ガイド ―













