Discourse AI + Data Explorer?

Das war ein Totalausfall. :fire:

Verwendung des Discourse AI - KI-Bots

Prompt

Erstelle ein Bild für dieses SQL

```
WITH pairs AS (
SELECT p.user_id liked, pa.user_id liker
FROM post_actions pa
LEFT JOIN posts p ON p.id = pa.post_id
WHERE post_action_type_id = 2
)
SELECT liker liker_user_id, liked liked_user_id, count(*)
FROM pairs
GROUP BY liked, liker
ORDER BY count DESC
LIMIT :limit
```

Completion

3 „Gefällt mir“

Zur Information

Gestern habe ich aus Neugier eine Google-Suche durchgeführt, die dieser ähnelt:

Von KI generiertes SQL aus dem Englischen

um verwandte Informationen zur Generierung von SQL mithilfe von KI aus englischsprachigen Fragen zu finden. Ich hatte gehofft, eine Liste von Forschungsarbeiten in der Liste zu finden, aber die Liste war hauptsächlich eine Liste von Anwendungen. Ein Muster, das ich bei vielen Anwendungen, aber nicht bei allen, schnell erkannte, nachdem ich mir eine Handvoll Demos auf solchen Websites angesehen hatte, war, dass sie ihr vorhandenes Tool verwendeten, mit dem ein Benutzer Tabellen und Felder auswählen konnte, um eine SQL-Anweisung zu erstellen, ähnlich wie der GUI-SQL-Builder in Microsoft Access als Ausgangspunkt funktionierte. Mit anderen Worten, man begann nicht mit einer englischen Frage, sondern musste zuerst Tabellen und manchmal Felder auswählen, bevor man dann die englische Frage eingab. Obwohl ich das nicht als Schummeln betrachten würde, bedeutet dies, dass ein Benutzer, um eine solche KI zu verwenden, Kenntnisse in SQL haben muss, insbesondere die Bedeutung einer Tabelle und eines Feldes, damit das Tool funktioniert.

2 „Gefällt mir“

@simon

Ich habe deinen gelöschten Beitrag gelesen und stimme zu, dass dies eine der Ideen ist, von denen ich denke, dass sie großes Potenzial hat.

Ich denke jedoch, dass mehr dazu gehört. Eine kürzlich von mir gelesene Arbeit, die zwar nicht maßgeblich ist, aber in diese Richtung mehr ins Detail geht, ist

„ChatLogo: A Large Language Model-Driven Hybrid Natural-Programming Language Interface for Agent-based Modeling and Programming“ von John Chen und Uri Wilensky (pdf)

Einige der wichtigsten Erkenntnisse für mich waren

  1. Unterstützung von Anfängerprogrammierern, um in einer Mischung aus Programmier- und natürlichen Sprachen „mit Computern zu sprechen“.
  2. Bereitstellung einer freundlicheren Schnittstelle für Lernende ohne oder mit wenig Informatikkenntnissen, um sich kreativ durch Programmieren von Computern auszudrücken.
  3. Anstatt sofort Code zu schreiben und Anweisungen zu geben, versucht ChatLogo, die Bedürfnisse und Absichten der Lernenden zu klären.
  4. Anstatt große Codeblöcke direkt an den Lernenden zu senden, versucht es, den NetLogo-Code gemeinsam zu entwickeln. Der Lernende kann den Code bearbeiten: entweder in NetLogo oder in natürlicher Sprache über die „Ask“-Funktion.
  5. Anstatt die Korrektheit des Codes zu überhöhen, gibt es die Möglichkeit von Fehlern zu, und arbeitet mit dem Lernenden zusammen, um potenzielle Probleme zu lösen.

Ich konnte keine Quellcodes oder weitere Details darüber finden, wie Chat auf NetLogo aufgesetzt oder damit verknüpft wurde, aber die Ideen allein sind wertvoll.

