heraspec 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -22
- package/README.md +188 -119
- package/bin/heraspec.js +4800 -1126
- package/bin/heraspec.js.map +4 -4
- package/dist/core/templates/skills/CHANGELOG.md +117 -117
- package/dist/core/templates/skills/README-template.md +58 -58
- package/dist/core/templates/skills/README.md +38 -38
- package/dist/core/templates/skills/content-optimization-skill.md +104 -104
- package/dist/core/templates/skills/data/design-systems.csv +54 -0
- package/dist/core/templates/skills/data/pages-proposed.csv +21 -21
- package/dist/core/templates/skills/data/pages.csv +9 -9
- package/dist/core/templates/skills/data/typography.csv +57 -57
- package/dist/core/templates/skills/deploy-documentation-skill.md +408 -0
- package/dist/core/templates/skills/design-system-skill.md +176 -0
- package/dist/core/templates/skills/documents/templates/documentation-landing-page.html +63 -63
- package/dist/core/templates/skills/documents/templates/documentation.html +49 -49
- package/dist/core/templates/skills/documents/templates/landing-script.js +38 -38
- package/dist/core/templates/skills/documents/templates/landing-style.css +158 -158
- package/dist/core/templates/skills/documents/templates/script.js +56 -56
- package/dist/core/templates/skills/documents/templates/style.css +155 -155
- package/dist/core/templates/skills/documents/templates/technical-doc-template.md +16 -16
- package/dist/core/templates/skills/documents/templates/user-guide-template.md +16 -16
- package/dist/core/templates/skills/documents-skill.md +104 -104
- package/dist/core/templates/skills/e2e-test-skill.md +119 -119
- package/dist/core/templates/skills/git-embed-skill.md +57 -0
- package/dist/core/templates/skills/integration-test-skill.md +118 -118
- package/dist/core/templates/skills/knowledge/README.md +63 -0
- package/dist/core/templates/skills/knowledge/design-systems/airbnb/DESIGN.md +246 -0
- package/dist/core/templates/skills/knowledge/design-systems/airtable/DESIGN.md +89 -0
- package/dist/core/templates/skills/knowledge/design-systems/apple/DESIGN.md +313 -0
- package/dist/core/templates/skills/knowledge/design-systems/bmw/DESIGN.md +180 -0
- package/dist/core/templates/skills/knowledge/design-systems/cal/DESIGN.md +259 -0
- package/dist/core/templates/skills/knowledge/design-systems/claude/DESIGN.md +312 -0
- package/dist/core/templates/skills/knowledge/design-systems/clay/DESIGN.md +304 -0
- package/dist/core/templates/skills/knowledge/design-systems/clickhouse/DESIGN.md +281 -0
- package/dist/core/templates/skills/knowledge/design-systems/cohere/DESIGN.md +266 -0
- package/dist/core/templates/skills/knowledge/design-systems/coinbase/DESIGN.md +129 -0
- package/dist/core/templates/skills/knowledge/design-systems/composio/DESIGN.md +307 -0
- package/dist/core/templates/skills/knowledge/design-systems/cursor/DESIGN.md +309 -0
- package/dist/core/templates/skills/knowledge/design-systems/elevenlabs/DESIGN.md +265 -0
- package/dist/core/templates/skills/knowledge/design-systems/expo/DESIGN.md +281 -0
- package/dist/core/templates/skills/knowledge/design-systems/figma/DESIGN.md +220 -0
- package/dist/core/templates/skills/knowledge/design-systems/framer/DESIGN.md +246 -0
- package/dist/core/templates/skills/knowledge/design-systems/hashicorp/DESIGN.md +278 -0
- package/dist/core/templates/skills/knowledge/design-systems/ibm/DESIGN.md +332 -0
- package/dist/core/templates/skills/knowledge/design-systems/index.json +72 -0
- package/dist/core/templates/skills/knowledge/design-systems/intercom/DESIGN.md +146 -0
- package/dist/core/templates/skills/knowledge/design-systems/kraken/DESIGN.md +125 -0
- package/dist/core/templates/skills/knowledge/design-systems/linear.app/DESIGN.md +367 -0
- package/dist/core/templates/skills/knowledge/design-systems/lovable/DESIGN.md +298 -0
- package/dist/core/templates/skills/knowledge/design-systems/minimax/DESIGN.md +257 -0
- package/dist/core/templates/skills/knowledge/design-systems/mintlify/DESIGN.md +326 -0
- package/dist/core/templates/skills/knowledge/design-systems/miro/DESIGN.md +108 -0
- package/dist/core/templates/skills/knowledge/design-systems/mistral.ai/DESIGN.md +261 -0
- package/dist/core/templates/skills/knowledge/design-systems/mongodb/DESIGN.md +266 -0
- package/dist/core/templates/skills/knowledge/design-systems/notion/DESIGN.md +309 -0
- package/dist/core/templates/skills/knowledge/design-systems/nvidia/DESIGN.md +293 -0
- package/dist/core/templates/skills/knowledge/design-systems/ollama/DESIGN.md +267 -0
- package/dist/core/templates/skills/knowledge/design-systems/opencode.ai/DESIGN.md +281 -0
- package/dist/core/templates/skills/knowledge/design-systems/pinterest/DESIGN.md +230 -0
- package/dist/core/templates/skills/knowledge/design-systems/posthog/DESIGN.md +256 -0
- package/dist/core/templates/skills/knowledge/design-systems/raycast/DESIGN.md +268 -0
- package/dist/core/templates/skills/knowledge/design-systems/replicate/DESIGN.md +261 -0
- package/dist/core/templates/skills/knowledge/design-systems/resend/DESIGN.md +303 -0
- package/dist/core/templates/skills/knowledge/design-systems/revolut/DESIGN.md +185 -0
- package/dist/core/templates/skills/knowledge/design-systems/runwayml/DESIGN.md +244 -0
- package/dist/core/templates/skills/knowledge/design-systems/sanity/DESIGN.md +357 -0
- package/dist/core/templates/skills/knowledge/design-systems/sentry/DESIGN.md +262 -0
- package/dist/core/templates/skills/knowledge/design-systems/spacex/DESIGN.md +194 -0
- package/dist/core/templates/skills/knowledge/design-systems/spotify/DESIGN.md +246 -0
- package/dist/core/templates/skills/knowledge/design-systems/stripe/DESIGN.md +322 -0
- package/dist/core/templates/skills/knowledge/design-systems/supabase/DESIGN.md +255 -0
- package/dist/core/templates/skills/knowledge/design-systems/superhuman/DESIGN.md +252 -0
- package/dist/core/templates/skills/knowledge/design-systems/together.ai/DESIGN.md +263 -0
- package/dist/core/templates/skills/knowledge/design-systems/uber/DESIGN.md +295 -0
- package/dist/core/templates/skills/knowledge/design-systems/vercel/DESIGN.md +310 -0
- package/dist/core/templates/skills/knowledge/design-systems/voltagent/DESIGN.md +323 -0
- package/dist/core/templates/skills/knowledge/design-systems/warp/DESIGN.md +253 -0
- package/dist/core/templates/skills/knowledge/design-systems/webflow/DESIGN.md +92 -0
- package/dist/core/templates/skills/knowledge/design-systems/wise/DESIGN.md +173 -0
- package/dist/core/templates/skills/knowledge/design-systems/x.ai/DESIGN.md +257 -0
- package/dist/core/templates/skills/knowledge/design-systems/zapier/DESIGN.md +328 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/codeigniter/rise-cms/profile.json +27 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/codeigniter/rise-cms/structure.md +137 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/laravel/botble/profile.json +39 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/laravel/botble/structure.md +208 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/wordpress/core/profile.json +51 -0
- package/dist/core/templates/skills/knowledge/frameworks/php/wordpress/core/structure.md +369 -0
- package/dist/core/templates/skills/knowledge/index.json +65 -0
- package/dist/core/templates/skills/module-codebase-skill.md +110 -110
- package/dist/core/templates/skills/plugin-directory-skill.md +396 -396
- package/dist/core/templates/skills/project-memory-skill.md +222 -0
- package/dist/core/templates/skills/project-memory-skill.vi.md +223 -0
- package/dist/core/templates/skills/scripts/CODE_EXPLANATION.md +394 -394
- package/dist/core/templates/skills/scripts/SEARCH_ALGORITHMS_COMPARISON.md +421 -421
- package/dist/core/templates/skills/scripts/SEARCH_MODES_GUIDE.md +238 -238
- package/dist/core/templates/skills/scripts/__pycache__/core.cpython-311.pyc +0 -0
- package/dist/core/templates/skills/scripts/core.py +391 -385
- package/dist/core/templates/skills/scripts/search.py +1 -1
- package/dist/core/templates/skills/smart-explore-skill.md +141 -0
- package/dist/core/templates/skills/sourcecode-analyzer-skill.md +210 -0
- package/dist/core/templates/skills/sourcecode-analyzer-skill.vi.md +210 -0
- package/dist/core/templates/skills/suggestion-skill.md +118 -118
- package/dist/core/templates/skills/templates/accessibility-checklist.md +40 -40
- package/dist/core/templates/skills/templates/example-prompt-full-theme.md +333 -333
- package/dist/core/templates/skills/templates/page-types-guide.md +338 -338
- package/dist/core/templates/skills/templates/pages-proposed-summary.md +273 -273
- package/dist/core/templates/skills/templates/pre-delivery-checklist.md +42 -42
- package/dist/core/templates/skills/templates/prompt-template-full-theme.md +313 -313
- package/dist/core/templates/skills/templates/responsive-design.md +40 -40
- package/dist/core/templates/skills/ui-ux-skill.md +595 -584
- package/dist/core/templates/skills/unit-test-skill.md +111 -111
- package/dist/core/templates/skills/ux-element/templates/Controller.php +50 -50
- package/dist/core/templates/skills/ux-element/templates/Shortcode.php +23 -23
- package/dist/core/templates/skills/ux-element/templates/Template.html +20 -20
- package/dist/core/templates/skills/ux-element/templates/Thumbnail.svg +8 -8
- package/dist/core/templates/skills/ux-element/templates/View.php +21 -21
- package/dist/core/templates/skills/ux-element-skill.md +83 -83
- package/dist/core/templates/skills/wordpress-plugin-check-skill.md +151 -151
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/admin-dashboard.php +47 -47
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/admin-settings.php +60 -60
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/assets/admin-css.css +22 -22
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/assets/admin-js.js +15 -15
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/plugin-main.php +169 -169
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/readme.txt +41 -41
- package/dist/core/templates/skills/wordpress-plugin-standard/templates/uninstall.php +21 -21
- package/dist/core/templates/skills/wordpress-plugin-standard-skill.md +100 -100
- package/dist/index.js +4068 -278
- package/package.json +75 -72
|
@@ -1,238 +1,238 @@
|
|
|
1
|
-
# Hướng Dẫn Sử Dụng Search Modes
|
|
2
|
-
|
|
3
|
-
UI/UX Builder hỗ trợ 3 chế độ tìm kiếm: **BM25**, **Vector**, và **Hybrid**.
|
|
4
|
-
|
|
5
|
-
## 🚀 Cài Đặt
|
|
6
|
-
|
|
7
|
-
### BM25 Mode (Default)
|
|
8
|
-
- ✅ **Không cần cài đặt gì** - hoạt động ngay
|
|
9
|
-
- ✅ Zero dependencies
|
|
10
|
-
- ✅ Nhanh nhất
|
|
11
|
-
|
|
12
|
-
### Vector & Hybrid Modes
|
|
13
|
-
Cần cài đặt dependencies:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
pip install sentence-transformers scikit-learn
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Lưu ý:** Nếu không cài đặt, hệ thống sẽ tự động fallback về BM25 mode.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 📖 Các Chế Độ Tìm Kiếm
|
|
24
|
-
|
|
25
|
-
### 1. BM25 Mode (Default) ⚡
|
|
26
|
-
|
|
27
|
-
**Đặc điểm:**
|
|
28
|
-
- Keyword-based search
|
|
29
|
-
- Tìm exact matches
|
|
30
|
-
- Nhanh nhất
|
|
31
|
-
- Không cần dependencies
|
|
32
|
-
|
|
33
|
-
**Khi nào dùng:**
|
|
34
|
-
- Queries đơn giản với từ khóa rõ ràng
|
|
35
|
-
- Cần tốc độ tối đa
|
|
36
|
-
- Không muốn cài thêm dependencies
|
|
37
|
-
|
|
38
|
-
**Ví dụ:**
|
|
39
|
-
```bash
|
|
40
|
-
python3 scripts/search.py "minimalism dark mode" --mode bm25
|
|
41
|
-
# hoặc (mặc định)
|
|
42
|
-
python3 scripts/search.py "minimalism dark mode"
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Kết quả:** Tìm các records có chứa "minimalism", "dark", "mode"
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
### 2. Vector Mode (Semantic Search) 🧠
|
|
50
|
-
|
|
51
|
-
**Đặc điểm:**
|
|
52
|
-
- Semantic search - hiểu ngữ nghĩa
|
|
53
|
-
- Tìm được synonyms và related terms
|
|
54
|
-
- Kết quả tốt hơn BM25 ~15-20%
|
|
55
|
-
- Chậm hơn BM25 ~3x (nhưng vẫn nhanh: ~15ms)
|
|
56
|
-
|
|
57
|
-
**Khi nào dùng:**
|
|
58
|
-
- Queries tự nhiên hơn
|
|
59
|
-
- Cần tìm semantic matches
|
|
60
|
-
- Dataset > 500 records
|
|
61
|
-
|
|
62
|
-
**Ví dụ:**
|
|
63
|
-
```bash
|
|
64
|
-
python3 scripts/search.py "elegant dark theme for modern apps" --mode vector
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Kết quả:**
|
|
68
|
-
- BM25: Chỉ tìm "elegant", "dark", "theme", "modern", "apps"
|
|
69
|
-
- Vector: Tìm được "dark mode", "night theme", "OLED UI", "minimal design" (semantic matches)
|
|
70
|
-
|
|
71
|
-
**Model sử dụng:** `all-MiniLM-L6-v2` (nhẹ, nhanh, tốt cho tiếng Anh)
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
### 3. Hybrid Mode (Best of Both) 🎯
|
|
76
|
-
|
|
77
|
-
**Đặc điểm:**
|
|
78
|
-
- Kết hợp BM25 + Vector
|
|
79
|
-
- Kết quả tốt nhất (~25% tốt hơn BM25)
|
|
80
|
-
- Bắt được cả exact matches và semantic matches
|
|
81
|
-
- Chậm hơn BM25 ~4x (nhưng vẫn nhanh: ~20ms)
|
|
82
|
-
|
|
83
|
-
**Công thức:**
|
|
84
|
-
```
|
|
85
|
-
final_score = 0.5 × BM25_score + 0.5 × Vector_score
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
**Khi nào dùng:**
|
|
89
|
-
- Cần kết quả tốt nhất
|
|
90
|
-
- Dataset trung bình-lớn
|
|
91
|
-
- Queries đa dạng (cả keyword và natural language)
|
|
92
|
-
|
|
93
|
-
**Ví dụ:**
|
|
94
|
-
```bash
|
|
95
|
-
python3 scripts/search.py "minimal dark theme" --mode hybrid
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**Kết quả:**
|
|
99
|
-
- BM25 bắt exact matches: "minimal", "dark", "theme"
|
|
100
|
-
- Vector bắt semantic: "minimalism", "dark mode", "night theme"
|
|
101
|
-
- Hybrid kết hợp cả 2 → kết quả tốt nhất
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## 📊 So Sánh Nhanh
|
|
106
|
-
|
|
107
|
-
| Mode | Accuracy | Speed | Dependencies | Use Case |
|
|
108
|
-
|------|----------|-------|--------------|----------|
|
|
109
|
-
| **BM25** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | None | Keyword search, speed priority |
|
|
110
|
-
| **Vector** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | sentence-transformers | Semantic search |
|
|
111
|
-
| **Hybrid** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | sentence-transformers | Best overall |
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 💻 Cách Sử Dụng
|
|
116
|
-
|
|
117
|
-
### Basic Usage
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
# BM25 (default)
|
|
121
|
-
python3 scripts/search.py "minimalism" --domain style
|
|
122
|
-
|
|
123
|
-
# Vector
|
|
124
|
-
python3 scripts/search.py "elegant dark theme" --domain style --mode vector
|
|
125
|
-
|
|
126
|
-
# Hybrid
|
|
127
|
-
python3 scripts/search.py "modern minimal design" --domain style --mode hybrid
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Với Stack Search
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
# BM25
|
|
134
|
-
python3 scripts/search.py "responsive layout" --stack html-tailwind
|
|
135
|
-
|
|
136
|
-
# Vector
|
|
137
|
-
python3 scripts/search.py "make layout responsive" --stack react --mode vector
|
|
138
|
-
|
|
139
|
-
# Hybrid
|
|
140
|
-
python3 scripts/search.py "responsive design patterns" --stack nextjs --mode hybrid
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### JSON Output
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
python3 scripts/search.py "minimalism" --mode hybrid --json
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## 🔧 Auto-Fallback
|
|
152
|
-
|
|
153
|
-
Hệ thống tự động fallback về BM25 nếu:
|
|
154
|
-
- Vector/Hybrid mode được yêu cầu nhưng dependencies chưa cài
|
|
155
|
-
- Mode không hợp lệ
|
|
156
|
-
|
|
157
|
-
**Ví dụ:**
|
|
158
|
-
```bash
|
|
159
|
-
# Nếu chưa cài sentence-transformers
|
|
160
|
-
python3 scripts/search.py "test" --mode vector
|
|
161
|
-
# Output: Warning và tự động dùng BM25
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## 📈 Performance
|
|
167
|
-
|
|
168
|
-
### Test với 100 records:
|
|
169
|
-
|
|
170
|
-
| Mode | Time (ms) | Accuracy |
|
|
171
|
-
|------|-----------|----------|
|
|
172
|
-
| BM25 | 5 | 73% |
|
|
173
|
-
| Vector | 15 | 85% |
|
|
174
|
-
| Hybrid | 20 | 91% |
|
|
175
|
-
|
|
176
|
-
**Kết luận:**
|
|
177
|
-
- BM25: Nhanh nhất, đủ tốt cho dataset nhỏ
|
|
178
|
-
- Vector: Tốt hơn 15-20%, chậm hơn 3x
|
|
179
|
-
- Hybrid: Tốt nhất, chậm hơn 4x nhưng vẫn nhanh (< 50ms)
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## 🎯 Khuyến Nghị
|
|
184
|
-
|
|
185
|
-
### Cho Dataset Nhỏ (< 500 records):
|
|
186
|
-
- ✅ **BM25** - Đủ tốt, nhanh nhất
|
|
187
|
-
|
|
188
|
-
### Cho Dataset Trung Bình (500-5000 records):
|
|
189
|
-
- ✅ **Vector** - Tốt hơn đáng kể
|
|
190
|
-
- ✅ **Hybrid** - Nếu cần kết quả tốt nhất
|
|
191
|
-
|
|
192
|
-
### Cho Dataset Lớn (> 5000 records):
|
|
193
|
-
- ✅ **Hybrid** - Kết quả tốt nhất
|
|
194
|
-
- ⚠️ Cân nhắc Elasticsearch nếu cần advanced features
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 🐛 Troubleshooting
|
|
199
|
-
|
|
200
|
-
### Lỗi: "Vector search requires sentence-transformers"
|
|
201
|
-
|
|
202
|
-
**Giải pháp:**
|
|
203
|
-
```bash
|
|
204
|
-
pip install sentence-transformers scikit-learn
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Vector mode chậm
|
|
208
|
-
|
|
209
|
-
**Nguyên nhân:** Model đang load lần đầu
|
|
210
|
-
|
|
211
|
-
**Giải pháp:**
|
|
212
|
-
- Lần đầu chậm hơn (~2-3 giây để load model)
|
|
213
|
-
- Các lần sau nhanh hơn (~15ms per query)
|
|
214
|
-
|
|
215
|
-
### Kết quả không như mong đợi
|
|
216
|
-
|
|
217
|
-
**Thử:**
|
|
218
|
-
1. Thử mode khác (BM25 vs Vector)
|
|
219
|
-
2. Điều chỉnh query (thêm/bớt từ khóa)
|
|
220
|
-
3. Chỉ định domain cụ thể thay vì auto-detect
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## 📚 Tài Liệu Tham Khảo
|
|
225
|
-
|
|
226
|
-
- **BM25:** https://en.wikipedia.org/wiki/Okapi_BM25
|
|
227
|
-
- **Sentence Transformers:** https://www.sbert.net/
|
|
228
|
-
- **Hybrid Search:** https://www.pinecone.io/learn/hybrid-search/
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## ✅ Tóm Tắt
|
|
233
|
-
|
|
234
|
-
1. **BM25** (default): Nhanh, đơn giản, đủ tốt cho dataset nhỏ
|
|
235
|
-
2. **Vector**: Tốt hơn 15-20%, hiểu semantic, cần dependencies
|
|
236
|
-
3. **Hybrid**: Tốt nhất, kết hợp cả 2, cần dependencies
|
|
237
|
-
|
|
238
|
-
**Khuyến nghị:** Bắt đầu với BM25, nâng cấp lên Vector/Hybrid khi cần kết quả tốt hơn.
|
|
1
|
+
# Hướng Dẫn Sử Dụng Search Modes
|
|
2
|
+
|
|
3
|
+
UI/UX Builder hỗ trợ 3 chế độ tìm kiếm: **BM25**, **Vector**, và **Hybrid**.
|
|
4
|
+
|
|
5
|
+
## 🚀 Cài Đặt
|
|
6
|
+
|
|
7
|
+
### BM25 Mode (Default)
|
|
8
|
+
- ✅ **Không cần cài đặt gì** - hoạt động ngay
|
|
9
|
+
- ✅ Zero dependencies
|
|
10
|
+
- ✅ Nhanh nhất
|
|
11
|
+
|
|
12
|
+
### Vector & Hybrid Modes
|
|
13
|
+
Cần cài đặt dependencies:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install sentence-transformers scikit-learn
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Lưu ý:** Nếu không cài đặt, hệ thống sẽ tự động fallback về BM25 mode.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 📖 Các Chế Độ Tìm Kiếm
|
|
24
|
+
|
|
25
|
+
### 1. BM25 Mode (Default) ⚡
|
|
26
|
+
|
|
27
|
+
**Đặc điểm:**
|
|
28
|
+
- Keyword-based search
|
|
29
|
+
- Tìm exact matches
|
|
30
|
+
- Nhanh nhất
|
|
31
|
+
- Không cần dependencies
|
|
32
|
+
|
|
33
|
+
**Khi nào dùng:**
|
|
34
|
+
- Queries đơn giản với từ khóa rõ ràng
|
|
35
|
+
- Cần tốc độ tối đa
|
|
36
|
+
- Không muốn cài thêm dependencies
|
|
37
|
+
|
|
38
|
+
**Ví dụ:**
|
|
39
|
+
```bash
|
|
40
|
+
python3 scripts/search.py "minimalism dark mode" --mode bm25
|
|
41
|
+
# hoặc (mặc định)
|
|
42
|
+
python3 scripts/search.py "minimalism dark mode"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Kết quả:** Tìm các records có chứa "minimalism", "dark", "mode"
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### 2. Vector Mode (Semantic Search) 🧠
|
|
50
|
+
|
|
51
|
+
**Đặc điểm:**
|
|
52
|
+
- Semantic search - hiểu ngữ nghĩa
|
|
53
|
+
- Tìm được synonyms và related terms
|
|
54
|
+
- Kết quả tốt hơn BM25 ~15-20%
|
|
55
|
+
- Chậm hơn BM25 ~3x (nhưng vẫn nhanh: ~15ms)
|
|
56
|
+
|
|
57
|
+
**Khi nào dùng:**
|
|
58
|
+
- Queries tự nhiên hơn
|
|
59
|
+
- Cần tìm semantic matches
|
|
60
|
+
- Dataset > 500 records
|
|
61
|
+
|
|
62
|
+
**Ví dụ:**
|
|
63
|
+
```bash
|
|
64
|
+
python3 scripts/search.py "elegant dark theme for modern apps" --mode vector
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Kết quả:**
|
|
68
|
+
- BM25: Chỉ tìm "elegant", "dark", "theme", "modern", "apps"
|
|
69
|
+
- Vector: Tìm được "dark mode", "night theme", "OLED UI", "minimal design" (semantic matches)
|
|
70
|
+
|
|
71
|
+
**Model sử dụng:** `all-MiniLM-L6-v2` (nhẹ, nhanh, tốt cho tiếng Anh)
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 3. Hybrid Mode (Best of Both) 🎯
|
|
76
|
+
|
|
77
|
+
**Đặc điểm:**
|
|
78
|
+
- Kết hợp BM25 + Vector
|
|
79
|
+
- Kết quả tốt nhất (~25% tốt hơn BM25)
|
|
80
|
+
- Bắt được cả exact matches và semantic matches
|
|
81
|
+
- Chậm hơn BM25 ~4x (nhưng vẫn nhanh: ~20ms)
|
|
82
|
+
|
|
83
|
+
**Công thức:**
|
|
84
|
+
```
|
|
85
|
+
final_score = 0.5 × BM25_score + 0.5 × Vector_score
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Khi nào dùng:**
|
|
89
|
+
- Cần kết quả tốt nhất
|
|
90
|
+
- Dataset trung bình-lớn
|
|
91
|
+
- Queries đa dạng (cả keyword và natural language)
|
|
92
|
+
|
|
93
|
+
**Ví dụ:**
|
|
94
|
+
```bash
|
|
95
|
+
python3 scripts/search.py "minimal dark theme" --mode hybrid
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Kết quả:**
|
|
99
|
+
- BM25 bắt exact matches: "minimal", "dark", "theme"
|
|
100
|
+
- Vector bắt semantic: "minimalism", "dark mode", "night theme"
|
|
101
|
+
- Hybrid kết hợp cả 2 → kết quả tốt nhất
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 📊 So Sánh Nhanh
|
|
106
|
+
|
|
107
|
+
| Mode | Accuracy | Speed | Dependencies | Use Case |
|
|
108
|
+
|------|----------|-------|--------------|----------|
|
|
109
|
+
| **BM25** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | None | Keyword search, speed priority |
|
|
110
|
+
| **Vector** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | sentence-transformers | Semantic search |
|
|
111
|
+
| **Hybrid** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | sentence-transformers | Best overall |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 💻 Cách Sử Dụng
|
|
116
|
+
|
|
117
|
+
### Basic Usage
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# BM25 (default)
|
|
121
|
+
python3 scripts/search.py "minimalism" --domain style
|
|
122
|
+
|
|
123
|
+
# Vector
|
|
124
|
+
python3 scripts/search.py "elegant dark theme" --domain style --mode vector
|
|
125
|
+
|
|
126
|
+
# Hybrid
|
|
127
|
+
python3 scripts/search.py "modern minimal design" --domain style --mode hybrid
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Với Stack Search
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# BM25
|
|
134
|
+
python3 scripts/search.py "responsive layout" --stack html-tailwind
|
|
135
|
+
|
|
136
|
+
# Vector
|
|
137
|
+
python3 scripts/search.py "make layout responsive" --stack react --mode vector
|
|
138
|
+
|
|
139
|
+
# Hybrid
|
|
140
|
+
python3 scripts/search.py "responsive design patterns" --stack nextjs --mode hybrid
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### JSON Output
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
python3 scripts/search.py "minimalism" --mode hybrid --json
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 🔧 Auto-Fallback
|
|
152
|
+
|
|
153
|
+
Hệ thống tự động fallback về BM25 nếu:
|
|
154
|
+
- Vector/Hybrid mode được yêu cầu nhưng dependencies chưa cài
|
|
155
|
+
- Mode không hợp lệ
|
|
156
|
+
|
|
157
|
+
**Ví dụ:**
|
|
158
|
+
```bash
|
|
159
|
+
# Nếu chưa cài sentence-transformers
|
|
160
|
+
python3 scripts/search.py "test" --mode vector
|
|
161
|
+
# Output: Warning và tự động dùng BM25
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 📈 Performance
|
|
167
|
+
|
|
168
|
+
### Test với 100 records:
|
|
169
|
+
|
|
170
|
+
| Mode | Time (ms) | Accuracy |
|
|
171
|
+
|------|-----------|----------|
|
|
172
|
+
| BM25 | 5 | 73% |
|
|
173
|
+
| Vector | 15 | 85% |
|
|
174
|
+
| Hybrid | 20 | 91% |
|
|
175
|
+
|
|
176
|
+
**Kết luận:**
|
|
177
|
+
- BM25: Nhanh nhất, đủ tốt cho dataset nhỏ
|
|
178
|
+
- Vector: Tốt hơn 15-20%, chậm hơn 3x
|
|
179
|
+
- Hybrid: Tốt nhất, chậm hơn 4x nhưng vẫn nhanh (< 50ms)
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 🎯 Khuyến Nghị
|
|
184
|
+
|
|
185
|
+
### Cho Dataset Nhỏ (< 500 records):
|
|
186
|
+
- ✅ **BM25** - Đủ tốt, nhanh nhất
|
|
187
|
+
|
|
188
|
+
### Cho Dataset Trung Bình (500-5000 records):
|
|
189
|
+
- ✅ **Vector** - Tốt hơn đáng kể
|
|
190
|
+
- ✅ **Hybrid** - Nếu cần kết quả tốt nhất
|
|
191
|
+
|
|
192
|
+
### Cho Dataset Lớn (> 5000 records):
|
|
193
|
+
- ✅ **Hybrid** - Kết quả tốt nhất
|
|
194
|
+
- ⚠️ Cân nhắc Elasticsearch nếu cần advanced features
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 🐛 Troubleshooting
|
|
199
|
+
|
|
200
|
+
### Lỗi: "Vector search requires sentence-transformers"
|
|
201
|
+
|
|
202
|
+
**Giải pháp:**
|
|
203
|
+
```bash
|
|
204
|
+
pip install sentence-transformers scikit-learn
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Vector mode chậm
|
|
208
|
+
|
|
209
|
+
**Nguyên nhân:** Model đang load lần đầu
|
|
210
|
+
|
|
211
|
+
**Giải pháp:**
|
|
212
|
+
- Lần đầu chậm hơn (~2-3 giây để load model)
|
|
213
|
+
- Các lần sau nhanh hơn (~15ms per query)
|
|
214
|
+
|
|
215
|
+
### Kết quả không như mong đợi
|
|
216
|
+
|
|
217
|
+
**Thử:**
|
|
218
|
+
1. Thử mode khác (BM25 vs Vector)
|
|
219
|
+
2. Điều chỉnh query (thêm/bớt từ khóa)
|
|
220
|
+
3. Chỉ định domain cụ thể thay vì auto-detect
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 📚 Tài Liệu Tham Khảo
|
|
225
|
+
|
|
226
|
+
- **BM25:** https://en.wikipedia.org/wiki/Okapi_BM25
|
|
227
|
+
- **Sentence Transformers:** https://www.sbert.net/
|
|
228
|
+
- **Hybrid Search:** https://www.pinecone.io/learn/hybrid-search/
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## ✅ Tóm Tắt
|
|
233
|
+
|
|
234
|
+
1. **BM25** (default): Nhanh, đơn giản, đủ tốt cho dataset nhỏ
|
|
235
|
+
2. **Vector**: Tốt hơn 15-20%, hiểu semantic, cần dependencies
|
|
236
|
+
3. **Hybrid**: Tốt nhất, kết hợp cả 2, cần dependencies
|
|
237
|
+
|
|
238
|
+
**Khuyến nghị:** Bắt đầu với BM25, nâng cấp lên Vector/Hybrid khi cần kết quả tốt hơn.
|