KI zur Erstellung von SQL-Abfragen nutzen | Original, von KI übersetzt

Home 2025.07

Datenbank-Schema (PostgreSQL):

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    date_of_birth DATE,
    gender VARCHAR(10),
    phone_number VARCHAR(20),
    address TEXT,
    city VARCHAR(100),
    state VARCHAR(100),
    country VARCHAR(100),
    zip_code VARCHAR(20),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE,
    last_login TIMESTAMP WITH TIME ZONE,
    is_active BOOLEAN DEFAULT TRUE,
    role VARCHAR(50),
    profile_picture_url VARCHAR(255),
    bio TEXT,
    failed_login_attempts INTEGER DEFAULT 0,
    account_balance NUMERIC(10, 2) DEFAULT 0.00
);

Oben ist die PostgreSQL-Datenbank, unten die Tabellendefinition. Hier sind die Anweisungen für die Abfrage in natürlicher Sprache.

Ich möchte einige Benutzer abfragen, deren Vorname Andy ist, die am Tag des letzten Monats erstellt wurden, die 2025 20 Jahre alt sind und deren letzter Login in der letzten Woche liegt. Geben Sie mir die SQL-Abfrage für solche Benutzer.


Generierte SQL-Abfrage:

SELECT *
FROM users
WHERE first_name ILIKE 'andy'
  AND CAST(created_at AS DATE) BETWEEN
      (CURRENT_DATE - INTERVAL '1 MONTH' - INTERVAL '1 DAY')
      AND
      (CURRENT_DATE - INTERVAL '1 MONTH' + INTERVAL '1 DAY')
  AND EXTRACT(YEAR FROM AGE(date_of_birth)) = 20
  AND last_login >= CURRENT_TIMESTAMP - INTERVAL '7 DAYS';

Unten ist eine PostgreSQL-Tabellendefinition für eine conversations-Tabelle, die verwendet werden kann, um Benutzerinteraktionen mit einem KI-System wie Grok zu speichern. Die Tabelle ist so gestaltet, dass sie Gespräche verfolgt, einschließlich des beteiligten Benutzers, des Gesprächsinhaltes, Zeitstempel und relevanter Metadaten.

CREATE TABLE conversations (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    title VARCHAR(255),
    conversation_type VARCHAR(50) DEFAULT 'chat',
    started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    ended_at TIMESTAMP WITH TIME ZONE,
    status VARCHAR(50) DEFAULT 'active',
    message_count INTEGER DEFAULT 0,
    last_message_at TIMESTAMP WITH TIME ZONE,
    is_archived BOOLEAN DEFAULT FALSE,
    ai_model_version VARCHAR(100),
    total_tokens_used INTEGER DEFAULT 0,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Erklärung:

Diese Tabelle ist flexibel gestaltet und kann je nach Bedarf erweitert werden, z. B. durch Speicherung einzelner Nachrichten in einer separaten messages-Tabelle oder durch Hinzufügen von Feldern für die Stimmungsanalyse oder Gesprächstags.


Um eine Frontend-Anwendung zu ermöglichen, bei der Benutzer ihre eigenen Gespräche mit natürlicher Sprache abfragen können (z. B. “Gib mir meine letzten 5 Gespräche” oder “Gespräche, deren Titel das Wort Java enthält”), müssen Sie sicherstellen, dass die SQL-Abfrage die Ergebnisse auf die Gespräche des authentifizierten Benutzers beschränkt. Dies erfordert die Integration der Benutzeridentität (z. B. user_id) in die Abfrage und die Übersetzung der natürlichen Sprache in SQL-Bedingungen. Unten finden Sie Beispiele für natürliche Sprachbefehle und entsprechende SQL-Abfragen für die conversations-Tabelle, wobei sichergestellt wird, dass Benutzer nur auf ihre eigenen Daten zugreifen können.

Wichtige Überlegungen

Natürliche Sprachbefehle und SQL-Abfragen

Befehl 1: “Gib mir meine letzten 5 Gespräche”

Analysierte Anforderungen:

SQL-Abfrage:

SELECT *
FROM conversations
WHERE user_id = :authenticated_user_id
ORDER BY started_at DESC
LIMIT 5;

Befehl 2: “Gespräche, deren Titel das Wort Java enthält”

Analysierte Anforderungen:

SQL-Abfrage:

SELECT *
FROM conversations
WHERE user_id = :authenticated_user_id
  AND title ILIKE '%java%';

Implementierungshinweise für die Frontend-Anwendung

  1. Benutzerauthentifizierung:
    • Die Frontend-Anwendung muss die ID des authentifizierten Benutzers (z. B. aus einem JWT-Token oder einer Sitzung) an die Backend-API senden.
    • Die Backend-Anwendung sollte die user_id validieren und sie in der WHERE-Klausel verwenden, um die Ergebnisse zu filtern.
  2. Verarbeitung natürlicher Sprache:
    • Verwenden Sie einen einfachen regelbasierten Parser oder ein KI-Modell (wie Grok), um die natürliche Sprachabfrage zu interpretieren und Folgendes zu extrahieren:
      • Absicht: Gespräche auflisten.
      • Filter: Schlüsselwörter (z. B. “java”), Sortierung (z. B. “letzte”) oder Begrenzungen (z. B. “5”).
    • Beispielsweise “letzte 5” auf ORDER BY started_at DESC LIMIT 5 und “Titel enthält das Wort java” auf title ILIKE '%java%' abbilden.
  3. API-Design:
    • Erstellen Sie ein Endpunkt (z. B. /api/conversations), das Folgendes akzeptiert:
      • user_id: Aus der authentifizierten Sitzung.
      • query: Die natürliche Spracheingabe oder strukturierte Parameter (z. B. { filter: "title contains java" }).
    • Die Backend-Anwendung übersetzt die Abfrage in SQL, wobei sichergestellt wird, dass user_id immer in der WHERE-Klausel enthalten ist.
  4. Sicherheit:
    • Erlauben Sie Benutzern niemals, SQL direkt einzugeben oder den user_id-Filter zu ändern.
    • Verwenden Sie parameterisierte Abfragen (z. B. :authenticated_user_id), um SQL-Injection zu verhindern.
    • Validieren Sie Eingaben, um böswillige Muster in ILIKE-Suchen zu vermeiden.
  5. Frontend-Anzeige:
    • Geben Sie Felder wie id, title, started_at, last_message_at und status zurück, um eine Gesprächsliste anzuzeigen.
    • Bieten Sie Sortierungs- oder Filteroptionen in der Benutzeroberfläche an (z. B. Dropdown-Menüs für “letzte” oder Textfelder für die Titelsuche).

Beispiel-Workflow

  1. Der Benutzer meldet sich an, und die Frontend-Anwendung ruft seine user_id ab (z. B. 123).
  2. Der Benutzer gibt “Gib mir meine letzten 5 Gespräche” in ein Suchfeld ein.
  3. Die Frontend-Anwendung sendet eine Anfrage an die Backend-Anwendung: /api/conversations?user_id=123&query=letzte 5.
  4. Die Backend-Anwendung analysiert die Abfrage, generiert die SQL-Abfrage:
    SELECT *
    FROM conversations
    WHERE user_id = 123
    ORDER BY started_at DESC
    LIMIT 5;
    
  5. Die Backend-Anwendung gibt die Ergebnisse als JSON zurück, und die Frontend-Anwendung zeigt die Gespräche an.

Zusätzliche Hinweise

Lassen Sie es mich wissen, wenn Sie Hilfe bei der Frontend-Code-Erstellung, der Backend-API-Konfiguration oder zusätzlichen Abfragebeispielen benötigen!


Back Donate