Build a Local Product Recommendation System with LangChain, Ollama, and Open-Source Embeddings
In this post, you’ll learn how to create a fully local, privacy-friendly product recommendation engine for your e-commerce site using LangChain, Ollama (for LLMs), and open-source embeddings. No OpenAI API or external cloud needed—run everything on your machine or private server!
Why This Approach?
- Keep your customer data private
- Zero API cost—no pay-per-call fees
- Use powerful open-source LLMs (like Llama 3, Mistral)
- Flexible: works for product catalogs, FAQs, or any knowledge base
Solution Overview
We combine three key components:
- SentenceTransformers for generating semantic product embeddings.
- Chroma for efficient local vector search.
- Ollama to run LLMs (like Llama 3) locally, generating human-like recommendations.
Data Flow Diagram
Here’s how data flows through the system:
flowchart TD
U["User Query<br/>(e.g., 'waterproof running shoe for women')"]
Q["LangChain<br/>Similarity Search"]
V["Chroma Vector Store<br/>+ Embeddings"]
P["Product Data<br/>(JSON, CSV, DB)"]
R["Relevant Products"]
LLM["Ollama LLM<br/>(Llama 3, Mistral, etc.)"]
A["Final Recommendation<br/>(Chatbot Response)"]
U --> Q
Q --> V
V -->|Top Matches| R
R --> LLM
LLM --> A
P --> V
Flow:
- User enters a query.
- LangChain searches for the most relevant products using embeddings and Chroma.
- The matched products are passed to the LLM (via Ollama) to generate a friendly, personalized recommendation.
Step-by-Step Implementation
1. Prepare Product Data
Format your product catalog in a structured format like JSON:
[
{
"id": "1",
"name": "Nike Pegasus 39",
"description": "Waterproof women's running shoe",
"category": "Running Shoes",
"tags": ["waterproof", "running", "women"]
},
...
]
2. Install Required Packages
pip install langchain-community langchain-core chromadb sentence-transformers ollama
Make sure Ollama is installed and running with your chosen model (e.g., ollama pull llama3).
3. Python Code: Bringing It All Together
from langchain_community.llms import Ollama
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import SentenceTransformerEmbeddings
import json
# Load product data
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]
# Generate embeddings
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
# Build vector store
vectorstore = Chroma.from_texts(texts, embeddings, metadatas=metadatas)
# User query
query = "waterproof running shoe for women"
results = vectorstore.similarity_search(query, k=2)
print("Recommended products:")
for r in results:
print("-", r.metadata['name'], "|", r.page_content)
# LLM: Generate final recommendation
llm = Ollama(model="llama3")
context = "\n".join([f"{r.metadata['name']}: {r.page_content}" for r in results])
user_question = f"Which of these products would you recommend for a woman who needs waterproof running shoes?\n\n{context}"
response = llm.invoke(user_question)
print("\nChatbot answer:")
print(response)
How Does It Work?
- Semantic Search: When the user asks for a product, we don’t just do keyword search—we find the closest matches in meaning using embeddings.
- Chroma Vector DB: Handles fast, efficient similarity search on your local machine.
- Ollama LLM: Receives the search results and generates a natural, human-like reply that feels like a real product expert.
What’s Next?
- Add more product metadata for richer answers.
- Connect this backend to your website’s chat UI.
- Swap in different LLMs with Ollama—try Mistral, Phi, Gemma, etc.
Ready to supercharge your e-commerce with open-source AI—without sending data to the cloud?
Try this setup, and your customers will enjoy smarter, more personal recommendations with full privacy and control.
Got questions or want more features? Leave a comment or contact me!
Get in Touch with us
Related Posts
- 她的世界
- Her World
- Temporal × 本地大模型 × Robot Framework 面向中国企业的可靠业务自动化架构实践
- Building Reliable Office Automation with Temporal, Local LLMs, and Robot Framework
- RPA + AI: 为什么没有“智能”的自动化一定失败, 而没有“治理”的智能同样不可落地
- RPA + AI: Why Automation Fails Without Intelligence — and Intelligence Fails Without Control
- Simulating Border Conflict and Proxy War
- 先解决“检索与访问”问题 重塑高校图书馆战略价值的最快路径
- Fix Discovery & Access First: The Fastest Way to Restore the University Library’s Strategic Value
- 我们正在开发一个连接工厂与再生资源企业的废料交易平台
- We’re Building a Better Way for Factories and Recyclers to Trade Scrap
- 如何使用 Python 开发 MES(制造执行系统) —— 面向中国制造企业的实用指南
- How to Develop a Manufacturing Execution System (MES) with Python
- MES、ERP 与 SCADA 的区别与边界 —— 制造业系统角色与连接关系详解
- MES vs ERP vs SCADA: Roles and Boundaries Explained
- 为什么学习软件开发如此“痛苦” ——以及真正有效的解决方法
- Why Learning Software Development Feels So Painful — and How to Fix It
- 企业最终会选择哪种 AI:GPT 风格,还是 Gemini 风格?
- What Enterprises Will Choose: GPT-Style AI or Gemini-Style AI?
- GPT-5.2 在哪些真实业务场景中明显优于 GPT-5.1













