import gradio as gr from datasets import load_dataset # Вставь сюда свой адрес датасета DATASET_ID = "username/dataset_name" dataset = load_dataset(DATASET_ID) def get_sample(n=10): # Берём первый сплит (train/validation/test), если есть split_name = next(iter(dataset)) rows = [] for i, item in enumerate(dataset[split_name]): if i >= n: break rows.append(item) return rows demo = gr.Interface( fn=get_sample, inputs=gr.Slider(minimum=1, maximum=50, value=10, label="Сколько строк показать"), outputs=gr.JSON(label="Примеры из датасета"), title="Просмотр датасета", description="Показывает первые N строк из датасета на Hugging Face" ) demo.launch()import gradio as gr from datasets import load_dataset from sentence_transformers import SentenceTransformer from sklearn.metrics.pairwise import cosine_similarity import numpy as np import random DATASET_ID = "username/dataset_name" # твой датасет EMBEDDING_MODEL = "all-MiniLM-L6-v2" # маленькая, но хорошая модель для эмбеддингов # 1. Загружаем датасет и эмбеддинги dataset = load_dataset(DATASET_ID) split_name = next(iter(dataset)) texts = [item.get("text", "") for item in dataset[split_name] if item.get("text")] if len(texts) == 0: raise ValueError("В датасете нет поля 'text' или он пустой.") model_emb = SentenceTransformer(EMBEDDING_MODEL) # Для больших датасетов лучше не считать все эмбеддинги сразу, а кэшировать text_embeddings = model_emb.encode(texts, convert_to_numpy=True) def retrieve_context(query, top_k=3): q_emb = model_emb.encode([query], convert_to_numpy=True) sims = cosine_similarity(q_emb, text_embeddings)[0] top_indices = np.argsort(sims)[::-1][:top_k] return [texts[i] for i in top_indices if sims[i] > 0.1] # фильтр по порогу def chat(message, history): context_chunks = retrieve_context(message) context = "\n\n".join(context_chunks) if context_chunks else "Контекст не найден." # Здесь вместо реального вызова LLM — заглушка, чтобы всё работало сразу prompt = f"Ответь на вопрос по предоставленному контексту. Если контекста недостаточно, скажи, что не знаешь.\n\nКонтекст:\n{context}\n\nВопрос: {message}" response = f"[Демо] Я нашёл контекст:\n{prompt}" # сюда потом вставишь реальный LLM return response, history demo = gr.ChatInterface( fn=chat, title="Чат по моему датасету (RAG demo)", description="Отвечает строго по данным из твоего датасета" ) demo.launch()datasets sentence-transformers scikit-learn gradio