In einigen Lehrveranstaltungen, z.B. in ST2, sollen Sie transparent machen, wie Sie KI zur Lösung von Aufgaben einsetzen. Das können Sie dadurch erreichen, dass Sie Ihre KI-Chat-Protokolle exportieren und dadurch dokumentieren, wie Sie die KI eingesetzt haben. Auf dieser Infopage geben wir Ihnen Tipps, wie Sie bei verschiedenen gängigen KI-Plattformen die Chat-Protokolle am besten exportieren können.
Die nachfolgende Liste wird ständig überarbeitet und erweitert. Für Richtigkeit und Aktualität übernehmen wir keine Gewähr, sind aber für Hinweise dankbar :-). Wenn Sie die von Ihnen verwendete KI hier nicht finden, dann finden Sie bitte selbst geeignete Wege zur Dokumentation.
Bei Webinterfaces (ChatGPT, Claude, Gemini, …) sollte das Drucken als PDF vermieden werden. Die Protokoll-Dateien werden dadurch extrem groß und überschreiten schnell die maximalen Grenzen beim Commit/Push nach Gitlab.
Im Umfeld des Divekit-Frameworks, das im git.nrw-Projekt entwickelt und in vielen ArchiLab-Modulen (z.B. Softwaretechnik 1 und 2) eingesetzt wird, ist ein Chrome-Plugin entstanden, das zur Dokumentation von KI-Chat-Protokollen sehr hilfreich sein kann. Es heißt “Chat Trail” und ermöglicht das Exportieren von Chat-Protokollen in einem lesbaren Text-Format (z.B. Markdown), das sich gut für die Dokumentation eignet.
Chat Trail lässt sich entweder über den Chrome Web Store installieren, oder lokal über das Entwicklungs-Repo.
Nehmen wir mal folgenden Dialog mit Google Gemini als Beispiel, um eine auf den ersten Blick unerklärliche Spring-Exception zu klären.

Man kann diesen Stacktrace dann mit Hilfe Chat Trail Chrome Extension exportieren, nämlich so:

Als Ergebnis erhält man eine Markdown-Datei, die man gut zur Dokumentation des Chatverlaufs einchecken kann.
# Spring Data JPA Repository Fehlerbehebung - Google Gemini
## 1. User
You said
In meiner Spring JPA Anwendung kriege ich folgende Exception - woran kann das liegen?
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5ca758b9 testClass = thkoeln.archilab.restaurant.metatests.dddtests.BasicUseCaseImplementationPackageTest, locations = [], classes = [thkoeln.archilab.restaurant.RestaurantApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6c23667e, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@250284ae, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@22265a2d, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@653bfc3d, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@37a53e65, org.springframework.boot.test.context.SpringBootTestAnnotation@86a43653], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
(...)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mealAdminServiceAdapter' defined in file [C:\Users\stefa\Documents\Git\SS26-ST2\m1\ST2M1b-b31fccd4-[redacted-phone]-8ce5-cd6d66f8ee0d\target\test-classes\thkoeln\archilab\restaurant\adapters\MealAdminServiceAdapter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mealService' defined in file [C:\Users\stefa\Documents\Git\SS26-ST2\m1\ST2M1b-b31fccd4-[redacted-phone]-8ce5-cd6d66f8ee0d\target\classes\thkoeln\archilab\restaurant\solution\meal\application\MealService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mealRepository' defined in thkoeln.archilab.restaurant.solution.meal.domain.MealRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); Reason: Failed to create query for method public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); No property 'mealName' found for type 'Meal'
(...)
#### Gemini said
Die Fehlermeldung ist ziemlich eindeutig, auch wenn sie in einem riesigen Stacktrace versteckt ist. Das Kernproblem liegt in deiner Repository-Definition.
##### Die Ursache
Spring Data JPA versucht beim Start der Anwendung (oder des Tests), aus dem Methodennamen in deinem Repository eine Datenbankabfrage zu generieren. Dabei tritt folgender Fehler auf:
> **No property 'mealName' found for type 'Meal'**
Das bedeutet: In deinem `MealRepository` hast du eine Methode definiert, die `findByMealName` heißt. Spring schaut nun in deiner Entity-Klasse `Meal` nach, ob es dort ein Feld namens `mealName` gibt – und findet keines.
##### So löst du das Problem
Du hast zwei Möglichkeiten, dies zu korrigieren:
(...)
Wenn es interessiert, den Link zum kompletten Protokoll für dieses Beispiel gibt es hier.
Claude Code löst am Ende jeder Antwort einen Stop Lifecycle Event aus. Indem Sie in
.claude/settings.local.json einen Hook für dieses Ereignis registrieren, können Sie die CLI dazu bringen,
ein kleines Skript auszuführen, das die gesamte Konversation an eine Markdown-Datei anhängt.
So erhalten Sie ein lesbares, versionierbares Protokoll jeder Interaktion mit der KI, ohne
etwas manuell kopieren und einfügen zu müssen.
Die Einrichtung besteht aus zwei Teilen.
1) Ein Bash-Skript (.claude/log-session.sh), das die Sitzungs-ID
aus der Standard-Eingabe liest, das passende Sitzungsprotokoll in ~/.claude/projects/<project-dir>/<session-id>.jsonl
findet und mit jq nur die Textblöcke des Benutzers und der KI extrahiert. Auf diese Weise werden viele
überflüssige Elemente übersprungen:
<local-command…>-MeldungenDiese Benutzer- und KI-Blöcke werden Ihrer Zieldatei (z. B. src/main/resources/E5/claude-protocol.md) unter einer
mit einem Zeitstempel versehenen ## Session: <id>-Überschrift angehängt.
2) Ein Stop-Hook-Eintrag in .claude/settings.local.json, der dieses Skript aufruft. Nach der
Konfiguration wird bei jedem Zug stillschweigend ein Eintrag an das Protokoll angehängt. Der einzige Caveat:
Der File-Watcher von Claude Code erkennt neu erstellte Hook-Dateien erst zu Beginn der Sitzung. Nachdem Sie den
Hook zum ersten Mal hinzugefügt haben, öffnen Sie daher entweder /hooks oder starten Sie die CLI neu, um ihn zu aktivieren.
Die CLI von Claude Code kann dies alles für Sie erledigen; Sie können diese Erklärung als Teil Ihres Prompts kopieren und einfügen.
Für den GitHub Co-Pilot Chat kennen wir noch keine vernünftige Lösung zur vollständigen Dokumentation des Chatverlaufs. Wenn Sie das nutzen, dann machen Sie bitte von einigen signifikanten Situationen Screenshots und speichern diese als Bilder (PNG oder JPG) ab. Eine vollständige Dokumentation des Chatverlaufs ist hier nach unserem Wissen nicht mit vertretbarem Aufwand möglich.