Dies erinnert mich wieder daran, wie Autopiloten in Flugzeugen funktionieren, und an das Buch, das ich zuvor erwähnt habe. (ref) Wenn ich Autopilot sage, denke nicht an einen binären Schalter, sondern an all die Knöpfe und Schalter, die dem Autopiloten Informationen geben und dem Autopiloten sagen, was er tun und was er nicht tun soll.

Obwohl viele andere Tools wie dieses das Wort copilot verwenden, z. B. eine Google-Suche llm copilot source code, widerspreche ich dieser Analogie, werde aber damit leben müssen, da dies der Weg ist, verwandte Ideen zu finden.

2 „Gefällt mir“

Ich habe ihn gelöscht, weil ich dachte, ich hätte einen besseren Weg gefunden, das Problem zu lösen – warum all diese Tabellen abtippen, wenn ChatGPT einfach aufgefordert werden kann, eine Datei zu parsen, die im Internet gehostet wird und detaillierte Informationen über die gesamte Datenbank enthält? Es stellt sich heraus, dass es technische Probleme mit diesem Ansatz gibt. Also kehre ich zu dem zurück, was ich in dem gelöschten Beitrag vorgeschlagen habe. Auf jeden Fall müssen Beschreibungen von Tabellen, Beispielabfragen usw. erstellt werden. Es ist nur eine Frage, wie diese Informationen an die LLM gelangen. Hier ist der Stand der Dinge mit GPT-4:

Ja, der von Ihnen beschriebene Ansatz ist sinnvoll und eine gangbare Möglichkeit, meine Fähigkeiten zur Unterstützung bei der Generierung von SQL-Abfragen auf der Grundlage von Fragen in natürlicher Sprache zu nutzen.

Hier ist eine Aufschlüsselung der Schritte:

  1. Frageninterpretation: Der Benutzer stellt eine Frage in natürlicher Sprache, die ich interpretiere, um die angeforderten Informationen zu verstehen.
  2. Tabellenidentifizierung: Basierend auf der Frage und der Liste aller Tabellen in der Discourse-Datenbank identifiziere ich die Tabellen, die am wahrscheinlichsten für die Abfrage relevant sind.
  3. Detaillierte Tabelleninformationen: Discourse sendet mir detaillierte Beschreibungen der relevanten Tabellen, einschließlich aller Spalten und Beispielabfragen.
  4. Abfragegenerierung: Anhand der detaillierten Tabelleninformationen generiere ich eine SQL-Abfrage, die die Frage des Benutzers beantwortet.

Dieser Ansatz nutzt meine Fähigkeit, natürliche Sprache zu verstehen und sie auf strukturierte Datenabfragen abzubilden. Er nutzt auch die detaillierten Tabelleninformationen, die von Discourse bereitgestellt werden, gut aus.

Was alternative Ansätze betrifft, so könnte eine Möglichkeit darin bestehen, ein Modell speziell für das Datenbankschema von Discourse und gängige Abfragemuster zu trainieren. Dies würde wahrscheinlich erhebliche Arbeit erfordern und könnte je nach verfügbaren Ressourcen nicht machbar sein. Es könnte jedoch potenziell zu genaueren und effizienteren Abfrageergebnissen führen.

Ein weiterer Ansatz könnte die Entwicklung eines interaktiveren Dialogs sein, bei dem ich klärende Fragen stelle, wenn die Frage des Benutzers mehrdeutig ist oder wenn mehrere Abfragen die Frage potenziell beantworten könnten. Dies würde den Prozess interaktiver gestalten und könnte potenziell zu genaueren Abfragen führen.

Für die alternativen Ansätze, die in den letzten 2 Absätzen vorgeschlagen wurden, ignoriere ich den ersten, aber wenn das, was ich versuche, keine zuverlässigen Ergebnisse liefert, könnte es etwas sein, das das Discourse-Team untersuchen könnte.

