Редактировать create_qdrant_collection.py
This commit is contained in:
@@ -1,99 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Скрипт для создания коллекции в Qdrant на основе core.conf.
|
||||
Используется для единой коллекции всех ботов.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
|
||||
from qdrant_client import QdrantClient
|
||||
from qdrant_client.http import models
|
||||
|
||||
|
||||
def load_config(config_path: str) -> dict:
|
||||
"""Загружает core.conf как YAML."""
|
||||
with open(config_path, 'r', encoding='utf-8') as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Создать коллекцию в Qdrant для RAG-сервера"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--config",
|
||||
default="core/core.conf",
|
||||
help="Путь к core.conf (по умолчанию core/core.conf)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--collection",
|
||||
help="Имя коллекции (переопределяет значение из core.conf)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--force",
|
||||
action="store_true",
|
||||
help="Удалить существующую коллекцию, если она есть, и создать заново"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Загружаем конфигурацию
|
||||
config_path = Path(args.config)
|
||||
if not config_path.exists():
|
||||
print(f"Ошибка: файл {config_path} не найден")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
config = load_config(config_path)
|
||||
except Exception as e:
|
||||
print(f"Ошибка загрузки конфигурации: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# Извлекаем параметры Qdrant
|
||||
qdrant_cfg = config.get('qdrant')
|
||||
if not qdrant_cfg:
|
||||
print("Ошибка: в конфиге отсутствует секция 'qdrant'")
|
||||
sys.exit(1)
|
||||
|
||||
host = qdrant_cfg.get('host', 'localhost')
|
||||
port = qdrant_cfg.get('port', 6333)
|
||||
vector_size = qdrant_cfg.get('vector_size', 1024)
|
||||
distance = qdrant_cfg.get('distance', 'Cosine')
|
||||
collection = args.collection or qdrant_cfg.get('collection')
|
||||
|
||||
if not collection:
|
||||
print("Ошибка: не указано имя коллекции (в core.conf или через --collection)")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Подключение к Qdrant: {host}:{port}")
|
||||
client = QdrantClient(host=host, port=port)
|
||||
|
||||
# Проверяем существование коллекции
|
||||
if client.collection_exists(collection):
|
||||
if args.force:
|
||||
print(f"Коллекция '{collection}' существует. Удаляем...")
|
||||
client.delete_collection(collection)
|
||||
else:
|
||||
print(f"Коллекция '{collection}' уже существует. Используйте --force для пересоздания.")
|
||||
sys.exit(0)
|
||||
|
||||
# Создаём коллекцию
|
||||
try:
|
||||
client.create_collection(
|
||||
collection_name=collection,
|
||||
vectors_config=models.VectorParams(
|
||||
size=vector_size,
|
||||
distance=models.Distance[distance.upper()]
|
||||
)
|
||||
)
|
||||
print(f"Коллекция '{collection}' успешно создана (size={vector_size}, distance={distance})")
|
||||
except Exception as e:
|
||||
print(f"Ошибка создания коллекции: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user