ذخیره برداری
Vector Store
ذخیره و جستجوی معنایی اسناد با Embeddings - پایه RAG و چتبات دانشمحور
نمای کلی
نود Vector Store چیست؟
نود Vector Store قلب سیستمهای هوش مصنوعی مبتنی بر دانش در n8n است. برای درک بهتر، ابتدا مفاهیم پایه را توضیح میدهیم:
مفهوم Vector Embedding به زبان ساده:
تصور کنید هر متن یا سند را بتوانید به یک لیست از اعداد تبدیل کنید - مثلاً جمله "گربه روی تشک نشسته" به چیزی مثل [0.23, -0.45, 0.87, ...] تبدیل شود. به این لیست اعداد بردار (Vector) و به فرایند تبدیل Embedding میگویند.
نکته جادویی: وقتی دو متن معنای مشابهی دارند، بردارهایشان هم به هم نزدیک هستند! مثلاً بردار "گربه روی تشک نشسته" و "یک پیشی روی فرش خوابیده" خیلی به هم نزدیک خواهند بود، حتی اگر کلمات متفاوت باشند. این دقیقاً همان چیزی است که جستجوی معنایی (Semantic Search) را ممکن میکند.
Vector Store دیتابیسی تخصصی است که:
- بردارهای عددی (Embeddings) را ذخیره میکند
- جستجوی شباهت (Similarity Search) بسیار سریع انجام میدهد
- همراه بردار، متن اصلی و metadata هم ذخیره میکند
- از الگوریتمهای ANN (Approximate Nearest Neighbor) برای سرعت بالا استفاده میکند
مفهوم RAG (Retrieval-Augmented Generation):
RAG ترکیب جستجوی دانش + تولید پاسخ هوشمند است:
مرحله 1 (Indexing - یکبار):
اسناد → تکهتکه کردن (Chunking) → تبدیل به بردار (Embedding) → ذخیره در Vector Store
مرحله 2 (Query - هر سوال):
سوال کاربر → تبدیل به بردار → جستجو در Vector Store
→ یافتن مرتبطترین تکهها → ارسال به LLM همراه سوال
→ LLM پاسخ مستند تولید میکندچرا RAG و Vector Store مهم هستند؟
- دانش اختصاصی: LLM فقط دانش عمومی دارد؛ RAG دانش شرکت شما را اضافه میکند
- پاسخ مستند: پاسخها بر اساس اسناد واقعی هستند، نه حدس
- بهروز بودن: برخلاف LLM که دانشش ثابت است، Vector Store قابل بهروزرسانی است
- کاهش هذیان (Hallucination): LLM فقط از اسناد مرتبط پاسخ میدهد
- صرفهجویی: به جای Fine-tuning گرانقیمت، فقط اسناد را Index کنید
انواع Vector Store در n8n:
#### 1. In-Memory Vector Store (ساده و سریع)
- مزایا: بدون نیاز به سرور خارجی، راهاندازی فوری
- معایب: دادهها با پایان workflow پاک میشوند
- مناسب برای: تست، پروتوتایپ، اسناد کمحجم (زیر 1000 سند)
#### 2. Pinecone (ابری و مدیریتشده)
- مزایا: مقیاسپذیر، مدیریتشده، API ساده
- معایب: هزینهدار، نیاز به اینترنت، سرورها خارج از ایران
- مناسب برای: پروژههای بزرگ Production
#### 3. Qdrant (خودمیزبان - توصیه برای ایران)
- مزایا: open-source، قابل نصب محلی، بدون نیاز به اینترنت، عملکرد عالی
- معایب: نیاز به مدیریت سرور
- مناسب برای: کاربران ایرانی، پروژههای حساس به حریم خصوصی
- **نصب**:
docker run -p 6333:6333 qdrant/qdrant
#### 4. Chroma (خودمیزبان - ساده)
- مزایا: open-source، نصب ساده، مناسب توسعه
- معایب: مقیاسپذیری محدود
- مناسب برای: پروژههای کوچک و متوسط، توسعه محلی
- **نصب**:
docker run -p 8000:8000 chromadb/chroma
#### 5. Supabase Vector (pgvector)
- مزایا: ترکیب با PostgreSQL، SQL queries روی metadata
- معایب: عملکرد کمتر از Pinecone برای مقیاس بزرگ
- مناسب برای: پروژههایی که از Supabase استفاده میکنند
#### 6. PGVector (PostgreSQL Extension)
- مزایا: اضافه شدن به PostgreSQL موجود، بدون دیتابیس جدید
- معایب: عملکرد در مقیاس بزرگ نیاز به تنظیم دارد
- مناسب برای: کسانی که PostgreSQL دارند
مدلهای Embedding:
#### OpenAI Embeddings
text-embedding-3-small: ارزان ($0.02 / 1M tokens)، 1536 بعدtext-embedding-3-large: دقیقتر ($0.13 / 1M tokens)، 3072 بعدtext-embedding-ada-002: نسل قبلی، هنوز کاربردی
#### مدلهای محلی (بدون اینترنت - عالی برای ایران)
- **Ollama Embeddings**: مدلهای
nomic-embed-text،mxbai-embed-large - HuggingFace: هزاران مدل رایگان
- مزیت: رایگان، بدون محدودیت، حفظ حریم خصوصی
Document Chunking (تکهتکه کردن اسناد):
- Character Splitter: بر اساس تعداد کاراکتر (ساده)
- Token Splitter: بر اساس تعداد توکن (دقیقتر)
- Recursive Character Splitter: تکهتکه هوشمند بر اساس پاراگراف و جمله (توصیه)
- Chunk Size: معمولاً 500-1000 کاراکتر
- Chunk Overlap: 50-200 کاراکتر (برای حفظ context بین تکهها)
احراز هویت
احراز هویت Vector Store
هر Vector Store credential جداگانه دارد. در اینجا تنظیمات هر کدام را توضیح میدهیم:
1. In-Memory Vector Store
- نیازی به credential ندارد!
- فقط یک Embedding Model متصل کنید (OpenAI یا Ollama)
- دادهها در حافظه workflow ذخیره میشوند
2. Pinecone
- 1به [pinecone.io](https://www.pinecone.io) بروید و ثبتنام کنید
- 2یک Index بسازید:
- Dimension: باید با مدل Embedding مطابقت داشته باشد
- OpenAI text-embedding-3-small:
1536 - OpenAI text-embedding-3-large:
3072 - **Metric**:
cosine(توصیه) یاeuclideanیاdotproduct
- 1API Key از داشبورد کپی کنید
- 2در n8n: Credentials > Pinecone API
- API Key: کلید کپی شده
- Environment: منطقه سرور (مثل
us-east-1-aws)
3. Qdrant (خودمیزبان)
- 1نصب با Docker:
docker run -d --name qdrant \
-p 6333:6333 -p 6334:6334 \
-v qdrant_data:/qdrant/storage \
qdrant/qdrant- 1در n8n: Credentials > Qdrant API
- URL:
http://localhost:6333(یا آدرس سرور) - API Key: اختیاری (اگر authentication فعال باشد)
4. Chroma (خودمیزبان)
- 1نصب با Docker:
docker run -d --name chroma \
-p 8000:8000 \
-v chroma_data:/chroma/chroma \
chromadb/chroma- 1در n8n: Credentials > Chroma API
- URL:
http://localhost:8000
5. Supabase Vector
- 1به [supabase.com](https://supabase.com) بروید
- 2پروژه بسازید
- 3Extension pgvector را فعال کنید:
CREATE EXTENSION IF NOT EXISTS vector;- 1جدول documents بسازید:
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
content TEXT,
metadata JSONB,
embedding VECTOR(1536)
);- 1در n8n: Credentials > Supabase API
- Project URL و API Key از داشبورد Supabase
6. PGVector (PostgreSQL)
- 1Extension نصب کنید:
CREATE EXTENSION IF NOT EXISTS vector;- 1جدول بسازید (مشابه Supabase)
- 2در n8n: Credentials > PostgreSQL
- Host، Port، Database، User، Password
تنظیم مدل Embedding:
#### OpenAI Embeddings:
- 1API Key از [platform.openai.com](https://platform.openai.com)
- 2در n8n: Credentials > OpenAI API
- 3مدل:
text-embedding-3-small(ارزان و مناسب)
#### Ollama Embeddings (محلی و رایگان):
- 1نصب Ollama: [ollama.ai](https://ollama.ai)
- 2دانلود مدل:
ollama pull nomic-embed-text
# یا
ollama pull mxbai-embed-large- 1در n8n: Credentials > Ollama
- Base URL:
http://localhost:11434 - بدون API Key!
نکته مهم برای کاربران ایرانی:
- Pinecone: نیاز به VPN یا proxy برای اتصال
- Qdrant + Ollama: بهترین ترکیب بدون نیاز به اینترنت
- Chroma + Ollama: سادهترین راهاندازی محلی
- Dimension مدل Embedding باید با Vector Store یکسان باشد
عملیاتهای موجود
insertDocuments
تبدیل متون به بردار و ذخیره در Vector Store. هسته اصلی ساخت Knowledge Base.
searchSimilar
جستجوی شباهت معنایی در بین اسناد ذخیرهشده. مهمترین عملیات برای RAG.
deleteDocuments
حذف اسناد از Vector Store بر اساس ID یا فیلتر metadata.
getDocument
دریافت یک سند خاص از Vector Store بر اساس شناسه.
upsertDocuments
اگر سند وجود دارد بهروزرسانی کن، اگر نه درج کن. عالی برای بهروزرسانی دانش.
createCollection
ساخت مجموعه یا ایندکس جدید در Vector Store.
listCollections
نمایش لیست همه مجموعهها (Collections) موجود در Vector Store.
loadDocuments
بارگذاری اسناد از منابع مختلف و آمادهسازی برای ذخیره در Vector Store.
retrieveForRAG
جستجوی اسناد مرتبط و ارسال به LLM برای تولید پاسخ مستند. قلب سیستم RAG.
metadataFilter
جستجوی ترکیبی: معنایی + فیلتر بر اساس metadata اسناد.
hybridSearch
ترکیب جستجوی معنایی (Vector) با جستجوی کلیدواژهای (BM25) برای نتایج بهتر.
embedText
تبدیل مستقیم متن به بردار عددی بدون ذخیره. مناسب مقایسه و محاسبه شباهت.
clearCollection
حذف تمام اسناد یک مجموعه. مفید برای بازسازی کامل Knowledge Base.
getCollectionStats
دریافت آمار و اطلاعات یک مجموعه: تعداد اسناد، حجم، ابعاد بردار.
کاربردهای متداول
1. پایگاه دانش سازمانی (Knowledge Base Q&A)
ساخت سیستم پرسش و پاسخ از اسناد شرکت:
مرحله Indexing (یکبار):
Google Drive Trigger (فایل جدید)
→ Document Loader (PDF/Docx)
→ Text Splitter (Recursive, 800 chars, 200 overlap)
→ Embeddings (OpenAI text-embedding-3-small)
→ Vector Store Insert (Qdrant)
Collection: "company_docs"
Metadata: {source: filename, department: folder, date: uploadDate}
مرحله Query (هر سوال):
Telegram Trigger (سوال کارمند)
→ Vector Store Search (Qdrant)
Query: \${$json.message}
TopK: 5
Filter: {department: \${$json.userDepartment}}
→ OpenAI Chat
System: "بر اساس اسناد زیر به سوال پاسخ بده.
اگر پاسخ در اسناد نبود، بگو اطلاعات کافی نداری.
منبع هر پاسخ را ذکر کن."
Context: \${$json.documents}
Question: \${$json.message}
→ Telegram (پاسخ مستند + منابع)2. جستجوی معنایی محصولات (Semantic Product Search)
جستجوی هوشمند محصولات بر اساس توصیف طبیعی:
Indexing:
MySQL (همه محصولات)
→ Set (ترکیب: نام + توصیف + ویژگیها + دستهبندی)
→ Embeddings (OpenAI)
→ Vector Store Insert (Pinecone)
Metadata: {productId, category, price, inStock}
Query:
Webhook (جستجوی کاربر)
→ Vector Store Search (Pinecone)
Query: "یک لپتاپ سبک برای دانشجو با بودجه متوسط"
TopK: 10
Filter: {inStock: true}
→ Set (فرمت نتایج)
→ Response (لیست محصولات مرتبط)3. چتبات دانشمحور با حافظه (RAG Chatbot)
چتبات هوشمند با دسترسی به اسناد و حافظه مکالمه:
Telegram Trigger (پیام کاربر)
→ AI Agent (Tools Agent)
LLM: GPT-4o-mini
Memory: Window Memory (20 پیام)
SessionId: \${$json.chat.id}
System: "دستیار دانش شرکت هستی.
از ابزار search_docs برای پاسخ به سوالات استفاده کن.
فقط بر اساس اسناد پاسخ بده."
Tools: [
Vector Store Tool (Qdrant - company_docs)
]
→ Telegram (پاسخ)4. تشخیص تکراری بودن محتوا (Duplicate Detection)
بررسی تکراری نبودن محتوای جدید:
Webhook (مقاله جدید)
→ Vector Store Search
Query: \${$json.title + " " + $json.content}
TopK: 3
Threshold: 0.92
→ IF (similarityScore > 0.92)
→ True: "محتوای تکراری! مشابه: [عنوان مقاله قبلی]"
→ False: Vector Store Insert (ذخیره مقاله جدید)
→ "مقاله ثبت شد"5. پیشنهاد محصولات مشابه (Product Recommendations)
نمایش محصولات مشابه بر اساس شباهت معنایی:
Webhook (مشاهده محصول)
→ MySQL (اطلاعات محصول فعلی)
→ Vector Store Search (Pinecone)
Query: \${$json.productDescription}
TopK: 6
Filter: {
category: \${$json.category},
productId: {$ne: \${$json.currentProductId}}
}
→ Set (فرمت پیشنهادات)
→ Response (محصولات پیشنهادی)6. پاسخ خودکار به تیکتهای پشتیبانی
جستجو در تاریخچه تیکتها و پایگاه دانش:
Webhook (تیکت جدید)
→ Vector Store Search (FAQ Knowledge Base)
Query: \${$json.subject + " " + $json.message}
TopK: 5
Filter: {status: "resolved"}
→ IF (topScore > 0.85)
→ True: OpenAI Chat
System: "بر اساس پاسخهای قبلی، پیشنویس پاسخ بنویس"
Context: \${$json.similarTickets}
→ False: "تیکت نیاز به بررسی انسانی دارد"
→ MySQL (ذخیره + ارجاع)7. خلاصهسازی و جستجوی اسناد حقوقی
ساخت دانشپایه از قراردادها و اسناد حقوقی:
Indexing:
Schedule (هفتگی)
→ Google Drive (پوشه قراردادها)
→ Document Loader (PDF)
→ Text Splitter (Token, 1000 tokens, 200 overlap)
→ Vector Store Upsert (Qdrant)
Collection: "legal_docs"
Metadata: {contractType, parties, date, status}
Query:
Webhook (سوال حقوقی)
→ Vector Store Search
Query: \${$json.question}
Filter: {contractType: \${$json.type}}
TopK: 8
→ OpenAI Chat (GPT-4o)
System: "وکیل متخصص هستی.
بر اساس مفاد قراردادها پاسخ بده.
شماره بند و ماده را ذکر کن."
→ Response (پاسخ حقوقی مستند)8. حافظه بلندمدت چتبات (Long-term Memory)
ذخیره و بازیابی اطلاعات مهم از مکالمات قبلی:
Telegram Trigger (پیام کاربر)
→ Vector Store Search (Memory Store)
Query: \${$json.message}
Filter: {userId: \${$json.from.id}}
TopK: 3
→ OpenAI Chat
System: "دستیار شخصی با حافظه بلندمدت هستی.
اطلاعات قبلی کاربر: \${$json.memories}
به پیام جدید پاسخ بده."
→ IF (اطلاعات مهم در پیام)
→ Vector Store Insert (Memory Store)
Metadata: {userId, topic, timestamp}
→ Telegram (پاسخ شخصیسازیشده)9. نظارت بر رسانهها و تحلیل اخبار
جمعآوری و تحلیل معنایی اخبار مرتبط:
Schedule (هر ساعت)
→ HTTP Request (RSS خبرگزاریها)
→ SplitInBatches
→ Vector Store Search (مقالات موجود)
Query: \${$json.title}
Threshold: 0.95
→ IF (تکراری نیست)
→ Vector Store Insert
Metadata: {source, date, category}
→ OpenAI Chat
System: "خبر را تحلیل کن:
- احساسات (مثبت/منفی/خنثی)
- موضوعات کلیدی
- تاثیر بر صنعت ما"
→ IF (مرتبط با شرکت)
→ Telegram (هشدار خبری)10. آموزشدهنده هوشمند (AI Tutor)
سیستم آموزشی مبتنی بر محتوای درسی:
Indexing:
Manual Trigger
→ Google Drive (جزوهها و کتابها)
→ Document Loader (PDF)
→ Text Splitter (Recursive, 600 chars)
→ Vector Store Insert (Qdrant)
Collection: "course_\${courseName}"
Metadata: {chapter, topic, difficulty}
Student Query:
Webhook (سوال دانشجو)
→ Vector Store Search
Query: \${$json.question}
Collection: "course_\${$json.course}"
TopK: 5
→ OpenAI Chat (GPT-4o)
System: "استاد خصوصی \${$json.course} هستی.
بر اساس جزوهها توضیح بده.
مثالهای ساده بزن.
اگر سوال خارج از درس بود، بگو."
→ Response (توضیح + منبع)11. تشخیص شباهت اسناد (Document Similarity)
مقایسه معنایی اسناد و یافتن موارد مشابه:
Webhook (سند جدید)
→ Embeddings (تبدیل به بردار)
→ Vector Store Search
Query: \${$json.documentText}
TopK: 10
Threshold: 0.80
→ Set (محاسبه درصد شباهت)
→ IF (شباهت > 80%)
→ Gmail (هشدار: "سند مشابه با \${$json.similarDoc.title}")
→ Response (گزارش شباهت)12. سیستم FAQ هوشمند (Smart FAQ)
پاسخ خودکار به سوالات متداول بر اساس جستجوی معنایی:
Indexing:
Webhook (سوال و جواب جدید)
→ Vector Store Upsert
Content: \${$json.question + " " + $json.answer}
Metadata: {question, answer, category, views: 0}
Query:
Webhook (سوال کاربر)
→ Vector Store Search
Query: \${$json.question}
TopK: 3
→ IF (topScore > 0.85)
→ Response (پاسخ آماده از FAQ)
→ ELSE IF (topScore > 0.60)
→ OpenAI Chat (بازنویسی پاسخ مرتبط)
→ ELSE
→ Response ("سوال شما ثبت شد و پاسخ داده خواهد شد")
→ MySQL (ذخیره سوال بدون پاسخ)نکات حرفهای
نکات حرفهای
- 1انتخاب Vector Store مناسب:
تست و توسعه: In-Memory (ساده، بدون نصب)
پروژه کوچک: Chroma (Docker ساده)
پروژه متوسط: Qdrant (عملکرد عالی، خودمیزبان)
پروژه بزرگ: Pinecone (مقیاسپذیر، مدیریتشده)
PostgreSQL دارید: PGVector (بدون دیتابیس اضافی)
Supabase دارید: Supabase Vector (یکپارچه)
برای ایران: Qdrant + Ollama Embeddings
(بدون نیاز به اینترنت و VPN)- 1Chunking بهینه برای فارسی:
// متن فارسی معمولاً بیشتر از انگلیسی توکن مصرف میکند
// پیشنهاد:
Chunk Size: 600-800 کاراکتر (فارسی)
Chunk Overlap: 150-200 کاراکتر
Splitter: Recursive Character Splitter
Separators: ["\n\n", "\n", ". ", "، ", " "]
// برای اسناد فنی:
Chunk Size: 1000-1500 (بلوکهای کد بزرگترند)
// برای FAQ:
هر سوال-پاسخ = یک Chunk (بدون Split)- 1Metadata هوشمند:
// metadata خوب = فیلتر بهتر = جستجوی دقیقتر
// مثال metadata برای مقاله:
{
source: "blog-post-123.md",
category: "فنی",
author: "علی احمدی",
date: "2024-06-15",
language: "fa",
wordCount: 1500,
tags: ["Docker", "DevOps"]
}
// مثال metadata برای محصول:
{
productId: "PRD-456",
category: "لپتاپ",
brand: "ASUS",
priceRange: "medium",
inStock: true
}- 1بهینهسازی TopK:
TopK = 2-3: پاسخ سریع، context کم (سوالات ساده)
TopK = 4-5: تعادل خوب (توصیه پیشفرض)
TopK = 8-10: context زیاد (سوالات پیچیده)
TopK = 15-20: جستجوی جامع (تحلیل و گزارش)
نکته: TopK بیشتر = توکن بیشتر = هزینه LLM بالاتر- 1الگوی RAG حرفهای (کامل):
// مرحله 1: Indexing Pipeline
Document Loader → Text Splitter → Embedding → Vector Store Insert
↓
metadata enrich
// مرحله 2: Query Pipeline
User Question → Embedding → Vector Search → Rerank → LLM → Answer
↓ ↑
metadata filter system prompt +
few-shot examples
// مرحله 3: بهبود مستمر
User Feedback → Log → Analyze → Improve Chunks/Prompts- 1System Prompt عالی برای RAG:
"You are a helpful assistant that answers questions based
on the provided context documents.
Rules:
1. ONLY use information from the provided documents
2. If the answer is not in the documents, say:
'اطلاعات مرتبطی در اسناد موجود نیست'
3. Always cite your sources with document names
4. Respond in Persian (Farsi)
5. Be concise but thorough
6. If documents are contradictory, mention both views
Context Documents:
{context}
User Question: {question}"- 1Embedding محلی با Ollama (رایگان):
// نصب و راهاندازی:
1. ollama pull nomic-embed-text // 274MB، سریع
2. ollama pull mxbai-embed-large // 670MB، دقیقتر
// مزایا:
- کاملاً رایگان (بدون API Key)
- بدون نیاز به اینترنت
- حریم خصوصی کامل
- بدون Rate Limit
// معایب:
- نیاز به CPU/GPU مناسب
- کیفیت فارسی کمتر از OpenAI
- سرعت کمتر (بدون GPU)- 1Qdrant: بهترین گزینه خودمیزبان:
// نصب با Docker:
docker run -d --name qdrant \
-p 6333:6333 -p 6334:6334 \
-v qdrant_data:/qdrant/storage \
--restart unless-stopped \
qdrant/qdrant
// مزایا برای ایرانیها:
- روی سرور خودتان نصب میشود
- بدون نیاز به VPN
- عملکرد فوقالعاده (Rust-based)
- پشتیبانی از Hybrid Search
- فیلتر metadata پیشرفته
- رابط وب: http://localhost:6333/dashboard- 1مقایسه عملکرد Vector Storeها:
In-Memory: سرعت ★★★★★ مقیاس ★☆☆☆☆ ماندگاری ✗
Chroma: سرعت ★★★★☆ مقیاس ★★★☆☆ ماندگاری ✓
Qdrant: سرعت ★★★★★ مقیاس ★★★★★ ماندگاری ✓
Pinecone: سرعت ★★★★☆ مقیاس ★★★★★ ماندگاری ✓
PGVector: سرعت ★★★☆☆ مقیاس ★★★★☆ ماندگاری ✓
Supabase: سرعت ★★★☆☆ مقیاس ★★★★☆ ماندگاری ✓- 1مدیریت بهروزرسانی اسناد:
// الگوی Upsert هوشمند:
هر سند ID منحصربهفرد داشته باشد (مثلاً hash محتوا)
Document Changed → Delete old chunks (by source metadata)
→ Re-chunk new document
→ Insert new chunks
// یا از Upsert استفاده کنید:
Upsert with ID = hash(source + chunkIndex)
→ اسناد تغییریافته خودکار بهروز میشوند- 1Hybrid Search برای نتایج بهتر:
// ترکیب Vector Search + Keyword Search
// مزیت: هم معنا و هم کلمات کلیدی بررسی میشوند
Qdrant Hybrid Search:
Vector weight: 0.7 (معنایی)
Keyword weight: 0.3 (کلیدواژه)
// مثال: جستجوی "خطای 404 در صفحه لاگین"
// Vector: معنای "خطا در ورود" را میفهمد
// Keyword: عدد "404" را دقیق پیدا میکند- 1Pre-filtering vs Post-filtering:
// Pre-filtering (توصیه): فیلتر قبل از جستجوی برداری
→ سریعتر، نتایج مرتبطتر
→ مثال: ابتدا فقط اسناد "فنی" → سپس جستجوی معنایی
// Post-filtering: ابتدا جستجوی برداری → فیلتر نتایج
→ ممکن است نتایج کمتر از TopK بگیرید
→ مناسب فیلترهای پیچیده
// در Qdrant و Pinecone هر دو روش پشتیبانی میشود- 1امنیت و حریم خصوصی:
// اسناد محرمانه:
1. از Embedding محلی (Ollama) استفاده کنید
→ متن به سرور خارجی ارسال نمیشود
2. Vector Store خودمیزبان (Qdrant/Chroma)
→ دادهها روی سرور شما میمانند
3. Authentication فعال کنید (Qdrant API Key)
4. دسترسی شبکهای محدود کنید
// برای اسناد عمومی: OpenAI + Pinecone = راحتترین- 1بهینهسازی هزینه:
// Embedding:
text-embedding-3-small: $0.02 / 1M tokens (مناسب اکثر کارها)
text-embedding-3-large: $0.13 / 1M tokens (دقت بالاتر)
Ollama: رایگان!
// مثال هزینه Indexing 1000 صفحه PDF:
~500,000 tokens → $0.01 با text-embedding-3-small
// Vector Store:
Qdrant/Chroma: رایگان (خودمیزبان)
Pinecone Free: 100K vectors رایگان
Pinecone Standard: $0.33/GB/month- 1الگوی Multi-Collection:
// هر نوع سند در Collection جداگانه:
Collection "products": اطلاعات محصولات
Collection "faq": سوالات متداول
Collection "docs": مستندات فنی
Collection "tickets": تیکتهای حلشده
// جستجو:
→ ابتدا Intent Detection (تشخیص نوع سوال)
→ سپس جستجو در Collection مرتبط
→ نتایج دقیقتر + سریعتر- 1Reranking برای دقت بالاتر:
// مرحله 1: Vector Search (TopK = 20)
// مرحله 2: Rerank با مدل Cross-Encoder (TopK = 5)
// → نتایج بسیار دقیقتر
Vector Store Search (TopK: 20)
→ Code (Rerank with similarity recalculation)
→ Limit (Top 5)
→ LLM (پاسخ با context بهینه)- 1نظارت و لاگ:
// هر Query را لاگ کنید:
{
query: "سوال کاربر",
topResults: [{score, source}],
responseUseful: true/false,
timestamp: Date.now()
}
// تحلیل هفتگی:
- سوالاتی که پاسخ مرتبط نداشتند
- اسنادی که هرگز بازیابی نشدند
- امتیاز شباهت میانگین
→ بهبود Chunks، metadata و system promptرفع مشکلات
خطاهای رایج
1. خطای "Dimension mismatch"
علت: ابعاد بردار Embedding با Vector Store مطابقت ندارد
راهحل
- مطمئن شوید مدل Embedding موقع Insert و Search یکسان باشد
- ابعاد مدلها:
- OpenAI text-embedding-3-small: 1536
- OpenAI text-embedding-3-large: 3072
- OpenAI text-embedding-ada-002: 1536
- Ollama nomic-embed-text: 768
- Ollama mxbai-embed-large: 1024
- در Pinecone: Dimension ایندکس باید با مدل مطابقت داشته باشد
- اگر مدل عوض شد، باید مجموعه را از نو بسازید
2. خطای "Collection not found"
علت: مجموعه هنوز ایجاد نشده
راهحل
- ابتدا مجموعه بسازید (Create Collection)
- یا اولین Insert خودکار مجموعه ایجاد میکند (در Qdrant و Chroma)
- نام مجموعه را دقیق وارد کنید (Case-sensitive)
- فاصله و کاراکتر خاص در نام مجاز نیست
3. نتایج جستجو نامرتبط هستند
علت: Chunking نامناسب یا Embedding ضعیف
راهحل
- اندازه Chunk را تنظیم کنید (500-1000 بهینه برای اکثر موارد)
- Overlap کافی بگذارید (100-200 کاراکتر)
- از Recursive Text Splitter بجای Character Splitter استفاده کنید
- metadata اضافه کنید و از فیلتر استفاده کنید
- TopK را افزایش دهید (8-10) و سپس Rerank کنید
- مدل Embedding بزرگتر تست کنید (text-embedding-3-large)
4. خطای "Rate limit" هنگام Embedding
علت: تعداد زیاد اسناد برای Embedding
راهحل
- از SplitInBatches استفاده کنید (batch size: 50-100)
- بین batchها Wait اضافه کنید (1-2 ثانیه)
- Embedding محلی (Ollama) محدودیت ندارد
- از OpenAI Batch API استفاده کنید
5. خطای اتصال به Qdrant/Chroma
علت: سرور Vector Store در دسترس نیست
راهحل
- مطمئن شوید Docker Container در حال اجراست
- پورت صحیح: Qdrant=6333، Chroma=8000
- اگر n8n در Docker: از
host.docker.internalبجایlocalhostاستفاده کنید - فایروال پورت مورد نظر را چک کنید
- Volume برای پایداری دادهها تنظیم کنید
6. خطای "Out of memory" برای In-Memory Vector Store
علت: حجم اسناد بیش از حد حافظه
راهحل
- In-Memory فقط برای تست و اسناد کم (زیر 1000 سند)
- برای Production از Qdrant، Pinecone یا PGVector استفاده کنید
- حافظه n8n را افزایش دهید:
NODE_OPTIONS=--max-old-space-size=4096
7. جستجو خیلی کند است
علت: ایندکس نامناسب یا حجم بالای داده
راهحل
- ایندکس HNSW در Qdrant تنظیم کنید (m=16, ef_construct=100)
- در PGVector از ایندکس IVFFlat یا HNSW استفاده کنید
- Metadata filter قبل از Vector Search اعمال شود
- از Approximate search بجای Exact استفاده کنید
8. خطای "Invalid metadata filter"
علت: ساختار فیلتر metadata اشتباه
راهحل
- هر Vector Store ساختار فیلتر متفاوتی دارد
- Pinecone:
{genre: {$eq: "action"}} - Qdrant:
{must: [{key: "genre", match: {value: "action"}}]} - Supabase: از SQL-like filter استفاده کنید
- metadata را هنگام Insert صحیح ذخیره کنید
9. اسناد فارسی به درستی Embed نمیشوند
علت: مدل Embedding ضعیف برای فارسی
راهحل
- OpenAI text-embedding-3-small فارسی را خوب پشتیبانی میکند
- Ollama: از مدلهای multilingual استفاده کنید
- متن را قبل از Embedding پیشپردازش کنید (حذف اعراب اضافی، نرمالسازی)
- اگر مدل فارسی ضعیف است، کلمات کلیدی انگلیسی هم اضافه کنید
10. دادههای In-Memory بعد از ریستارت پاک میشوند
علت: In-Memory Vector Store دادهها را در RAM نگه میدارد
راهحل
- برای ماندگاری از Qdrant، Chroma یا PGVector استفاده کنید
- اگر حتماً In-Memory لازم دارید، دادهها را در هر اجرا مجدداً بارگذاری کنید
- از Workflow اولیه (Startup Trigger) برای بارگذاری استفاده کنید
