\n\n\n\n Ich nutze AI-Entwicklungstools, um meinen Arbeitsablauf zu verbessern. - ClawDev Ich nutze AI-Entwicklungstools, um meinen Arbeitsablauf zu verbessern. - ClawDev \n

Ich nutze AI-Entwicklungstools, um meinen Arbeitsablauf zu verbessern.

📖 11 min read2,065 wordsUpdated Mar 29, 2026

Hallo zusammen, hier ist Kai Nakamura von clawdev.net! Heute möchte ich über etwas sprechen, das mich in letzter Zeit sehr beschäftigt, besonders während sich das Feld der KI-Entwicklung mit rasender Geschwindigkeit weiterentwickelt. Wir alle bauen, treiben voran, experimentieren, und manchmal… stoßen wir gegen eine Wand. Oder besser gesagt, wir wiederholen die gleichen Schritte immer wieder oder kämpfen mit einem Codeabschnitt, der *einfacher* zu sein scheint.

Und hier kommt mein heutiges Thema ins Spiel: **Die unterschätzte Kunst des “Re-Open Source” eurer eigenen privaten KI-Projekte.**

Bevor ihr woanders klickt, in dem Gedanken, es sei nur ein weiterer Beitrag über “zum Open Source beitragen” – was, versteht mich nicht falsch, unglaublich wichtig ist – hört mir zu. Ich spreche davon, Code, den *ihr* geschrieben habt, für *euer* internes Projekt strategisch teilweise öffentlich zu machen. Nicht die ganze geheime Sauce, nicht euer Hauptgeistiges Eigentum, sondern diese hilfreichen Funktionen, diese maßgeschneiderten Datenlader, diese spezifischen Trainingsloop-Abstraktionen, an denen ihr Stunden lang gefeilt habt. Das sind Dinge, die ihr, um ehrlich zu sein, wahrscheinlich nicht jedes Mal neu konstruieren solltet, und niemand sonst auch.

Warum sich die Mühe machen? Mein eigenes Warnsignal

Vor ein paar Monaten war ich bis zum Hals in einem Kundenprojekt eingetaucht. Wir bauten eine ziemlich ausgeklügelte Konversations-KI für eine Nischenindustrie, und ein großer Teil davon bestand aus der dynamischen Generierung und Validierung von Aufforderungen. Denkt an komplexe Modellierung, das Anwenden von Schemen und dann an eine ganze Schicht historisches Kontextmanagement. Ich hatte diese wirklich coole Klasse `PromptBuilder` erstellt, etwas meinungsstark, aber letztendlich sehr effektiv. Sie verwaltete alles, von Token-Limits bis hin zur spezifischen Injektion von Metadaten je nach Benutzerrollen.

Darauf war ich stolz. Es funktionierte. Dann, einen Monat später, begann ich ein neues internes Projekt hier bei clawdev.net, etwas, das völlig vom Kunden getrennt war, aber auch eine solide Möglichkeit benötigte, um Aufforderungen zu erstellen und zu verwalten. Mein erster Gedanke? “Kopieren und Einfügen, Baby!”

Ich kopierte den `PromptBuilder`. Machte ein paar Anpassungen. Und dann kam mir der Gedanke: Ich habe gerade etwa 300 Zeilen Code dupliziert, und jetzt hatte ich zwei leicht unterschiedliche Versionen zu warten. Was würde passieren, wenn ich einen Bug in einer finde? Was würde passieren, wenn ich eine Funktion hinzufügen wollte? Ich müsste es zweimal machen. Das war nicht skalierbar. Das war nicht intelligent.

Das war nicht das erste Mal, dass das passierte. Ich habe einen Friedhof von benutzerdefinierten `DataLoader`-Implementierungen, ein ganzes Verzeichnis von `ExperimentTracker`-Klassen, und fangt mich gar nicht damit an, wie ich die API-Schlüssel-Rotation über verschiedene Projekte gehandhabt habe.

Es war also an der Zeit, dass ich beschloss, meinen eigenen Code “re-open sourcen” zu wollen. Nicht gleich zu einem großen öffentlichen Repository, sondern zu einer separaten internen GitLab-Gruppe, die ich `clawdev-utils` nannte. Die Idee war einfach: wenn ich etwas Nützliches baue, das nicht mein Hauptgeistiges Eigentum ist, und das in mehreren Projekten verwendet werden kann, dann würde es in `clawdev-utils` landen. Wenn es hinreichend allgemein ist und ich keine Probleme habe, es mit der Welt zu teilen, wird es unter einer MIT-Lizenz auf GitHub veröffentlicht.