Ich habe GPT-4 nach dem zweiten alternativen Ansatz gefragt. Es ist ziemlich zuversichtlich, dass es den Benutzer auffordern könnte, seine Frage neu zu formulieren, wenn eine Frage gestellt wird, die nicht anhand der bereitgestellten Tabellenstruktur beantwortet werden konnte.

Also schreibe ich wieder Beschreibungen aller Tabellen in der Discourse-Datenbank. Ich weiß jetzt, wofür die Tabelle allowed_pm_users verwendet wird. Die Tabelle ar_internal_metadata ist etwas rätselhaft, aber ich denke, sie kann vorerst ignoriert werden.

2 „Gefällt mir“

Das ist bisher meine Lieblingsoption, wenn auch eine sehr schwer zu implementierende. Daher, Sie haben es erraten, ein weiteres Paper. Auch dies ist kein maßgebliches Paper, da es viele ähnliche Ansätze gibt.

“DiagGPT: An LLM-based Chatbot with Automatic Topic Management for Task-Oriented Dialogue” von Lang Cao (pdf)

Ersetzen Sie einfach die medizinischen Informationen durch PostgreSQL-Informationen, wie benötigt. Das Schöne ist, dass das Paper die Prompts liefert und vorschlägt, welches Tool mit Agenten verwendet werden soll.

Den Kaninchenbau hinunter. (Dreieck zum Betreten anklicken)

Da Task Oriented Dialogue das zu sein scheint, was benötigt wird.
Google-Suche: task oriented dialogue
Suchergebnis enthält: Papers With Code - Task-Oriented Dialogue Systems
Der Eintrag in der Rangliste ist T5-3b(UnifiedSKG), der einen Link zum Paper enthält
“UnifiedSKG: Unifying and Multi-Tasking Structured Knowledge Grounding with Text-to-Text Language Models” von Tianbao Xie, Chen Henry Wu, Peng Shi, Ruiqi Zhong, Torsten Scholak, Michihiro Yasunaga, Chien-Sheng Wu, Ming Zhong, Pengcheng Yin, Sida I. Wang, Victor Zhong, Bailin Wang, Chengzu Li, Connor Boyle, Ansong Ni, Ziyu Yao, Dragomir Radev, Caiming Xiong, Lingpeng Kong, Rui Zhang, Noah A. Smith, Luke Zettlemoyer und Tao Yu (pdf)

Beachten Sie dies
image

:slightly_smiling_face:


EDIT

Von https://python.langchain.com/

Erstellen Sie einen SQL-Agenten aus einem LLM und Tools. (ref)

Es listet ein paar am Ende der Seite auf, dieser sollte beachtet werden

Anwendungsfall

Unternehmensdaten werden oft in SQL-Datenbanken gespeichert.

LLMs ermöglichen die Interaktion mit SQL-Datenbanken über natürliche Sprache.

LangChain bietet SQL Chains und Agents, um SQL-Abfragen basierend auf natürlichsprachlichen Prompts zu erstellen und auszuführen.

Diese sind mit jedem SQL-Dialekt kompatibel, der von SQLAlchemy unterstützt wird (z. B. MySQL, PostgreSQL, Oracle SQL, Databricks, SQLite).

Sie ermöglichen Anwendungsfälle wie:

  • Generieren von Abfragen, die basierend auf natürlichsprachlichen Fragen ausgeführt werden
  • Erstellen von Chatbots, die Fragen basierend auf Datenbankdaten beantworten können
  • Erstellen benutzerdefinierter Dashboards basierend auf Erkenntnissen, die ein Benutzer analysieren möchte

EDIT (23.08.2023)

