In der Welt der Softwareentwicklung und Datenverwaltung hat sich JSON (JavaScript Object Notation) aufgrund seiner Einfachheit und Flexibilität als beliebte Wahl zur Strukturierung und Austausch von Daten etabliert. JSON bietet eine bequeme Möglichkeit, komplexe Datenstrukturen darzustellen, die sowohl von Menschen als auch von Maschinen leicht verstanden und verarbeitet werden können. Bei der Arbeit mit großen JSON-Datensätzen können jedoch manchmal Herausforderungen auftreten, insbesondere wenn es um die Gewährleistung von Datenintegrität und Validierung geht. Hier kommt GPT (Generative Pre-trained Transformer) ins Spiel und bietet eine leistungsstarke Lösung, um ein JSON-Schema aus JSON-Daten abzuleiten.
Das JSON-Schema
Bevor wir uns in die Magie von GPT vertiefen, wollen wir kurz über JSON-Schema sprechen. JSON-Schema ist eine Vokabular, mit dem Sie JSON-Dokumente annotieren und validieren können. Es bietet eine formale Definition der erwarteten Struktur, Datentypen und Einschränkungen für einen bestimmten JSON-Datensatz. Durch die Definition eines JSON-Schemas können Sie sicherstellen, dass die Daten bestimmten Regeln und Anforderungen entsprechen, was eine robuste Validierung und effiziente Datenverarbeitung ermöglicht.
Nutzung von GPT zur Ableitung eines JSON-Schemas
GPT, basierend auf seinen fortschrittlichen natürlichsprachlichen Verarbeitungsfähigkeiten, kann genutzt werden, um aus vorhandenen JSON-Inhalten ein JSON-Schema abzuleiten. Es ist kein Training erforderlich, da GPT (in diesem Fall Version 3.5) alles mitbringt, was Sie benötigen. Alles, was Sie brauchen, ist ein Zugang zur OpenAI-API und einen geeigneten Prompt wie den folgenden, der GPT anweist, sich wie eine Python-Funktion mit Eingabe und Rückgabewert zu verhalten:
"role": "system", "content": "You are a python function to analyze JSON string input to generate a JSON schema from it as a JSON string result"
"role": "user", "content": "Extract the JSON schema of the following JSON content and return it as a JSON string. Treat NULL-Values as optional: {JSON CONTENT}"
In unserem Fall verwenden wir die folgende JSON-Beispieldatei, um das geeignete Schema zu bestimmen:
{ "articles": [ { "url": "https://www.britannica.com:443/technology/artificial-intelligence", "url_mobile": null, "title": "Artificial intelligence ( AI ) | Definition , Examples , Types , Applications , Companies , & Facts", "seendate": "20230612T054500Z", "socialimage": "https://cdn.britannica.com/81/191581-050-8C0A8CD3/Alan-Turing.jpg", "domain": "britannica.com", "language": "English", "sourcecountry": "United States", "id": 1 }, { "url": "https://www.drive.com.au/news/jeep-says-artificial-intelligence-is-heading-off-road/", "url_mobile": null, "title": "Jeep says Artificial Intelligence is heading off - road", "seendate": "20230611T203000Z", "socialimage": "https://images.drive.com.au/driveau/image/upload/c_fill,f_auto,g_auto,h_675,q_auto:good,w_1200/cms/uploads/mm6gqcquwz10snybg79k", "domain": "drive.com.au", "language": "English", "sourcecountry": "Australia", "id": 2 }, { "url": "https://labusinessjournal.com/featured/artificial-intelligence-on-call/", "url_mobile": null, "title": "Artificial intelligence on Call - Los Angeles Business Journal", "seendate": "20230612T080000Z", "socialimage": "https://images.labusinessjournal.com/wp-content/uploads/2023/06/SR_COVEROPTION_Pearl-Second-Opinion-dentist-with-patietn-point-at-caries-HiRes-copy.jpg", "domain": "labusinessjournal.com", "language": "English", "sourcecountry": "United States", "id": 3 }, { "url": "https://www.emirates247.com/uae/artificial-intelligence-office-organises-ai-enabled-entrepreneurs-conference-in-collaboration-with-nvidia-2023-06-11-1.712994", "url_mobile": "https://www.emirates247.com/uae/artificial-intelligence-office-organises-ai-enabled-entrepreneurs-conference-in-collaboration-with-nvidia-2023-06-11-1.712994?ot=ot.AMPPageLayout", "title": "Artificial Intelligence Office organises AI - Enabled Entrepreneurs conference in collaboration with NVIDIA", "seendate": "20230611T194500Z", "socialimage": "https://www.emirates247.com/polopoly_fs/1.712995.1686498090!/image/image.jpg", "domain": "emirates247.com", "language": "English", "sourcecountry": "United Arab Emirates", "id": 4 }, { "url": "https://www.business-standard.com/india-news/ai-offers-new-opportunities-also-brings-threats-to-privacy-amitabh-kant-123061200521_1.html", "url_mobile": "https://www.business-standard.com/amp/india-news/ai-offers-new-opportunities-also-brings-threats-to-privacy-amitabh-kant-123061200521_1.html", "title": "AI offers new opportunities , also brings threats to privacy : Amitabh Kant", "seendate": "20230612T120000Z", "socialimage": "https://bsmedia.business-standard.com/_media/bs/img/article/2023-02/14/full/1676346078-2487.jpg", "domain": "business-standard.com", "language": "English", "sourcecountry": "India", "id": 5 }, { "url": "https://www.jamaicaobserver.com/latest-news/tufton-says-pnp-using-ai-to-spread-misinformation-threaten-democracy/", "url_mobile": "https://www.jamaicaobserver.com/latest-news/tufton-says-pnp-using-ai-to-spread-misinformation-threaten-democracy/amp/", "title": "Tufton says PNP using AI to spread misinformation , threaten democracy", "seendate": "20230612T010000Z", "socialimage": "https://imengine.public.prod.jam.navigacloud.com/?uuid=49085626-2689-402B-BA2C-7224FE707AF4&function=fit&type=preview", "domain": "jamaicaobserver.com", "language": "English", "sourcecountry": "Jamaica", "id": 6 }, { "url": "https://www.foxnews.com/world/chatgpt-delivers-sermon-packed-german-church-tells-congregants-fear-death", "url_mobile": "https://www.foxnews.com/world/chatgpt-delivers-sermon-packed-german-church-tells-congregants-fear-death.amp", "title": "ChatGPT delivers sermon to packed German church , tells congregants not to fear death", "seendate": "20230611T151500Z", "socialimage": "https://static.foxnews.com/foxnews.com/content/uploads/2023/06/Fuerth3.jpg", "domain": "foxnews.com", "language": "English", "sourcecountry": "United States", "id": 7 }, { "url": "https://www.standardmedia.co.ke/opinion/article/2001474967/lets-embrace-ai-for-better-efficient-future-of-work", "url_mobile": "https://www.standardmedia.co.ke/amp/opinion/article/2001474967/lets-embrace-ai-for-better-efficient-future-of-work", "title": "Let embrace AI for better , efficient future of work", "seendate": "20230611T143000Z", "socialimage": "https://cdn.standardmedia.co.ke/images/articles/thumbnails/fnIyghHfNlwyrVSTk7HEFSkG6Mb3IkndZiu2Yg6v.jpg", "domain": "standardmedia.co.ke", "language": "English", "sourcecountry": "Kenya", "id": 8 }, { "url": "https://techxplore.com/news/2023-06-chatbot-good-sermon-hundreds-church.html", "url_mobile": "https://techxplore.com/news/2023-06-chatbot-good-sermon-hundreds-church.amp", "title": "Can a chatbot preach a good sermon ? Hundreds attend church service generated by ChatGPT to find out", "seendate": "20230611T140000Z", "socialimage": "https://scx2.b-cdn.net/gfx/news/hires/2023/can-a-chatbot-preach-a.jpg", "domain": "techxplore.com", "language": "English", "sourcecountry": "United States", "id": 9 }, { "url": "https://technology.inquirer.net/125039/openai-ceo-asks-china-to-help-create-ai-rules", "url_mobile": "https://technology.inquirer.net/125039/openai-ceo-asks-china-to-help-create-ai-rules/amp", "title": "OpenAI CEO Asks China For AI Rule Making | Inquirer Technology", "seendate": "20230612T074500Z", "socialimage": "https://technology.inquirer.net/files/2023/06/pexels-andrew-neel-15863000-620x349.jpg", "domain": "technology.inquirer.net", "language": "English", "sourcecountry": "Philippines", "id": 10 } ] }
In den nächsten Schritten implementieren wir einige kurze Python-Skripte, um die JSON-Datei zu lesen und eine OpenAI-API-Anfrage zu stellen. Zuerst verwenden wir den folgenden Wrapper für den API-Aufruf:
import os import openai class OpenAIWrapper: def __init__(self, temperature): self.key = os.environ["OPENAI_API_KEY"] self.chat_model_id = "gpt-3.5-turbo-0613" self.temperature = temperature self.max_tokens = 2048 self.top_p = 1 self.time_out = 7 def run(self, prompt): return self._post_request_chat(prompt) def _post_request_chat(self, messages): try: openai.api_key = self.key response = openai.ChatCompletion.create( model=self.chat_model_id, messages=messages, temperature=self.temperature, max_tokens=self.max_tokens, frequency_penalty=0, presence_penalty=0 ) res = response['choices'][0]['message']['content'] return res, True except Exception as e: return "", False
Eine Sache, auf die Sie achten müssen, ist die maximale Größe „max_tokens“ Ihrer Eingabe. Das GPT-3.5-Modell kann derzeit bis zu 16.000 Tokens verarbeiten – unser Beispiel besteht aus etwa 2.000 Tokens. Sie müssen daher die Eingabe möglicherweise kürzen, um die maximale Größe einzuhalten.
Der zweite Schritt besteht darin, unsere Anweisungen in eine Python-Funktion mit einem Parameter „json_content“ zu encapsulieren, die den Ausgabeaufruf von GPT zurückgibt:
from OpenAIWrapper import OpenAIWrapper JSON_SCHEMA_LLM_PREFIX = "Extract the JSON schema of the following JSON content and return it as a JSON string. Treat NULL-Values as optional:" JSON_SCHEMA_LLM_SUFFIX = "Remember: The reply must only be JSON." class JsonSchemaLLM: def __init__(self, temperature) -> None: self.LLM = OpenAIWrapper(temperature) self.messages = [{"role": "system", "content": "You are a python function to analyze JSON string input to generate a JSON schema from it as a JSON string result"}] def get_json_schema(self, json_content): ''' - input: the json content to dervive a json schema - output: json schema ''' messages = self.messages + [{'role': 'user', "content": JSON_SCHEMA_LLM_PREFIX+'\n'+json_content+'\n'+JSON_SCHEMA_LLM_SUFFIX}] response, status = self.LLM.run(messages) if status: return response else: return "OpenAI API error."
Bitte beachten Sie, dass wir einen Suffix mit einer Erinnerung für GPT verwenden. Dies ist besonders wichtig für größere Anweisungen, um sicherzustellen, dass die Ausgabe nur JSON enthält, ohne Beschreibungen.
Schließlich können wir die Beispieldatei einlesen und unseren Code testen, um zu sehen, ob er funktioniert:
from JsonSchemaLLM import JsonSchemaLLM model = JsonSchemaLLM(0) with open("JsonExample.json", "r") as f: code = f.read() response = model.get_json_schema(code) print(response)
Dies ist die Ausgabe unserer neuen Python-KI-Funktion:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "articles": { "type": "array", "items": { "type": "object", "properties": { "url": { "type": "string" }, "url_mobile": { "type": ["string", "null"] }, "title": { "type": "string" }, "seendate": { "type": "string", "format": "date-time" }, "socialimage": { "type": "string" }, "domain": { "type": "string" }, "language": { "type": "string" }, "sourcecountry": { "type": "string" }, "id": { "type": "integer" } }, "required": [ "url", "title", "seendate", "socialimage", "domain", "language", "sourcecountry", "id" ], "additionalProperties": false } } }, "required": ["articles"], "additionalProperties": false }
Es ist wichtig zu beachten, dass obwohl GPT einen wertvollen Ausgangspunkt für die Ableitung eines JSON-Schemas bieten kann, menschliches Eingreifen und Validierung nach wie vor entscheidend sind. Das abgeleitete Schema sollte von Experten auf dem jeweiligen Fachgebiet überprüft und verfeinert werden, um dessen Genauigkeit und Relevanz für den spezifischen Kontext und die geschäftlichen Anforderungen sicherzustellen.
Fazit
Die Verwendung von GPT zur Ableitung eines JSON-Schemas aus JSON-Daten bietet immense Möglichkeiten im Bereich der Datenverwaltung und Softwareentwicklung. Es vereinfacht den Prozess der Schema-Erstellung, fördert die Datenintegrität und ermöglicht tiefere Einblicke in Datenstrukturen. Mit der fortschreitenden Technologie wird die Nutzung von Modellen wie GPT zunehmend wertvoll, um komplexe Datenherausforderungen zu bewältigen und Innovationen in der digitalen Landschaft voranzutreiben.