Die versteckten Vorteile: Mehr als nur Code-Wiederverwendung

Ihr denkt vielleicht: “Okay, Kai, Code-Wiederverwendung, verstanden. Aber ist es wirklich den Aufwand wert, separate Repositories einzurichten, Dokumentation zu schreiben und über Lizenzen für meine eigenen internen Utilities nachzudenken?” Und meine Antwort ist ein lautstarkes JA. Es geht um mehr, als nur Dateien nicht zu kopieren.

1. Vorgeschriebene Modularität und besseres Design

Wenn ihr anfängt, darüber nachzudenken, ein Stück Code zum “Re-Open Sourcen” zu extrahieren, selbst wenn es nur für eure eigene Organisation ist, beginnt ihr intrinsisch, ihn besser zu gestalten. Ihr denkt über seine Abhängigkeiten nach. Ihr denkt über seine Schnittstelle nach. Ihr denkt darüber nach, wie jemand *anders* (oder zukünftiges Ich) es verwenden könnte, ohne alle internen Feinheiten des ursprünglichen Projekts zu kennen.

Mein Beispiel mit `PromptBuilder` passt hier perfekt. Als es im Kundenprojekt integriert war, war es eng an deren Logging und spezifisches Fehlermanagement gekoppelt. Als ich es extrahierte, musste ich diese Teile plug-and-play gestalten. Ich ersetzte direkte Aufrufe an das Logging durch eine injizierbare Logging-Schnittstelle. Ich machte die Fehlertypen allgemeiner. Das Ergebnis? Ein wesentlich saubereres und flexibleres Stück Code, das wirklich nützlicher war.

2. Erleichterte Integration und Wissensaustausch

Stellt euch vor, ein neuer Entwickler tritt eurem Team bei. Anstatt ihn durch den monolithischen Code eurer Haupt-KI-Anwendung wühlen zu lassen, um zu verstehen, wie ihr zum Beispiel die Verteilung von Trainingscheckpoints managed, könnt ihr ihn auf ein kleineres, gut dokumentiertes Repository namens `clawdev-checkpoint-manager` verweisen. Es ist eine zielgerichtete Funktionalität, die er isoliert verstehen kann.

Das gilt auch für euer zukünftiges Ich! Wie oft habt ihr euch euren alten Code angesehen und gedacht: “Was habe ich mir hier nur gedacht?” Diese Trennung der Utilities zwingt euch, bessere Kommentare, detailliertere Docstrings und klarere Beispiele zu schreiben, da ihr euch gedanklich auf ein größeres Publikum vorbereitet, selbst wenn dieses Publikum nur ihr selbst in sechs Monaten seid.

3. Der Weg zu echtem Open Source ist reibungsloser

Seien wir realistisch: Die meisten von uns wollen zur Open-Source-Gemeinschaft beitragen, aber die Vorstellung, einen riesigen Codeblock zu nehmen und ihn öffentlich zu machen, wirkt überwältigend. Durch das “Re-Open Sourcen” zunächst intern macht ihr die gesamte harte Arbeit des Entkoppelns, der Dokumentation und des Testens in überschaubaren Häppchen.

Wenn ihr ein gut isoliertes Utility habt, das seinen Wert in mehreren internen Projekten bewiesen hat, ist der Schritt, es unter einer MIT-Lizenz auf GitHub zu platzieren, weitaus kleiner. Ihr habt bereits die Tests, die Dokumentation und eine saubere API. Ihr fangt nicht bei Null an.

Zum Beispiel, dieser `PromptBuilder`? Nach ein paar Iterationen in `clawdev-utils` stellte ich fest, dass er hinreichend allgemein war und keine client-spezifische Logik enthielt. Ich beschloss, es zu wagen, es auf GitHub unter dem Namen `promptforge` zu veröffentlichen, und jetzt ist es da. Es tut gut, etwas zurückzugeben, und das war nur möglich, weil ich bereits die interne Vorarbeit geleistet hatte.

Wie man eigenen Code “Re-Open Sourcet”: praktische Schritte

Es geht nicht darum, alles über den Zaun zu werfen. Es ist ein strategischer Prozess. So gehe ich vor:

Schritt 1: Kandidaten identifizieren

