Cerca documenti per somiglianza semantica

Endpoint di ricerca semantica con capacità di elaborazione in batch

get

Initiate a search operation with a query text of up to 400 words and receive the most semantically similar responses from the stored knowledge. For question-answering, convert your question into an ideal answer and submit it to receive similar real answers.

Query parameters
qstringOptional

Up to 400 words sentence for which you wish to find semantically similar chunks of knowledge.

nintegerOptional

Number of semantically similar chunks of text to return. Use 'n=3' for up to 5, and 'n=10' for more information. If you do not receive enough information, consider trying again with a larger 'n' value.

Responses
200
Successful retrieval of documents
application/json
get
GET /api/v1/documents/search/ HTTP/1.1
Host: api.rememberizer.ai
Accept: */*
{
  "data": [
    {
      "chunk_id": "text",
      "document": {
        "id": 1,
        "document_id": "text",
        "name": "text",
        "type": "text",
        "path": "text",
        "url": "text",
        "size": "text",
        "created_time": "text",
        "modified_time": "text",
        "integration": {
          "id": 1,
          "integration_type": "text",
          "integration_step": "text",
          "source": "text",
          "document_stats": {
            "status": {
              "indexed": 1,
              "indexing": 1,
              "error": 1
            },
            "total_size": 1,
            "document_count": 1
          }
        }
      },
      "matched_content": "text",
      "distance": 1
    }
  ],
  "message": "text",
  "code": "text"
}

Esempi di Richieste

curl -X GET \
  "https://api.rememberizer.ai/api/v1/documents/search/?q=Come%20integrare%20Rememberizer%20con%20applicazioni%20personalizzate&n=5&from=2023-01-01T00:00:00Z&to=2023-12-31T23:59:59Z" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Sostituisci YOUR_JWT_TOKEN con il tuo token JWT effettivo.

Parametri di Query

Parametro
Tipo
Descrizione

q

string

Obbligatorio. Il testo della query di ricerca (fino a 400 parole).

n

integer

Numero di risultati da restituire. Predefinito: 3. Usa valori più alti (ad es., 10) per risultati più completi.

from

string

Inizio dell'intervallo di tempo per i documenti da cercare, in formato ISO 8601.

to

string

Fine dell'intervallo di tempo per i documenti da cercare, in formato ISO 8601.

prev_chunks

integer

Numero di chunk precedenti da includere per il contesto. Predefinito: 2.

next_chunks

integer

Numero di chunk successivi da includere per il contesto. Predefinito: 2.

Formato di Risposta

{
  "data_sources": [
    {
      "name": "Google Drive",
      "documents": 3
    },
    {
      "name": "Slack",
      "documents": 2
    }
  ],
  "matched_chunks": [
    {
      "document": {
        "id": 12345,
        "document_id": "1aBcD2efGhIjK3lMnOpQrStUvWxYz",
        "name": "Documentazione API di Rememberizer.pdf",
        "type": "application/pdf",
        "path": "/Documents/Rememberizer/Documentazione API.pdf",
        "url": "https://drive.google.com/file/d/1aBcD2efGhIjK3lMnOpQrStUvWxYz/view",
        "size": 250000,
        "created_time": "2023-05-10T14:30:00Z",
        "modified_time": "2023-06-15T09:45:00Z",
        "indexed_on": "2023-06-15T10:30:00Z",
        "integration": {
          "id": 101,
          "integration_type": "google_drive"
        }
      },
      "matched_content": "Per integrare Rememberizer con applicazioni personalizzate, puoi utilizzare il flusso di autenticazione OAuth2 per autorizzare la tua applicazione ad accedere ai dati di Rememberizer di un utente. Una volta autorizzata, la tua applicazione può utilizzare le API di Rememberizer per cercare documenti, recuperare contenuti e altro ancora.",
      "distance": 0.123
    },
    // ... più chunk corrispondenti
  ],
  "message": "Ricerca completata con successo",
  "code": "success"
}

Suggerimenti per l'Ottimizzazione della Ricerca

Per Rispondere a Domande

Quando cerchi una risposta a una domanda, prova a formulare la tua query come se fosse una risposta ideale. Ad esempio:

Invece di: "Che cos'è l'embedding vettoriale?" Prova: "L'embedding vettoriale è una tecnica che converte il testo in vettori numerici in uno spazio ad alta dimensione."

Per una comprensione più profonda di come funzionano gli embedding vettoriali e perché questo approccio di ricerca è efficace, vedi Cosa sono gli Embedding Vettoriali e i Database Vettoriali?

Regolazione del Conteggio dei Risultati

  • Inizia con n=3 per risultati rapidi e ad alta rilevanza

  • Aumenta a n=10 o superiore per informazioni più complete

  • Se la ricerca restituisce informazioni insufficienti, prova ad aumentare il parametro n

Filtraggio Basato sul Tempo

Utilizza i parametri from e to per concentrarti su documenti di periodi di tempo specifici:

  • Documenti recenti: Imposta from su una data recente

  • Analisi storica: Specifica un intervallo di date specifico

  • Escludere informazioni obsolete: Imposta una data to appropriata

Operazioni in Batch

Per gestire in modo efficiente grandi volumi di query di ricerca, Rememberizer supporta operazioni in batch per ottimizzare le prestazioni e ridurre il sovraccarico delle chiamate API.

Ricerca in Batch

import requests
import time
import json
from concurrent.futures import ThreadPoolExecutor

def batch_search_documents(queries, num_results=5, batch_size=10):
    """
    Esegui ricerche in batch con più query
    
    Args:
        queries: Elenco di stringhe di query di ricerca
        num_results: Numero di risultati da restituire per query
        batch_size: Numero di query da elaborare in parallelo
    
    Returns:
        Elenco dei risultati di ricerca per ogni query
    """
    headers = {
        "Authorization": "Bearer YOUR_JWT_TOKEN",
        "Content-Type": "application/json"
    }
    
    results = []
    
    # Elabora le query in batch
    for i in range(0, len(queries), batch_size):
        batch = queries[i:i+batch_size]
        
        # Crea un pool di thread per inviare richieste in parallelo
        with ThreadPoolExecutor(max_workers=batch_size) as executor:
            futures = []
            
            for query in batch:
                params = {
                    "q": query,
                    "n": num_results
                }
                
                future = executor.submit(
                    requests.get,
                    "https://api.rememberizer.ai/api/v1/documents/search/",
                    headers=headers,
                    params=params
                )
                futures.append(future)
            
            # Raccogli i risultati man mano che vengono completati
            for future in futures:
                response = future.result()
                results.append(response.json())
        
        # Limitazione della velocità - pausa tra i batch per evitare il throttling dell'API
        if i + batch_size < len(queries):
            time.sleep(1)
    
    return results

# Esempio di utilizzo
queries = [
    "Come utilizzare OAuth con Rememberizer",
    "Opzioni di configurazione del database vettoriale",
    "Migliori pratiche per la ricerca semantica",
    # Aggiungi altre query se necessario
]

results = batch_search_documents(queries, num_results=3, batch_size=5)

Considerazioni sulle Prestazioni

Quando si implementano operazioni in batch, considera queste migliori pratiche:

  1. Dimensione Ottimale del Batch: Inizia con dimensioni del batch di 5-10 query e adatta in base alle caratteristiche di prestazione della tua applicazione.

  2. Limitazione della Frequenza: Includi ritardi tra i batch per prevenire il throttling dell'API. Un buon punto di partenza è di 1 secondo tra i batch.

  3. Gestione degli Errori: Implementa una gestione degli errori robusta per gestire le richieste fallite all'interno dei batch.

  4. Gestione delle Risorse: Monitora l'uso delle risorse lato client, in particolare con grandi dimensioni del batch, per prevenire un consumo eccessivo di memoria.

  5. Elaborazione delle Risposte: Elabora i risultati del batch in modo asincrono quando possibile per migliorare l'esperienza dell'utente.

Per applicazioni ad alto volume, considera di implementare un sistema di coda per gestire in modo efficiente un gran numero di richieste di ricerca.

Questo endpoint fornisce potenti capacità di ricerca semantica in tutta la tua base di conoscenza. Utilizza embedding vettoriali per trovare contenuti basati sul significato piuttosto che su corrispondenze esatte di parole chiave.

Last updated