Das Projekt MeLODy ist ein Proof of Concept und veranschaulicht, wie man strukturierte statistische Daten in einen Chatbot integriert. Der Bot übersetzt dabei Benutzeranfragen in API-Anfragen, welche daraufhin die Daten verarbeiten und zurücksenden. Der Demonstrator beruht auf ChatGPT-Plus und verwendet die Möglichkeit, diesen mit Webservices zu verbinden.
Video 1: Einfache Anfrage | Video 2: Konversation |
---|---|
Der Bot (PoC) kann derzeit nur eine kleine Untermenge der vom Statitischen Amt der Stadt Zürich bereitgestellten Daten nutzen. Hier sind einige Beispielanfragen:
Damit ChatGPT effektiv arbeiten kann, sind klare und präzise Endpunkte und Parameter erforderlich. Hier sind einige Erfahrungen und Best Practices, um die Zusammenarbeit mit ChatGPT zu optimieren:
Um zu verstehen, wie der MeLODy Bot Daten verarbeitet und zurückgibt, finden Sie hier eine Schritt-für-Schritt-Erklärung:
groupBy
Feld. Verfügbare Felder der Datensätze
können verwendet werden, um die zurückgegebenen Daten zu gruppieren.groupBy
Parameter angegeben sind, wodurch strukturierte und kategorisierte Datenresultate ermöglicht werden.Diese Transformationen sind jedoch nur bei absoluten Werten oder Ergebnissen möglich und nicht bei zuvor transformierten Daten. Daher wurde der Algorithmus entfernt. Stattdessen wird eine gut gruppierte Datenstruktur für nicht summierbare Daten zurückgesendet.
Durch das Befolgen dieser Schritte stellt der MeLODy Bot eine effiziente Datenverarbeitung sicher und liefert strukturierte, aussagekräftige Ergebnisse, die leicht von ChatGPT interpretiert werden können.
| Jahr (Number) | Kreis (Number) | Quartier (Affoltern - String) | Herkunft (Schweiz/Ausland) | Geschlecht (M/F) | Alter (Number) | Einwohner (Number) | |—————|—————-|——————————-|—————————-|——————|—————-|——————–|
| Jahr (Number) | Kreis (Number) | Quartier (Affoltern - String) | Eigentümer (Öffentlich/Genossenschaft/Privat/Natürliche Person) | Zimmeranzahl (Number) | Anzahl (Number) | |—————|—————-|——————————-|—————————————————————–|———————–|—————–|
| Jahr (Number) | Quartal (Number) | Anzahl (Number) | Vollzeit (Number) | |—————|——————|—————–|——————-|
| Jahr (Number) | Raum (Ganze Stadt/Kreise/Quartiere) | Zimmeranzahl (Number) | Gemeinnützig (Ja/Nein) | Messung (Wohnung/m²) | Preisart (Brutto/Netto) | Preis (Number) | |—————|————————————-|———————–|————————|———————-|————————-|—————-|
| Jahr (Number) | Quartier (Affoltern - String) | Tarif (Grundtarif/Einzeltarif/Verheiratetentarif) | Einkommenssteuer (Number) | |—————|——————————-|—————————————————|—————————|
{
"startYear": 2000,
"endYear": 2020,
"area": "Altstadt",
"rooms": 3,
"priceMin": 1000,
"priceMax": 3000,
"groupBy": ["area", "rooms"]
}
startYear
: Startjahr für die Filterung der Daten.endYear
: Endjahr für die Filterung der Daten.area
: Der Bereich für die Filterung der Daten.rooms
: Die Anzahl der Zimmer für die Filterung der Daten.priceMin
: Mindestpreis für die Filterung der Daten.priceMax
: Höchstpreis für die Filterung der Daten.groupBy
: Ein oder mehrere Schlüssel zum Gruppieren der Ergebnisse (z.B. area, rooms).{
"keys": ["string"],
"total": "integer",
"result": {},
"source": "string"
}
{
"startYear": 2000,
"endYear": 2020,
"year": 2010,
"sex": "M",
"minAge": 18,
"maxAge": 65,
"age": 30,
"kreis": 1,
"quar": "Altstadt",
"herkunft": "Schweizer*in",
"groupBy": ["AlterVKurz", "SexLang"]
}
startYear
: Das Startjahr für die Filterung der Daten.endYear
: Das Endjahr für die Filterung der Daten.year
: Ein spezifisches Jahr für die Filterung der Daten.sex
: Geschlecht für die Datenfilterung (M oder F).minAge
: Mindestalter für die Filterung der Daten.maxAge
: Höchstalter für die Filterung der Daten.age
: Spezifisches Alter für die Filterung der Daten.kreis
: Der Bezirk für die Filterung der Daten.quar
: Das Quartier für die Filterung der Daten.herkunft
: Herkunft für die Datenfilterung (z.B. Schweizerin, Ausländerin).groupBy
: Ein Schlüssel von DemographicData, um die Ergebnisse zu gruppieren (z.B. AlterVKurz, SexLang).{
"result": {},
"keys": ["string"],
"total": "integer",
"source": "string"
}
{
"startYear": 2000,
"endYear": 2020,
"industry": "Information Technology",
"minEmployees": 10,
"maxEmployees": 5000,
"groupBy": ["industry", "year"]
}
startYear
: Startjahr für die Filterung der Daten.endYear
: Endjahr für die Filterung der Daten.industry
: Branche für die Filterung der Daten.minEmployees
: Mindestanzahl an Mitarbeitern für die Filterung der Daten.maxEmployees
: Höchstanzahl an Mitarbeitern für die Filterung der Daten.groupBy
: Ein oder mehrere Schlüssel zum Gruppieren der Ergebnisse (z.B. industry, year).{
"keys": ["string"],
"total": "integer",
"result": {},
"source": "string"
}
{
"startYear": 2000,
"endYear": 2020,
"year": 2010,
"quar": "Altstadt",
"tarif": "Standard",
"taxIncome_p50": 60000,
"taxIncome_p25": 40000,
"taxIncome_p75": 80000,
"groupBy": ["year", "quar"]
}
startYear
: Startjahr für die Einkommensdaten.endYear
: Endjahr für die Einkommensdaten.year
: Spezifisches Jahr für die Einkommensdaten.quar
: Viertel für die Einkommensdaten.tarif
: Steuertarif.taxIncome_p50
: Medianeinkommen.taxIncome_p25
: Einkommen des 25. Perzentils.taxIncome_p75
: Einkommen des 75. Perzentils.groupBy
: Kriterien zur Gruppierung (z.B. year, quar).{
"keys": ["string"],
"result": {},
"total": "integer",
"source": "string"
}
year
(Query, string): Filter nach spezifischem JahrstartYear
(Query, string): Filter nach StartjahrendYear
(Query, string): Filter nach EndjahrminPopulation
(Query, number): Mindestbevölkerung FiltermaxPopulation
(Query, number): Maximalbevölkerung Filter{
"total": "integer",
"returned": "integer",
"data": []
}
In den nächsten Schritten werden wir versuchen, unseren aktuellen Ansatz zu nutzen, um automatisch Anfrageschnittstellen basierend auf Nutzereingaben und gegebenen Daten-Schemata wie SHACL zu erstellen. Hierbei soll ChatGPT herausfinden, welche Datenfelder notwendig sind, um präzise Ergebnisse für das Filtern und Gruppieren der Daten zu liefern.
startYear
, endYear
, district
, taxCategory
usw. identifizieren.startYear
, endYear
, age
,
gender
, district
usw. identifizieren.Durch diesen automatisierten Ansatz können wir sicherstellen, dass die Anfragen der Nutzer so präzise und effizient wie möglich bearbeitet werden. Gleichzeitig wird der Entwicklungsaufwand reduziert, da ChatGPT die notwendigen Schritte automatisiert und optimiert.
Dieser nächste Schritt ist ein bedeutender Fortschritt in Richtung einer vollautomatisierten und intelligenten Datenerfassungs- und Verarbeitungslösung, die auf die Bedürfnisse der Nutzer zugeschnitten ist.
Der MeLODy Bot bietet eine effiziente Möglichkeit, Anfragen von Nutzern in strukturierte API-Anfragen zu übersetzen, die Daten zu transformieren und sie in verständlicher Form zurückzugeben. Die automatische Swagger-Dokumentation erleichtert Entwicklern den Einstieg und die Nutzung der API. Durch die Einhaltung der oben genannten Optimierungen kann die Zusammenarbeit mit ChatGPT weiter verbessert werden.
Der nächste Schritt in der Entwicklung wird darin bestehen, unseren aktuellen Ansatz zu nutzen, um automatisch Anfrageschnittstellen basierend auf Nutzereingaben und gegebenen Daten-Schemata wie SHACL zu erstellen. ChatGPT wird hierbei die notwendigen Datenfelder für das Filtern und Gruppieren identifizieren, um die Anfragen präzise und effizient zu beantworten.
Dadurch wird der MeLODy Bot nicht nur benutzerfreundlicher, sondern auch flexibler und skalierbarer für zukünftige Erweiterungen. Die Integration und Automatisierung dieser Prozesse reduziert den manuellen Aufwand und erhöht die Genauigkeit und Relevanz der Antworten, was zu einem insgesamt verbesserten Nutzungserlebnis führt.