Suche nach Code, der die folgenden Kriterien erfüllt:

  • **Wiederholte Logik:** Findest du dich dabei, die gleiche Funktion oder Klasse zwischen Projekten zu kopieren und einzufügen?
  • **Allgemeines Utility:** Löst es ein häufiges Problem, das nicht einzigartig für dein Hauptprodukt ist? (z.B. Datenladen, API-Wrapper, nützliche Dekoratoren, spezifische Preprocessing-Schritte, Konfigurationsmanagement).
  • **Geringe Kopplung:** Kann es leicht extrahiert werden, ohne einen Großteil deiner Hauptanwendung mitzuziehen?
  • **Stabil (im Großen und Ganzen):** Es muss relativ stabil und funktional sein, kein etwas, mit dem ihr aktiv jeden Tag an neuen Funktionen experimentiert.

Denkt an Dinge wie maßgeschneiderte Klassen `Dataset` oder `DataLoader` für spezifische Datenformate, ein Tool zur Verwaltung des Zustands von verteiltem Training, eine spezialisierte Textbereinigungs-Pipeline oder einen Wrapper um eine heikle externe API.

Schritt 2: Extrahieren und isolieren

Hier geschieht die eigentliche Arbeit. Erstelle ein neues Repository (entweder intern oder gleich öffentlich). Verschiebe den Code dorthin. Entferne dann systematisch alle projektspezifischen Abhängigkeiten. Ersetze sie durch:

  • **Abstrakte Schnittstellen:** Wenn dein Utility einen Logger benötigt, setze nicht `logging.getLogger(‘my_project’)` fest. Erwarte, dass ein `logger`-Objekt übergeben wird, oder nutze ein einfaches Fallback `print`.
  • **Konfigurationsparameter:** Wenn es API-Schlüssel oder Dateipfade benötigt, mache sie konfigurierbar als Argumente oder Umgebungsvariablen, nicht als fest kodierte Werte.
  • **Allgemeine Datenstrukturen:** Arbeite anstelle eines benutzerdefinierten Objekts `MyClientData` mit standardmäßigen Python-Typen (Dictionaries, Listen, Dataclasses).

Hier ist ein einfaches Beispiel. Angenommen, ihr habt eine Funktion, die einen spezifischen JSON-Konfigurationstyp für eure KI-Modelle lädt:


# Original (stark gekoppelt)
import os
import json

def load_model_config_original(model_name: str) -> dict:
 config_path = os.path.join(os.getenv("MODEL_CONFIG_DIR"), f"{model_name}_config.json")
 with open(config_path, 'r') as f:
 config = json.load(f)
 # Fügen Sie projektspezifische Standardwerte hinzu
 config.setdefault("learning_rate", 0.001)
 return config

# Re-Open Sourced (entkoppelt)
import json
from typing import Optional

def load_json_config(file_path: str, default_values: Optional[dict] = None) -> dict:
 """
 Lädt eine JSON-Konfigurationsdatei und kombiniert sie mit optionalen Standardwerten.
 """
 try:
 with open(file_path, 'r') as f:
 config = json.load(f)
 except FileNotFoundError:
 print(f"Warnung: Konfigurationsdatei nicht gefunden unter {file_path}. Verwende die Standardwerte.")
 config = {}
 
 if default_values:
 # Standardwerte zusammenführen, wobei die geladenen Werte priorisiert werden
 merged_config = {**default_values, **config}
 return merged_config
 return config

# Verwendung in Ihrem Projekt:
# from clawdev_utils.config_loaders import load_json_config
#
# my_model_defaults = {"learning_rate": 0.001, "batch_size": 32}
# model_config = load_json_config(
# os.path.join(os.getenv("MODEL_CONFIG_DIR"), "my_special_model_config.json"),
# default_values=my_model_defaults
# )

Die Funktion `load_json_config` ist jetzt vollständig generisch. Sie kümmert sich weder um `model_name` noch um `MODEL_CONFIG_DIR`. Sie lädt einfach eine JSON-Datei und verwaltet die Standardwerte. Sie ist ein hervorragender Kandidat für das Re-Open Sourcing.

Schritt 3: Dokumentieren, testen und lizenzieren

