Skills Plugins MCP Prompt Model 博客 我的中心

qdrant

Vector search engine for production RAG systems.

DeepseekModel 官方收录技能 质量 优秀 · 90 v1.0.0

获取

https://deepseekmodel.com/api/download.php?id=nousresearch-hermes-agent-optional-skills-mlops-qdrant-skill-md&format=skill
下载 .skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name qdrant description Vector search engine for production RAG systems. version 1.0.1 author Orchestra Research license MIT dependencies ["qdrant-client>=1.14.0"] platforms ["linux","macos","windows"] metadata {"hermes":{"tags":["RAG","Vector Search","Qdrant","Semantic Search","Embeddings","Similarity Search","HNSW","Production","Distributed"]}} Qdrant - Vector Similarity Search Engine High-performance vector database written in Rust for production RAG and semantic search. When to use Qdrant Use Qdrant when: Building production RAG systems requiring low latency Need hybrid search (vectors + metadata filtering) Require horizontal scaling with sharding/replication Want on-premise deployment with full data control Need multi-vector storage per record (dense + sparse) Building real-time recommendation systems Key features: Rust-powered : Memory-safe, high performance Rich filtering : Filter by any payload field during search Multiple vectors : Dense, sparse, multi-dense per point Quantization : Scalar, product, binary for memory efficiency Distributed : Raft consensus, sharding, replication REST + gRPC : Both APIs with full feature parity Use alternatives instead: Chroma : Simpler setup, embedded use cases FAISS : Maximum raw speed, research/batch processing Pinecone : Fully managed, zero ops preferred Weaviate : GraphQL preference, built-in vectorizers Quick start Installation # Python client pip install qdrant-client # Docker (recommended for development) docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant # Docker with persistent storage docker run -p 6333:6333 -p 6334:6334 \ -v $( pwd )/qdrant_storage:/qdrant/storage \ qdrant/qdrant Basic usage from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams, PointStruct # Connect to Qdrant client = QdrantClient(host= "localhost" , port= 6333 ) # Create collection client.create_collection( collection_name= "documents" , vectors_config=VectorParams(size= 384 , distance=Distance.COSINE) ) # Insert vectors with payload client.upsert( collection_name= "documents" , points=[ PointStruct( id = 1 , vector=[ 0.1 , 0.2 , ...], # 384-dim vector payload={ "title" : "Doc 1" , "category" : "tech" } ), PointStruct( id = 2 , vector=[ 0.3 , 0.4 , ...], payload={ "title" : "Doc 2" , "category" : "science" } ) ] ) # Search with filtering (query_points is the current API; client.search is removed in qdrant-client 1.14+) response = client.query_points( collection_name= "documents" , query=[ 0.15 , 0.25 , ...], query_filter={ "must" : [{ "key" : "category" , "match" : { "value" : "tech" }}] }, limit= 10 ) for point in response.points: print ( f"ID: {point. id } , Score: {point.score} , Payload: {point.payload} " ) Core concepts Points - Basic data unit from qdrant_client.models import PointStruct # Point = ID + Vector(s) + Payload point = PointStruct( id = 123 , # Integer or UUID string vector=[ 0.1 , 0.2 , 0.3 , ...], # Dense vector payload={ # Arbitrary JSON metadata "title" : "Document title" , "category" : "tech" , "timestamp" : 1699900000 , "tags" : [ "python" , "ml" ] } ) # Batch upsert (recommended) client.upsert( collection_name= "documents" , points=[point1, point2, point3], wait= True # Wait for indexing ) Collections - Vector containers from qdrant_client.models import VectorParams, Distance, HnswConfigDiff # Create with HNSW configuration client.create_collection( collection_name= "documents" , vectors_config=VectorParams( size= 384 , # Vector dimensions distance=Distance.COSINE # COSINE, EUCLID, DOT, MANHATTAN ), hnsw_config=HnswConfigDiff( m= 16 , # Connections per node (default 16) ef_construct= 100 , # Build-time accuracy (default 100) full_scan_threshold= 10000 # Switch to brute force below this ), on_disk_payload= True # Store payload on disk ) # Collection info info = client.get_collection( "documents" ) print ( f"Points: {info.points_count} , Vectors: {info.vectors_count} " ) Distance metrics Metric Use Case Range COSINE Text embeddings, normalized vectors 0 to 2 EUCLID Spatial data, image features 0 to ∞ DOT Recommendations, unnormalized -∞ to ∞ MANHATTAN Sparse features, discrete data 0 to ∞ Search operations Basic search # Simple nearest neighbor search (returns a QueryResponse; use .points) response = client.query_points( collection_name= "documents" , query=[ 0.1 , 0.2 , ...], limit= 10 , with_payload= True , with_vectors= False # Don't return vectors (faster) ) results = response.points Filtered search from qdrant_client.models import Filter, FieldCondition, MatchValue, Range # Complex filtering response = client.query_points( collection_name= "documents" , query=query_embedding, query_filter=Filter( must=[ FieldCondition(key= "category" , match =MatchValue(value= "tech" )), FieldCondition(key= "timestamp" , range =Range(gte= 1699000000 )) ], must_not=[ FieldCondition(key= "status" , match =MatchValue(value= "archived" )) ] ), limit= 10 ).points # Shorthand filter syntax response = client.query_points( collection_name= "documents" , query=query_embedding, query_filter={ "must" : [ { "key" : "category" , "match" : { "value" : "tech" }}, { "key" : "price" , "range" : { "gte" : 10 , "lte" : 100 }} ] }, limit= 10 ).points Batch search from qdrant_client.models import QueryRequest # Multiple queries in one request (search_batch is replaced by query_batch_points) responses = client.query_batch_points( collection_name= "documents" , requests=[ QueryRequest(query=[ 0.1 , ...], limit= 5 ), QueryRequest(query=[ 0.2 , ...], limit= 5 , filter ={ "must" : [...]}), QueryRequest(query=[ 0.3 , ...], limit= 10 ) ] ) # Each element is a QueryResponse; use .points for resp in responses: for point in resp.points: print (point. id , point.score) RAG integration With sentence-transformers from sentence_transformers import SentenceTransformer from qdrant_client import QdrantClient from qdrant_client.models import VectorParams, Distance, PointStruct # Initialize encoder = SentenceTransformer( "all-MiniLM-L6-v2" ) client = QdrantClient(host= "localhost" , port= 6333 ) # Create collection client.create_collection( collection_name= "knowledge_base" , vectors_config=VectorParams(size= 384 , distance=Distance.COSINE) ) # Index documents documents = [ { "id" : 1 , "text" : "Python is a programming language" , "source" : "wiki" }, { "id" : 2 , "text" : "Machine learning uses algorithms" , "source" : "textbook" }, ] points = [ PointStruct( id =doc[ "id" ], vector=encoder.encode(doc[ "text" ]).tolist(), payload={ "text" : doc[ "text" ], "source" : doc[ "source" ]} ) for doc in documents ] client.upsert(collection_name= "knowledge_base" , points=points) # RAG retrieval def retrieve ( query: str , top_k: int = 5 ) -> list [ dict ]: query_vector = encoder.encode(query).tolist() response = client.query_points( collection_name= "knowledge_base" , query=query_vector, limit=top_k ) return [{ "text" : r.payload[ "text" ], "score" : r.score} for r in response.points] # Use in RAG pipeline context = retrieve( "What is Python?" ) prompt = f"Context: {context} \n\nQuestion: What is Python?" With LangChain from langchain_community.vectorstores import Qdrant from langchain_community.embeddings import HuggingFaceEmbeddings embeddings = HuggingFaceEmbeddings(model_name= "all-MiniLM-L6-v2" ) vectorstore = Qdrant.from_documents(documents, embeddings, url= "http://localhost:6333" , collection_name= "docs" ) retriever = vectorstore.as_retriever(search_kwargs={ "k" : 5 }) With LlamaIndex from llama_index.vector_stores.qdrant import QdrantVectorStore from llama_index.core import VectorStoreIndex, StorageContext vector_store = QdrantVectorStore(client=client, collection_name= "llama_docs" ) storage_context = StorageContext.from_defaults(vector_store=vector_store) index = VectorStoreIndex.from_documents(documents, storage_context=storage_context) query_engine = index.as_query_engine() Multi-vector support Named vectors (different embedding models) from qdrant_client.models import VectorParams, Distance # Collection with multiple vector types client.create_collection( collection_name= "hybrid_search" , vectors_config={ "dense" : VectorParams(size= 384 , distance=Distance.COSINE), "sparse" : VectorParams(size= 30000 , distance=Distance.DOT) } ) # Insert with named vectors client.upsert( collection_name= "hybrid_search" , points=[ PointStruct( id = 1 , vector={ "dense" : dense_embedding, "sparse" : sparse_embedding }, payload={ "text" : "document text" } ) ] ) # Search specific named vector (pass the vector name via `using`) response = client.query_points( collection_name= "hybrid_search" , query=query_dense, using= "dense" , # Specify which named vector to search limit= 10 ) results = response.points Sparse vectors (BM25, SPLADE) from qdrant_client.models import SparseVectorParams, SparseIndexParams, SparseVector # Collection with sparse vectors client.create_collection( collection_name= "sparse_search" , vectors_config={}, sparse_vectors_config={ "text" : SparseVectorParams(index=SparseIndexParams(on_disk= False ))} ) # Insert sparse vector client.upsert( collection_name= "sparse_search" , points=[PointStruct( id = 1 , vector={ "text" : SparseVector(indices=[ 1 , 5 , 100 ], values=[ 0.5 , 0.8 , 0.2 ])}, payload={ "text" : "document" })] ) Quantization (memory optimization) from qdrant_client.models import ScalarQuantization, ScalarQuantizationConfig, ScalarType # Scalar quantization (4x memory reduction) client.create_collection( collection_name= "quantized" , vectors_config=VectorParams(size= 384 , distance=Distance.COSINE), quantization_config=ScalarQuantization( scalar=ScalarQuantizationConfig( type =ScalarType.INT8, quantile= 0.99 , # Clip outliers always_ram= True # Keep quantized in RAM ) ) ) # Search with rescoring response = client.query_points( collection_name= "quantized" , query=query, search_params={ "quantization" : { "rescore" : True }}, # Rescore top results limit= 10 ) results = response.points Payload indexing from qdrant_client.models import PayloadSchemaType # Create payload index for faster filtering client.create_payload_index( collection_name= "documents" , field_name= "category" , field_schema=PayloadSchemaType.KEYWORD ) client.create_payload_index( collection_name= "documents" , field_name= "timestamp" , field_schema=PayloadSchemaType.INTEGER ) # Index types: KEYWORD, INTEGER, FLOAT, GEO, TEXT (full-text), BOOL Production deployment Qdrant Cloud from qdrant_client import QdrantClient # Connect to Qdrant Cloud client = QdrantClient( url= "https://your-cluster.cloud.qdrant.io" , api_key= "your-api-key" ) Performance tuning
Agent 识别该技能的关键词,点击任意一个即可复制。

该技能未提供触发词。

下载的 .skill 包内含以下字段。
字段 说明
format格式标识(skill/v1)
skill_id技能唯一 ID
name技能名称
version版本号
description技能描述
category所属分类(数组)
trigger_words触发词列表
tags标签列表
source来源标识
source_url来源链接(本页地址)
exported_at导出时间(每次下载生成)
system_prompt系统提示词正文
model_config模型参数:provider / model / temperature / max_tokens / top_p
examples示例
install_guide各平台导入说明(Coze / Dify / Claude / 自定义框架)
同一份技能可按不同平台格式导出。
.skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用 下载
.skillpro 增强格式,额外含脚本 / 工具 / 依赖 / 钩子占位 下载
.json 纯 JSON 导出,只含 system_prompt 与模型参数 下载
Coze 带 frontmatter 的 Markdown,Coze 平台导入用 下载
Dify Dify DSL,创建应用后直接导入 下载

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。