mirror of
https://gitverse.ru/kpa39l/rag-pipeline-docker.git
synced 2026-09-29 09:15:11 +00:00
Initial commit: Hermes skill rag-pipeline-docker
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
test_qdrant_search.py — Тестовый скрипт поиска по Qdrant.
|
||||
Берёт текст, получает эмбеддинг через Ollama, ищет в Qdrant.
|
||||
|
||||
Использование: python3 scripts/test_qdrant_search.py --query "текст"
|
||||
"""
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
|
||||
OLLAMA_URL = "http://localhost:11434/api/embeddings"
|
||||
EMBEDDING_MODEL = "nomic-embed-text:latest"
|
||||
QDRANT_SEARCH_URL = "http://localhost:6333/collections/knowledge_base/points/search"
|
||||
TOP_K = 5
|
||||
|
||||
|
||||
def get_embedding(text: str) -> list[float]:
|
||||
payload = json.dumps({"model": EMBEDDING_MODEL, "prompt": text}).encode()
|
||||
req = urllib.request.Request(OLLAMA_URL, data=payload,
|
||||
headers={"Content-Type": "application/json"})
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
data = json.loads(resp.read())
|
||||
return data.get("embedding")
|
||||
|
||||
|
||||
def search_qdrant(vector: list[float], top_k: int = TOP_K) -> list[dict]:
|
||||
payload = json.dumps({
|
||||
"vector": {"name": "dense", "vector": vector},
|
||||
"limit": top_k,
|
||||
"with_payload": True,
|
||||
"with_vector": False,
|
||||
}).encode()
|
||||
req = urllib.request.Request(QDRANT_SEARCH_URL, data=payload,
|
||||
headers={"Content-Type": "application/json"})
|
||||
with urllib.request.urlopen(req, timeout=15) as resp:
|
||||
data = json.loads(resp.read())
|
||||
return data.get("result", [])
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--query", "-q", required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
vector = get_embedding(args.query)
|
||||
print(f"Embedding: {len(vector)} dims")
|
||||
|
||||
results = search_qdrant(vector)
|
||||
print(f"Results: {len(results)}")
|
||||
for i, r in enumerate(results, 1):
|
||||
payload = r.get("payload", {})
|
||||
text = (payload.get("text") or payload.get("content", ""))[:200]
|
||||
print(f" #{i} score={r['score']:.4f} | {payload.get('source','?')} | {text}...")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user