Das ist entscheidend. Niemand, nicht einmal Future You, möchte ein nicht dokumentiertes und nicht getestetes Tool verwenden. Behandeln Sie es wie ein echtes Open-Source-Projekt, auch wenn es sich nur um eine interne Nutzung handelt.

  • **Dokumentation:** Schreiben Sie klare Docstrings. Fügen Sie eine `README.md` mit Installationsanweisungen (falls zutreffend), Beispielen zur Nutzung und möglichen Warnhinweisen hinzu.
  • **Tests:** Schreiben Sie Unit-Tests für Ihre extrahierten Komponenten. Dadurch wird sichergestellt, dass sie isoliert wie vorgesehen funktionieren und Rückschritte verhindert werden.
  • **Lizenzen (für öffentliche Repos):** Wenn Sie planen, dass es öffentlich ist, wählen Sie eine erlaubende Lizenz wie MIT oder Apache 2.0. Das erleichtert anderen die Nutzung Ihres Codes ohne rechtliche Probleme.

Zum Beispiel habe ich für meine Bibliothek `promptforge` sichergestellt, dass jede Funktion detaillierte Docstrings hat, und ich habe einen Ordner `docs/` mit umfassenderen Beispielen erstellt, wie man sie mit verschiedenen LLM-APIs integriert.

Schritt 4: Wiederintegrieren (und pflegen)

Sobald Ihr Tool extrahiert, getestet und dokumentiert ist, aktualisieren Sie Ihr ursprüngliches Projekt (und andere), um die neue ausgelagerte Version *zu verwenden*. Installieren Sie es als Abhängigkeit (zum Beispiel über `pip install git+https://github.com/your/repo.git` für private Repos oder von PyPI für öffentliche Repos).

Denken Sie daran, es ist ein kontinuierlicher Prozess. Wenn Sie einen Fehler entdecken oder eine neue Funktion in Ihrem Tool benötigen, beheben Sie ihn im Repository des Tools und nicht im konsumierenden Projekt. Aktualisieren Sie dann die Version in Ihren Projekten.

Wichtige Punkte für Ihr nächstes AI-Projekt

Was bedeutet das also für Sie, den beschäftigten AI-Entwickler?

  1. **Fangen Sie klein an:** Versuchen Sie nicht, den gesamten Code über Nacht zu refaktorisieren. Wählen Sie eine kleine Hilfsfunktion oder eine wiederverwendbare Klasse, die Sie wissen, bereits kopiert zu haben.
  2. **Denken Sie generisch:** Wenn Sie neuen Code schreiben, insbesondere für Hilfsfunktionen, pausieren Sie einen Moment und fragen Sie sich: „Könnte das in einem anderen Projekt nützlich sein? Wie kann ich es weniger spezifisch für *dieses* Projekt machen?“
  3. **Erstellen Sie ein internes „Utils“-Repository:** Auch wenn Sie noch nicht bereit für ein öffentliches Open Source sind, richten Sie ein internes Repository für die gemeinsamen Hilfsprogramme Ihres Teams ein. Das ist ein großartiger erster Schritt.
  4. **Priorisieren Sie Dokumentation und Tests für Hilfsprogramme:** Behandeln Sie diese extrahierten Komponenten wie Mini-Produkte. Gute Dokumentation und Tests reduzieren die Reibung für alle, einschließlich Ihnen selbst.
  5. **Nehmen Sie die “Public-First”-Einstellung an (wenn angebracht):** Wenn ein Tool keinen Wettbewerbsvorteil hat und ein häufiges Problem löst, ziehen Sie in Betracht, es direkt als Open Source zu veröffentlichen. Rückmeldungen und Beiträge von der Community können unbezahlbar sein.

Ihr eigenes Code-Open-Sourcing ist nicht nur eine Frage des guten Bürgers; es macht auch *Ihren eigenen Entwicklungsfluss* effizienter, Ihre Codebasen sauberer und Ihr zukünftiges Ich viel glücklicher. Es ist eine Gewohnheit, die sich in Wartbarkeit, Skalierbarkeit und sogar Seelenfrieden auszahlt.

Probieren Sie das in Ihrem nächsten Projekt aus und lassen Sie mich in den Kommentaren wissen, wie es gelaufen ist! Was sind Ihre Lieblingshilfsprogramme, die Sie extrahiert haben?

🕒 Published:

👨‍💻
Written by Jake Chen

Developer advocate for the OpenClaw ecosystem. Writes tutorials, maintains SDKs, and helps developers ship AI agents faster.

Learn more →
Browse Topics: Architecture | Community | Contributing | Core Development | Customization
Scroll to Top