用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/yanacuti1121/Yana-AI --skill qdrant命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Sovereign-grade safety OS for AI coding agents. 62 hooks, 2,025 skills, L1 memory, circuit breakers, and cross-engine enforcement — blocks rm -rf, force push, pipe-to-shell, and 40+ attack vectors before they reach your repo.
Use when the user wants to generate or keep repository documentation up to date via OpenWiki (langchain-ai/openwiki) — an LLM-driven CLI that writes a wiki for a codebase (or a personal knowledge base from Notion/Gmail/Slack/X/web search) and keeps it fresh via a scheduled CI pull request. Examples: "set up OpenWiki for this repo", "keep the docs updated automatically", "generate an agent wiki".
Use when implementing the core AR pipeline (camera pose estimation, marker tracking, projection overlay) from first principles — not when just using ARKit/ARCore/Unity's AR framework as a black box. Triggers on: 'build augmented reality from scratch', 'marker-based AR tracking', 'camera pose estimation', 'implement fiducial marker detection', 'AR projection matrix math', 'markerless AR tracking'. Covers marker-based vs markerless tracking, pose estimation, and the projection math to overlay 3D content on a camera feed.
基于 SOC 职业分类
正在显示 SKILL.md
| name | qdrant |
| description | Qdrant vector database — collections, upsert, search, filtering, payloads, sparse vectors, BM25 |
| triggers | ["qdrant","vector database qdrant","qdrant collection","qdrant search","qdrant upsert","sparse dense hybrid search","qdrant filter","qdrant payload","qdrant python client","vector store qdrant"] |
| do_not_use_for | ["relational queries — use PostgreSQL/SQLite","full-text only — use Elasticsearch","generic key-value store — use Redis"] |
| see_also | ["ragas","langfuse","crawl4ai","firecrawl"] |
from qdrant_client import QdrantClient
from qdrant_client.models import (
Distance, VectorParams, PointStruct,
Filter, FieldCondition, MatchValue, Range,
SparseVectorParams, SparseIndexParams,
)
# Local (in-memory for dev)
client = QdrantClient(":memory:")
# Local persistent
client = QdrantClient(path="./qdrant_storage")
# Remote
client = QdrantClient(
url="http://localhost:6333",
api_key="your-api-key", # for Qdrant Cloud
timeout=30,
)
# Create collection
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(
size=1536, # OpenAI ada-002 dim
distance=Distance.COSINE, # COSINE | EUCLID | DOT
),
)
# With multiple named vectors
from qdrant_client.models import NamedVectorStruct
client.create_collection(
collection_name="multi_vec",
vectors_config={
"dense": VectorParams(size=1536, distance=Distance.COSINE),
"sparse": SparseVectorParams(index=SparseIndexParams(on_disk=False)),
},
)
from qdrant_client.models import PointStruct
# Single or batch upsert
client.upsert(
collection_name="documents",
points=[
PointStruct(
id=1, # int or UUID string
vector=[0.1, 0.2, ...], # 1536-dim float list
payload={
"text": "Document content",
"source": "wiki",
"year": 2024,
"tags": ["ml", "nlp"],
},
),
PointStruct(id=2, vector=embed("Second doc"), payload={"text": "..."}),
],
wait=True, # wait for indexing
)
# Batch upsert from embeddings
texts = ["doc1", "doc2", "doc3"]
embeddings = embed_batch(texts) # returns List[List[float]]
points = [
PointStruct(id=i, vector=vec, payload={"text": t})
for i, (t, vec) in enumerate(zip(texts, embeddings))
]
client.upsert(collection_name="documents", points=points)
# Basic similarity search
results = client.search(
collection_name="documents",
query_vector=embed("machine learning"),
limit=5,
with_payload=True,
score_threshold=0.7, # minimum score
)
for r in results:
print(r.score, r.payload["text"])
# Filtered search
results = client.search(
collection_name="documents",
query_vector=embed("neural networks"),
query_filter=Filter(
must=[
FieldCondition(key="source", match=MatchValue(value="wiki")),
FieldCondition(key="year", range=Range(gte=2022, lte=2024)),
],
should=[
FieldCondition(key="tags", match=MatchValue(value="ml")),
],
),
limit=10,
with_payload=["text", "source"], # select payload fields
)
from qdrant_client.models import SparseVector, NamedVector, NamedSparseVector
# Sparse vector (BM25-style from fastembed)
from fastembed import SparseTextEmbedding
sparse_model = SparseTextEmbedding("prithivida/Splade_PP_en_v1")
def get_sparse(text: str) -> SparseVector:
emb = list(sparse_model.embed([text]))[0]
return SparseVector(indices=emb.indices.tolist(), values=emb.values.tolist())
# Hybrid search with RRF fusion
from qdrant_client.models import Prefetch, FusionQuery, Fusion
results = client.query_points(
collection_name="multi_vec",
prefetch=[
Prefetch(query=embed_dense(query), using="dense", limit=20),
Prefetch(query=get_sparse(query), using="sparse", limit=20),
],
query=FusionQuery(fusion=Fusion.RRF), # Reciprocal Rank Fusion
limit=5,
with_payload=True,
)
from qdrant_client.models import PayloadSchemaType
# Create index for faster filtered search
client.create_payload_index(
collection_name="documents",
field_name="source",
field_schema=PayloadSchemaType.KEYWORD,
)
client.create_payload_index(
collection_name="documents",
field_name="year",
field_schema=PayloadSchemaType.INTEGER,
)
# Get by ID
points = client.retrieve(
collection_name="documents",
ids=[1, 2, 3],
with_payload=True,
with_vectors=False,
)
# Delete
client.delete(
collection_name="documents",
points_selector=Filter(
must=[FieldCondition(key="source", match=MatchValue(value="old"))]
),
)
# Update payload
client.set_payload(
collection_name="documents",
payload={"updated": True},
points=[1, 2],
)
# Scroll (iterate all points)
offset = None
while True:
result, offset = client.scroll(
collection_name="documents",
limit=100,
offset=offset,
with_payload=True,
)
if not result:
break
process_batch(result)
# List collections
colls = client.get_collections()
names = [c.name for c in colls.collections]
# Collection info
info = client.get_collection("documents")
print(info.points_count, info.vectors_count)
# Delete collection
client.delete_collection("documents")
# Recreate (idempotent)
client.recreate_collection(
collection_name="documents",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
)
VectorParams(size=...) exactly — mismatches raise Unprocessableid must be int or UUID string — nested objects raise validation errorscore_threshold filters out points — if no results, lower threshold or check embeddingswait=True on upsert ensures indexing before search — omit only for fire-and-forget ingestionSparseVectorParams in collection config — can't add after creation without recreationquery_points (v1.7+) replaces legacy search API — check client version