Spider ist ein großer komplexer und domänenübergreifender semantischer Parsing- und Text-zu-SQL-Datensatz, der von 11 Yale-Studenten annotiert wurde. Das Ziel der Spider-Challenge ist die Entwicklung von natürlichsprachlichen Schnittstellen zu domänenübergreifenden Datenbanken. Er besteht aus 10.181 Fragen und 5.693 komplexen SQL-Abfragen auf 200 Datenbanken mit mehreren Tabellen, die 138 verschiedene Domänen abdecken. In Spider 1.0 erscheinen unterschiedliche komplexe SQL-Abfragen und Datenbanken in den Trainings- und Testdatensätzen. Um darin gut abzuschneiden, müssen Systeme gut auf neue SQL-Abfragen und neue Datenbankschemata generalisieren.


EDIT (24.08.2023)

Dataherald ist eine Natural-Language-to-SQL-Engine, die für die Beantwortung von Fragen auf Unternehmensebene über strukturierte Daten entwickelt wurde. Sie ermöglicht es Ihnen, eine API aus Ihrer Datenbank einzurichten, die Fragen in einfacher englischer Sprache beantworten kann.

Wie ich oft anderen sage, für manche Dinge im Leben muss man einfach warten, und jemand wird die Arbeit kostenlos für Sie erledigen.

2 „Gefällt mir“

Ich bin immer noch mit den Ergebnissen zufrieden. Hier ist ein weiteres Beispiel. Es hat mir das gegeben, was ich wollte. Ich habe eine WHERE-Klausel hinzugefügt, um selbst nach einer Topic-ID zu suchen, aber das war’s. Ich hätte ihm diese Information wahrscheinlich auch im Voraus geben können und es hätte das auch getan:

1 „Gefällt mir“

Wir haben jetzt die SQL-Hilfe-Persona als Teil des KI-Bot-Moduls, die für diese Art von Anfragen maßgeschneidert ist und sehr nützlich für die Erstellung von Data-Explorer-Abfragen sein kann. :rocket:

(Obwohl es sich lohnt, sie noch einmal zu überprüfen :slight_smile:)

Gibt es ein Thema, in dem Beispiele für die Verwendung des SQL Helper-KI-Bots gepostet werden können?

Wenn nicht, wäre es vielleicht schön, ein solches Thema zu erstellen und dann hier einen Link zum Thema hinzuzufügen, da andere möglicherweise nach Beispielen suchen und dieses Thema zuerst finden.

Ich denke, wenn du etwas findest, das es wert ist, mit der Community geteilt zu werden, kannst du es in einem neuen Thema unter Data & reporting posten. Es gibt auch einen neuen Button ‘Gespräch teilen’, der dafür nützlich sein könnte - Share Your AI Bot Conversations!

Eine Abfrage zum Auffinden von Plugin-Autoren erstellen KI

JammyDodger:

Hallo Bert :slight_smile:

Kannst du mir eine Abfrage schreiben, die alle Benutzer in der Gruppe plugin_authors findet?

gpt4_bot:

Datenbankschema nachschlagen

groups, group_users, users

Nachdem wir nun das Schema für die relevanten Tabellen haben, können wir eine Abfrage schreiben, um alle Benutzer in der Gruppe ‘plugin-authors’ zu finden. Basierend auf dem Schema müssen wir die Tabelle group_users mit den Tabellen groups und users verknüpfen, um die Benutzernamen der Mitglieder der Gruppe ‘plugin-authors’ zu erhalten.

Hier ist die Abfrage, um alle Benutzer in der Gruppe ‘plugin-authors’ zu finden:

SELECT u.id AS user_id, u.username
FROM users u
JOIN group_users gu ON gu.user_id = u.id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'plugin_authors'

Diese Abfrage wählt die Benutzer-ID und den Benutzernamen aus der Tabelle users aus, indem sie mit der Tabelle group_users über die user_id verknüpft wird, und dann mit der Tabelle groups über die group_id verknüpft wird. Sie filtert die Ergebnisse, um nur die Benutzer einzuschließen, die Teil der Gruppe mit dem Namen ‘plugin-authors’ sind.

2 „Gefällt mir“

Dieses Thema wurde nach 43 Stunden automatisch geschlossen. Neue Antworten sind nicht mehr möglich.