yusyus
359f2667f5
feat: Add Qdrant vector database adaptor (Task #13)
🎯 What's New
- Qdrant vector database adaptor for semantic search
- Point-based storage with rich metadata payloads
- REST API compatible JSON format
- Advanced filtering and search capabilities
📦 Implementation Details
Qdrant is a production-ready vector search engine with built-in metadata support.
Unlike FAISS (which needs external metadata), Qdrant stores vectors and payloads
together in collections with points.
**Key Components:**
- src/skill_seekers/cli/adaptors/qdrant.py (466 lines)
- QdrantAdaptor class inheriting from SkillAdaptor
- _generate_point_id(): Deterministic UUID (version 5)
- format_skill_md(): Converts docs to Qdrant points format
- package(): Creates JSON with collection_name, points, config
- upload(): Comprehensive example code (350+ lines)
**Output Format:**
{
"collection_name": "ansible",
"points": [
{
"id": "uuid-string",
"vector": null, // User generates embeddings
"payload": {
"content": "document text",
"source": "...",
"category": "...",
"file": "...",
"type": "...",
"version": "..."
}
}
],
"config": {
"vector_size": 1536,
"distance": "Cosine"
}
}
**Key Features:**
1. Native metadata support (payloads stored with vectors)
2. Advanced filtering (must/should/must_not conditions)
3. Hybrid search capabilities
4. Snapshot support for backups
5. Scroll API for pagination
6. Recommend API for similarity recommendations
**Example Code Includes:**
1. Local and cloud Qdrant client setup
2. Collection creation with vector configuration
3. Embedding generation with OpenAI
4. Batch point upload with PointStruct
5. Search with metadata filtering (category, type, etc.)
6. Complex filtering with must/should/must_not
7. Update point payloads dynamically
8. Delete points by filter
9. Collection statistics and monitoring
10. Scroll API for retrieving all points
11. Snapshot creation for backups
12. Recommend API for finding similar documents
🔧 Files Changed
- src/skill_seekers/cli/adaptors/__init__.py
- Added QdrantAdaptor import
- Registered 'qdrant' in ADAPTORS dict
- src/skill_seekers/cli/package_skill.py
- Added 'qdrant' to --target choices
- src/skill_seekers/cli/main.py
- Added 'qdrant' to unified CLI --target choices
✅ Testing
- Tested with ansible skill: skill-seekers-package output/ansible --target qdrant
- Verified JSON structure with jq
- Output: ansible-qdrant.json (9.8 KB, 1 point)
- Collection name: ansible
- Vector size: 1536 (OpenAI ada-002)
- Distance metric: Cosine
📊 Week 2 Progress: 4/9 tasks complete
Task #13 Complete ✅
- Weaviate (Task #10) ✅
- Chroma (Task #11) ✅
- FAISS (Task #12) ✅
- Qdrant (Task #13) ✅ ← Just completed
Next: Task #14 (Streaming ingestion for large docs)
🎉 Milestone: All 4 major vector databases now supported!
- Weaviate (GraphQL, schema-based)
- Chroma (simple arrays, embeddings-first)
- FAISS (similarity search library, external metadata)
- Qdrant (REST API, point-based, native payloads)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 23:50:02 +03:00
..
2026-02-05 23:50:02 +03:00
2026-01-31 17:03:40 +03:00
2026-02-03 21:37:54 +03:00
2026-01-17 17:48:15 +00:00
2026-02-05 22:08:37 +03:00
2026-02-05 22:08:37 +03:00
2026-02-05 22:18:27 +03:00
2026-01-17 23:25:12 +03:00
2026-02-03 21:37:54 +03:00
2026-02-03 21:37:54 +03:00
2026-01-31 21:30:00 +03:00
2026-01-31 14:56:00 +03:00
2026-02-02 21:06:01 +03:00
2026-01-17 23:25:12 +03:00
2026-01-17 17:29:21 +00:00
2026-02-03 21:37:54 +03:00
2026-02-04 21:16:13 +03:00
2026-02-04 10:14:20 +01:00
2026-01-17 17:48:15 +00:00
2026-01-17 17:48:15 +00:00
2026-01-17 23:25:12 +03:00
2026-01-17 23:02:11 +03:00
2026-01-17 23:25:12 +03:00
2026-02-02 21:06:01 +03:00
2026-01-27 21:10:40 +03:00
2026-01-31 22:17:19 +03:00
2026-01-17 23:02:11 +03:00
2026-01-17 17:48:15 +00:00
2026-02-04 21:01:40 +03:00
2026-01-17 17:29:21 +00:00
2026-01-17 23:56:24 +03:00
2026-01-18 00:01:30 +03:00
2026-02-05 23:50:02 +03:00
2026-01-17 17:29:21 +00:00
2026-01-17 17:48:15 +00:00
2026-01-17 17:29:21 +00:00
2026-02-05 23:50:02 +03:00
2026-02-05 22:18:27 +03:00
2026-01-31 21:30:00 +03:00
2026-01-27 21:11:21 +03:00
2026-01-17 23:33:34 +03:00
2026-01-17 17:48:15 +00:00
2026-01-17 23:02:11 +03:00
2026-01-17 17:48:15 +00:00
2026-01-17 23:25:12 +03:00
2026-02-03 21:37:54 +03:00
2026-01-17 17:48:15 +00:00
2026-01-17 17:48:15 +00:00
2026-02-03 21:37:54 +03:00
2026-01-17 23:25:12 +03:00
2026-01-18 00:01:30 +03:00
2026-01-27 21:10:40 +03:00
2026-01-31 21:30:00 +03:00
2026-01-17 22:54:40 +03:00
2026-01-17 22:54:40 +03:00