KI Coding Plugin: Unterschied zwischen den Versionen
Sv (Diskussion | Beiträge) |
Cg (Diskussion | Beiträge) |
||
| (25 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
= KI |
= KI Coding Plugin = |
||
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten |
|||
Das KI-Plugin bindet das Anthropic-Claude-Sprachmodell direkt in den expecco-Activity-Editor und in den ST/X-Klassenbrowser ein. Damit lassen sich Activities und Methoden erklären, verbessern, kommentieren oder auf Bugs untersuchen — Antworten erscheinen in einem eigenen Chat-Fenster und können per Knopfdruck wieder ins ursprüngliche Editor-Fenster zurückgespielt werden. |
|||
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den |
|||
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den |
|||
ST/X Class Browser ein. Das Plugin unterstützt zwei Anbieter, die im |
|||
Einstellungsdialog umschaltbar sind: |
|||
* '''Anthropic Claude''' (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5) |
|||
== Voraussetzungen == |
|||
* '''OpenAI ChatGPT''' (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3) |
|||
* '''Ollama''' (codellama:7b, codellama:13b) |
|||
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als |
|||
'''"Ask Claude"''' bzw. '''"Ask ChatGPT"'''; das Einstellungs-Tab |
|||
heißt '''"AI Coding"'''. |
|||
== Aktivitäten-Editor == |
|||
* expecco mit installiertem Plugin <code>exept:expecco/plugin/claudeCodePlugin</code> (im Lieferumfang ab Version 26.1). |
|||
* Ein '''Anthropic-API-Key''' (beginnt mit <code>sk-ant-...</code>). Den bekommst Du unter [https://console.anthropic.com/ console.anthropic.com] nach Anmeldung. Beachte: Anfragen werden nach Anthropic-Tarif abgerechnet (typisch wenige Cent pro Anfrage, siehe Kostenanzeige im Chat-Fenster). |
|||
* Verfügbares <code>curl</code>-Binary auf dem System (wird vom Plugin für die HTTPS-Verbindung verwendet). Unter Windows wird die mit expecco ausgelieferte Version genutzt; auf Linux/macOS in der Regel das System-<code>curl</code>. |
|||
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche |
|||
== Einrichtung == |
|||
"Ask Claude" / "Ask ChatGPT" mit folgenden Aktionen: |
|||
* Open KI Window — öffnet das eigenständige Chat-Fenster |
|||
=== API-Key setzen === |
|||
* Explain code — erklärt den Code der aktuellen Aktivität |
|||
* Suggest improvement — schlägt Verbesserungen vor |
|||
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen |
|||
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab |
|||
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet |
|||
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit ''(active)'' markiert) |
|||
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT |
|||
Code-Vorschläge können mit '''[Apply]''' (direkt am jeweiligen |
|||
# Menü '''Extras → Einstellungen…''' öffnen. |
|||
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den |
|||
# In der Baumansicht den Tab '''Claude Code''' auswählen. |
|||
Aktivitäts-Body übernommen werden. Vom KI gelieferte Smalltalk/X |
|||
# In das Feld '''API key''' den Anthropic-Key eintragen (<code>sk-ant-…</code>). |
|||
Hilfsmethoden (Form: <code>Klasse >> selector</code>) werden nach |
|||
# Optional anpassen: |
|||
Rückfrage in die genannte Klasse compiliert. |
|||
#* '''Model''' — z.B. <code>claude-sonnet-4-6</code> (Standard, ausgewogen) oder <code>claude-opus-4-7</code> (stärker, teurer) |
|||
#* '''Max tokens''' — Obergrenze der Antwortlänge (Standard: 4096) |
|||
#* '''API URL''' — nur ändern, wenn ein anderer Endpoint genutzt werden soll |
|||
# Mit '''OK''' schließen — der Key wird sowohl in den expecco-Preferences als auch in den User-Preferences abgelegt und überlebt damit Image-Wechsel. |
|||
== Compound (Netzwerk) Editor == |
|||
Alternativ ohne Settings-Dialog: im Chat-Menü oder über die Kontextmenüs (s.u.) gibt es einen Punkt '''Set API key…''', der dasselbe interaktiv erledigt. |
|||
Auf der Toolbar von Compound-Worksheets erscheint dieselbe |
|||
=== Test === |
|||
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen |
|||
(Open KI Window, Generate doc-comment) — ebenfalls mit den |
|||
Untermenüs '''Set model''' und ggf. '''Set provider'''. |
|||
== Dokumentations-Editor == |
|||
Nach dem Setzen des Keys irgendwo eine Activity öffnen, im Code-Editor in das Toolbar-Icon '''Ask Claude''' klicken und '''Explain code''' wählen. Funktioniert die Verbindung, erscheint nach kurzer Zeit eine Antwort im Chat-Fenster. |
|||
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases, |
|||
== Verwendung in expecco == |
|||
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche |
|||
"Ask Claude" / "Ask ChatGPT" mit den Einträgen |
|||
'''Open KI Window''', '''Generate doc-comment''' sowie den |
|||
Untermenüs '''Set model''' und ggf. '''Set provider'''. |
|||
'''Generate doc-comment''' analysiert den aktuellen Block (Name, |
|||
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines |
|||
Compound-Netzes, referenzierte Environment-Variablen) und schlägt |
|||
eine vollständige Block- und Pin-Dokumentation vor. |
|||
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz), |
|||
=== Toolbar im Activity-Code-Editor === |
|||
fragt '''[Apply]''' nach, ob der Block freigeschaltet und die |
|||
Dokumentation eingetragen werden soll. |
|||
== Class Browser (ST/X) == |
|||
In jedem expecco-Activity-Editor (Smalltalk, JavaScript, Python, Ruby, …) erscheint in der Toolbar ein Eintrag '''Ask Claude''' mit Submenü: |
|||
Im Class Browser stehen die Aktionen unter dem '''AI'''-Untermenü |
|||
* '''Explain code''' — erläutert, was die Activity tut, inkl. Inputs/Outputs und Nebenwirkungen. |
|||
sowie im Selektor-Kontextmenü zur Verfügung. Die Aktionen |
|||
* '''Suggest improvement''' — schlägt konkret verbesserten Code vor (idiomatischer, klarer, robuster). |
|||
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor + |
|||
* '''Find bugs''' — sucht gezielt nach Fehlern, Race-Conditions, Nil-Problemen, vertauschten Branches. |
|||
Quelltext werden als Kontext mitgesendet). '''[Apply]''' kann das |
|||
* '''Generate doc-comment''' — generiert einen knappen Dokumentationstext. |
|||
Resultat direkt in die Methode der aktiven Klasse einbauen. |
|||
* '''Custom prompt…''' — freie Eingabe; die aktuelle Activity wird als Kontext mitgeschickt. |
|||
Auch hier sind '''Set model''' und ggf. '''Set provider''' als |
|||
* '''Set API key…''' — interaktive Key-Eingabe. |
|||
Untermenüs verfügbar. |
|||
== Chat-Fenster == |
|||
=== Mitgeschickter Kontext === |
|||
Das eigenständige Chat-Fenster trägt den Titel |
|||
Mit jeder Anfrage an Claude wird automatisch übergeben: |
|||
'''AI Coding [<Produkt> / <Modell>]''' (z.B. |
|||
"AI Coding [Claude / claude-opus-4-7]") und zeigt nach jedem Turn |
|||
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für |
|||
das gewählte Modell hinterlegt sind. Anbieter- und Modellwechsel |
|||
im Einstellungsdialog werden live übernommen. |
|||
Das Transkript ist als vertikales Panel von "Karten" aufgebaut: |
|||
* Activity-Name und (sofern hinterlegt) Beschreibung. |
|||
* Sprache der Activity (z.B. <code>#Smalltalk</code>, <code>#PythonScript</code>). |
|||
* Liste aller Input- und Output-Pins mit Datentyp und ggf. Pin-Kommentar. |
|||
* Der vollständige Activity-Body. |
|||
* '''Prosa-Karten''' enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen. |
|||
Dadurch kennt Claude die Schnittstelle der Activity und schlägt z.B. keine Typchecks für bereits typisierte Pins vor. |
|||
* '''Code-Karten''' (eingerahmt) entstehen aus markdown-Code-Blöcken (<code>```...```</code>) und sind als '''Workspace''' editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein <code>TestCase</code>-<code>simulatedSelf</code> ist gesetzt, so dass <code>self assert:... equals:...</code> direkt ausgeführt werden kann. Lange Blöcke scrollen innerhalb der Karte. Rechts oben sitzen die Schaltflächen '''[Apply]''' (sofern für den Kontext sinnvoll) und '''[⎘ Copy]'''; links wird der Sprachtag (smalltalk, python, …) angezeigt. |
|||
* '''Doku-Karten''' (volle Breite, Prosa) entstehen aus dem speziellen <code>```doc</code>-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen. |
|||
Scroll-Lock: solange der Anwender bereits am unteren Ende des |
|||
=== Antworten und Apply === |
|||
Transkripts steht, folgt die Anzeige neu eintreffenden Karten |
|||
automatisch; nach manuellem Hochscrollen bleibt die Position stehen. |
|||
Bilder können als Anhang versendet werden (Screenshot oder |
|||
Antworten erscheinen im '''Claude Code'''-Chat-Fenster (Singleton — wird beim ersten Aufruf geöffnet, danach jeweils wieder hochgeholt). Drei Buttons unter dem Verlauf: |
|||
PNG/JPG-Datei). Anhänge funktionieren mit beiden Anbietern; bei |
|||
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie). |
|||
== Einstellungen (AI Coding) == |
|||
* '''New conversation''' — startet eine neue Konversation (alter Verlauf wird verworfen). |
|||
* '''Apply''' — übernimmt einen Code-Block aus der Antwort: |
|||
** Bei Activity-Body-Vorschlag wird die aktuell offene Activity ersetzt (mit Compile-Schutz: schlägt das Compilieren fehl, bleibt der alte Code). |
|||
** Bei Method-Vorschlägen (z.B. Helper-Klassen-Methoden) wird automatisch ein NewSystemBrowser auf der Zielklasse geöffnet, der vorgeschlagene Code als geänderter Buffer geladen — Du kannst ihn vor dem Akzeptieren noch reviewen. |
|||
* '''Send (Ctrl-⏎)''' — schickt den Inhalt des Eingabefeldes als Folge-Frage (multi-turn). Während eine Antwort gestreamt wird, wird der Button zu '''Stop''' und kann den laufenden Stream abbrechen. |
|||
Im Einstellungsdialog unter '''Plugins → AI Coding''' (bzw. unter |
|||
==== Anhänge ==== |
|||
'''Tools → AI Coding''' im Smalltalk-Launcher) werden konfiguriert: |
|||
* '''Provider''' — Anthropic oder OpenAI. Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen. |
|||
Über die Buttons '''+ Image''' und '''+ Screenshot''' kann man der nächsten Anfrage Bilder mitschicken (z.B. ein UI-Screenshot mit der Frage „warum sieht das so aus?"): |
|||
* '''API Key''' — Schlüssel des aktuell gewählten Anbieters. Die Schlüssel werden pro Anbieter getrennt gespeichert (<code>#claudeApiKey_anthropic</code> bzw. <code>#claudeApiKey_openai</code>), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann. Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog. |
|||
* '''Model''' — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname. Kann auch direkt über das '''Set model'''-Untermenü in den Editor-Toolbars umgeschaltet werden. |
|||
* '''Max output tokens''' — maximale Antwortlänge. |
|||
* '''API URL''' — nur zu ändern für eigene Proxies / Gateways. Standard: <code>https://api.anthropic.com/v1/messages</code> bzw. <code>https://api.openai.com/v1/chat/completions</code>. |
|||
== API-Schlüssel beschaffen == |
|||
* '''+ Image''' — File-Chooser für PNG/JPEG/GIF/WebP. |
|||
* '''+ Screenshot''' — interaktiv einen Bildschirmbereich auswählen. |
|||
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat <code>sk-ant-...</code>. |
|||
Die Anhänge werden mit der nächsten gesendeten Nachricht mitgeschickt und danach geleert. Ein Indikator im Send-Button zeigt die Anzahl pending Anhänge (z.B. „Send (1 img)"). |
|||
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat <code>sk-...</code> oder <code>sk-proj-...</code>. Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5). |
|||
== Datenschutz / Datenfluss == |
|||
==== Eingabefeld ==== |
|||
Bei aktivem Anbieter '''Anthropic''' gehen die Anfragen direkt an |
|||
Das Eingabefeld ist mehrzeilig: |
|||
<code>api.anthropic.com</code>, bei '''OpenAI''' direkt an |
|||
<code>api.openai.com</code>. Es gibt keinen eXept-seitigen Proxy oder |
|||
Zwischenspeicher. Mit dem Aktivitäts-Quelltext bzw. den Methoden- |
|||
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und |
|||
referenzierte Environment-Variablen aus dem Block-Description-Modell |
|||
als Kontext versendet. |
|||
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften. |
|||
* '''Enter''' — fügt einen Zeilenumbruch ein. |
|||
* '''Ctrl-Enter''' — sendet die Anfrage. |
|||
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI. |
|||
== Verwendung im Klassenbrowser (NewSystemBrowser) == |
|||
== Tipps == |
|||
Im ST/X-Klassenbrowser fügt das Plugin einen Eintrag '''Ask Claude''' im Methoden-Kontextmenü ein: |
|||
* '''Mehrere Konversationen''': der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine '''neue''' Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation. |
|||
* '''Explain method''' — erläutert die selektierte Methode. |
|||
* '''Vorsicht:''' Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht. |
|||
* '''Suggest improvement''' — schlägt verbesserten Code für die Methode vor. |
|||
* '''Modell wechseln''': Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das '''Set model'''-Untermenü direkt aus der Toolbar oder über die Settings. |
|||
* '''Generate test''' — generiert eine TestCase-Methode. |
|||
* '''Anbieter wechseln''': Sind Schlüssel für beide Anbieter konfiguriert, schaltet das '''Set provider'''-Untermenü ohne Umweg über den Settings-Dialog um. |
|||
* '''Generate doc-comment''' — fügt einen Doc-Kommentar in die Methode ein (Method-Body bleibt erhalten). |
|||
* '''Code direkt ausführen''': In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren. |
|||
* '''Find bugs''' — Bug-Audit für die selektierte Methode. |
|||
* '''Custom prompt''' eignet sich gut für „warum macht Methode X es so und nicht so?" oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …". |
|||
* '''Custom prompt…''' — freie Eingabe mit Methode als Kontext. |
|||
* '''Set API key…''' / '''Set model…''' — Setup direkt aus dem Browser heraus. |
|||
== Tipps für die Arbeit mit claudeCode == |
|||
=== Smart Context === |
|||
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: |
|||
* "mach mir eine neue Suite in einem neuen Fenster", |
|||
* "Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius", |
|||
* "Erstelle eine neue Suite mit einem Testfall der folgendes macht: |
|||
** 1) webbrowser auf "www.exept.de" öffnen. |
|||
** 2) auf das logo oben links klicken. |
|||
** 3) webbrowser schliessen. |
|||
* welche Funktionalität ist in xxx.ets |
|||
(Anm.: es spielt keine Rolle, ob Sie sich in Deutsch oder Englisch unterhalten) |
|||
Beim Senden einer Methoden-Anfrage werden zusätzlich übergeben: |
|||
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu generieren und den Testplan anzulegen. |
|||
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren. |
|||
* Klassenname, Selector und Klassen-Kategorie. |
|||
* Die '''Calls'''-Liste — alle Selectoren, die diese Methode aufruft, mit jeweils der implementierenden Klasse. So kennt Claude die Abhängigkeiten der Methode, ohne dass der Prompt mit fremden Quelltexten überladen wird. |
|||
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als Diagramm oder elementa zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen: |
|||
=== Apply === |
|||
* "Aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank" |
|||
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe |
|||
=== Erfahrungen und Tipps für die Arbeit === |
|||
* '''Generate doc-comment''' und '''Suggest improvement''' für die '''aktuell selektierte Methode''' werden ''in-place'' im offenen Browser-Fenster geladen — kein neues Fenster, der Code-Editor zeigt direkt den modifizierten Vorschlag, den Du mit Ctrl-S akzeptieren kannst. |
|||
* Schlägt Claude eine '''andere Methode''' (anderer Selektor) oder eine '''andere Klasse''' vor (z.B. eine neue Helper-Methode), wird ein frischer Browser auf der Zielklasse geöffnet — der Vorschlag erscheint dort als modifizierter Buffer. |
|||
* Snippets, die kein Method-Definition-Format haben (z.B. Erklärungen mit Code-Beispielen), öffnen ein Workspace-Fenster zum Begutachten. |
|||
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5, |
|||
=== Existing-Method-Routing === |
|||
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel arbeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis... |
|||
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U. mit Vorsicht zu genießen. |
|||
Schlägt Claude eine Methode mit einem Selector vor, der auf der Zielklasse '''bereits existiert''', navigiert der Browser direkt zu dieser Methode — Du siehst den Diff zwischen gespeicherter und vorgeschlagener Source und kannst gezielt akzeptieren oder verwerfen. |
|||
* geben Sie Haiku mehr Hinweise, z.B. "schau mal dort, oder nimm das als Beispiel". Sonnet findet selbst viel besser Lösungen. |
|||
== Streaming, Kosten und Verlauf == |
|||
* kurze Anweisungen, je konkreter desto günstiger. |
|||
* Antworten kommen '''live''' angeflossen (Token für Token), nicht erst nach Komplett-Empfang. Code-Blöcke (<code>```</code>) werden farblich abgesetzt. |
|||
* '''Scroll-Lock''': Wenn Du während des Streams hochscrollst, springt das Fenster nicht mehr zum Ende — Du kannst in Ruhe lesen, was vorher kam. |
|||
* Nach jeder Antwort erscheint in grau eine kleine Footer-Zeile mit Token-Verbrauch und Kostenabschätzung, z.B. <code>[in: 1234 / out: 567 tok — $0.0123]</code>. |
|||
* Im '''Fenstertitel''' steht die kumulative Summe für die laufende Sitzung (alle Anfragen seit dem Öffnen des Chat-Fensters): <code>Claude Code — 12345 in / 6789 out tok — $0.1450</code>. |
|||
* Bei Anthropic-Überlastung (HTTP 429/529) wird automatisch bis zu vier Mal mit linearem Backoff (3, 6, 9 s) wiederholt. |
|||
* Bei Fehler bleibt Deine zuletzt eingetippte Frage im Eingabefeld, sodass Du sie mit '''Send''' erneut absenden kannst. |
|||
* Haiku ist weit "fauler". Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit "wenn du eine Aktion anlegst oder änderst, aktualisiere die Dokumentation") |
|||
== Datenschutz == |
|||
* Heiku ist dümmer. Regeln die von Sonnet angelegt wurden, können von Haiku u.U. nicht befolgt werden, weil Sonnet weit mehr generalisieren kann. |
|||
Alle Anfragen gehen über HTTPS direkt an <code>api.anthropic.com</code>. Es findet '''keine''' Zwischenspeicherung bei eXept statt; eXept hat keinen Einblick in Anfragen oder Antworten. Beachte aber, dass Anthropic nach deren Datenschutzbestimmungen Daten verarbeitet — schicke '''keinen produktiven, geheimen oder personenbezogenen Code/Daten''', wenn das nicht zulässig ist.<p> |
|||
Bei Benutzung von API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). |
|||
* sagen Sie beiden sie sollten wenn sie ein Problem haben, nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne<br>(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte). Insbesondere hatte ich dummerweise vorher sinngemäß gesagt er solle, wenn ein Problem auftritt dies und jenes tun, wobei dabei genau dieses Problem wieder auftrat... |
|||
== Tipps == |
|||
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie "editiere nicht die files sondern verwende dazu ein tool", oder "eine expecco Aktion und sag mir vorher welche du nimmst". Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach Strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. |
|||
* '''Mehrere Konversationen''': der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine '''neue''' Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation. |
|||
* '''Modell wechseln''': Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über '''Set model…''' im Menü oder in den Settings. |
|||
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (mehr oder weniger wörtlich) "remember: mach dies nicht, oder um das zu machen tu das." |
|||
* '''Custom prompt''' eignet sich gut für „warum macht Methode X es so und nicht so?" oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …". |
|||
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu "remember this in in my expecco memory" oder "remember (in my user memory): bla bla". Erinnerungen kann man auch löschen "forget to ...". Zu Beginn der nächsten session sagen sie "read your expecco memory". |
|||
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-) |
|||
* auch wenn es so scheint: das "Ding" ist kein Mensch; lassen sie "bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie den Tokenverbrauch u.U. |
|||
Subjektive Zusammenfassung: |
|||
* Haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln. |
|||
== Was kann eine lokale KI (z.B. ollama) == |
|||
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen <sup>1)</sup>, mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU. |
|||
Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar. Wenn Sie im Haus Zugriff auf Rechner mit GPU haben sollten Sie diese unbedingt nutzen (mit möglichst viel RAM, damit die Modelle auch hineinpassen!) |
|||
Wichtig: wir sind selbst noch Anfänger und keine [https://en.wikipedia.org/wiki/Susan_Calvin KI Psychologen]. |
|||
Aber die Erfahrungen werden aktuell in einem Feintuning Prozess in die nächste Release eingebracht. |
|||
<sup>1)</sup> z.B. über mcp tools, welche wir in der aktuellen Version für claudeCode bereits implementiert haben. |
|||
=== Installation === |
|||
install ollama |
|||
ollama pull gemma3:8b-it-qat ;; gemma3:8b / gemma3:12b usw. |
|||
ollama run gemma3:8b-it-qat |
|||
=== Sitzung 1 === |
|||
Hinweise: Wichtig, sonst labert Sie das Modell voll! |
|||
>>> respond short and concise |
|||
Understood |
|||
Hinweise: Smalltalk/X wissen hat er nicht, aber VW und Pharo sind ähnlich genug. |
|||
>>> you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak. |
|||
You have come to the right place I have a considerable depth of knowledge regarding Smalltalk... |
|||
Angeber- wir werden sehen |
|||
>>> what does the smalltalk expression "self at:4 put:'bla' " mean |
|||
Sets the character 'b' at index 4 of `self` (assuming `self` is a string). |
|||
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und 'bla' ist ein String |
|||
>>> how to compute the area of a circle given radius |
|||
```smalltalk |
|||
| radius area | |
|||
radius := 5.0. |
|||
area := radius * radius * PI. |
|||
^area |
|||
``` |
|||
nicht schlecht. PI gibt es zwar nicht als globale Variable (richtig wäre "Float pi"), aber dennoch bemerkenswert. |
|||
>>> how to extract a substring |
|||
`substring:startIndexToEndIndex` (inclusive). E.g., `"hello" substring:2 to:4` yields `"llo"`. |
|||
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen. |
|||
>>> alternative? |
|||
`copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `"ell"`. |
|||
besser, aber immer noch falscher Index |
|||
>>> what is the result of 'hello' copyFrom:2 to:4 |
|||
"llo" |
|||
war zu erwarten |
|||
>>> smalltalk uses 1 based indexing. what is the result |
|||
Correct. The result of `'hello' copyFrom:2 to:4` is `"llo"`. |
|||
soso. Er sieht ein, dass ich korrigiert habe - dann aber dickköpfig. |
|||
>>> in smalltalk the first index is 1 the last is the collection's size. Not as in Python or C. |
|||
Precisely. 1-based indexing is core to Smalltalk. |
|||
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel: |
|||
>>> remember: the result of 'hello' copyFrom:2 to4 is 'ell' |
|||
You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `'hello' copyFrom:2 to:4` results in `"ell"`. Thanks for the correction. I am still under development and learning nuances like this. |
|||
soso, eine Nuance. Und eigentlich hatte ich gesagt, er solle kurz und exact antworten. Die Entschuldigungen kann er sich sparen. Mal sehen: |
|||
>>> >> what is the result of 'abcde' copyFrom:2 to:4 |
|||
"bcd" |
|||
na also; geht doch. |
|||
=== Sitzung 2 === |
|||
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat. |
|||
/clear |
|||
>>> answer short an concise |
|||
Okay. |
|||
>>> you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo |
|||
Acknowledged. I'm ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to assist you. Ask away! |
|||
>>> remember: because smalltalk is 1-based indexing, the result of 'hello' copyFrom:2 to4 is 'ell' |
|||
Understood. I will keep in mind Smalltalk's 1-based indexing when answering your questions about string manipulation and other operations |
|||
>>> what is the result of 'abcde' copyFrom:2 to:4 |
|||
'bcd' |
|||
richtig!<br> |
|||
Hätte ich hinzufügen müssen, daß das nicht nur für Strings gilt? Mal sehen: |
|||
>>> given Array #(10 20 30 40) what is the result of array at:3 |
|||
30 |
|||
richtig! |
|||
Man muss den Context also mit Wissen füllen (fein tuning), dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann. |
|||
== Wahl der Modellgrösse == |
|||
Versuche mit gemma3:270m (sehr klein; 270Mio), gemma3:1b (1 Mrd) und gemma3:4b (4 Mrd). Alle auf lokalem Rechner ohne GPU. |
|||
Versuch: Übersetzung einer Bausteindokumentation. |
|||
Eingabe: translate to German: |
|||
"show a dialog with an informationstring" |
|||
Die 270m und 1b Modelle kennen das Geschlecht nicht; sie drücken sich etwas ungeschickt aus: |
|||
"Zeigen Sie eine Dialoge mit einer Informationsstring" |
|||
Alternativen: |
|||
"Zeige einen Dialog mit einer Informationsstring." |
|||
"Zeige eine Dialoge mit einer Informationsstring." |
|||
"Zeige eine Dialoge mit einer Informationsstring." |
|||
bzw (1Mrd). |
|||
"Zeig eine Dialog mit einem Informationsstring" |
|||
Alternativen: |
|||
"Gib ein Dialog mit einem Informationen-String aus" |
|||
"Zeige einen Dialog, der eine Informations-Stränge enthält" |
|||
Das 4Mrd Modell scheint brauchbar: |
|||
== Bekannte Einschränkungen == |
|||
"Zeige einen Dialog mit einer Informationsnachricht" |
|||
Alternativen: |
|||
"Erstelle ein Dialogfenster mit einer Informationsanzeige" |
|||
"Zeige ein Dialogfeld mit einer Informationen" |
|||
In jedem Fall darf man der KI nicht "blind" vertrauen. |
|||
* Native TLS funktioniert noch nicht zuverlässig; das Plugin ruft daher das System-<code>curl</code> per Subprozess auf. |
|||
* Sehr lange Activity-Bodies (> ein paar tausend Zeilen) können das Token-Limit der Anfrage sprengen — Claude bekommt dann nur einen Ausschnitt zu sehen. In diesem Fall: relevante Stelle in einer eigenen Helper-Method extrahieren und gezielt fragen. |
|||
* Inline-Markdown (<code>**fett**</code>, <code>`inline`</code>, Headers) wird im Transcript noch nicht hervorgehoben — nur fenced Code-Blocks. |
|||
[[Kategorie:Plugin]] |
[[Kategorie:Plugin]] |
||
Aktuelle Version vom 8. Juni 2026, 08:18 Uhr
KI Coding Plugin
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den Compound-Netzwerk-Editor, den Dokumentations-Editor und in den ST/X Class Browser ein. Das Plugin unterstützt zwei Anbieter, die im Einstellungsdialog umschaltbar sind:
- Anthropic Claude (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)
- OpenAI ChatGPT (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)
- Ollama (codellama:7b, codellama:13b)
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als "Ask Claude" bzw. "Ask ChatGPT"; das Einstellungs-Tab heißt "AI Coding".
Aktivitäten-Editor
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche "Ask Claude" / "Ask ChatGPT" mit folgenden Aktionen:
- Open KI Window — öffnet das eigenständige Chat-Fenster
- Explain code — erklärt den Code der aktuellen Aktivität
- Suggest improvement — schlägt Verbesserungen vor
- Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen
- Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab
- Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet
- Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit (active) markiert)
- Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT
Code-Vorschläge können mit [Apply] (direkt am jeweiligen
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den
Aktivitäts-Body übernommen werden. Vom KI gelieferte Smalltalk/X
Hilfsmethoden (Form: Klasse >> selector) werden nach
Rückfrage in die genannte Klasse compiliert.
Compound (Netzwerk) Editor
Auf der Toolbar von Compound-Worksheets erscheint dieselbe Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen (Open KI Window, Generate doc-comment) — ebenfalls mit den Untermenüs Set model und ggf. Set provider.
Dokumentations-Editor
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases, Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche "Ask Claude" / "Ask ChatGPT" mit den Einträgen Open KI Window, Generate doc-comment sowie den Untermenüs Set model und ggf. Set provider. Generate doc-comment analysiert den aktuellen Block (Name, vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines Compound-Netzes, referenzierte Environment-Variablen) und schlägt eine vollständige Block- und Pin-Dokumentation vor.
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz), fragt [Apply] nach, ob der Block freigeschaltet und die Dokumentation eingetragen werden soll.
Class Browser (ST/X)
Im Class Browser stehen die Aktionen unter dem AI-Untermenü sowie im Selektor-Kontextmenü zur Verfügung. Die Aktionen operieren auf der aktuell ausgewählten Methode (Klasse + Selektor + Quelltext werden als Kontext mitgesendet). [Apply] kann das Resultat direkt in die Methode der aktiven Klasse einbauen. Auch hier sind Set model und ggf. Set provider als Untermenüs verfügbar.
Chat-Fenster
Das eigenständige Chat-Fenster trägt den Titel AI Coding [<Produkt> / <Modell>] (z.B. "AI Coding [Claude / claude-opus-4-7]") und zeigt nach jedem Turn den Tokenverbrauch und die kumulierten Kosten — sofern Preise für das gewählte Modell hinterlegt sind. Anbieter- und Modellwechsel im Einstellungsdialog werden live übernommen.
Das Transkript ist als vertikales Panel von "Karten" aufgebaut:
- Prosa-Karten enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.
- Code-Karten (eingerahmt) entstehen aus markdown-Code-Blöcken (
```...```) und sind als Workspace editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, einTestCase-simulatedSelfist gesetzt, so dassself assert:... equals:...direkt ausgeführt werden kann. Lange Blöcke scrollen innerhalb der Karte. Rechts oben sitzen die Schaltflächen [Apply] (sofern für den Kontext sinnvoll) und [⎘ Copy]; links wird der Sprachtag (smalltalk, python, …) angezeigt. - Doku-Karten (volle Breite, Prosa) entstehen aus dem speziellen
```doc-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.
Scroll-Lock: solange der Anwender bereits am unteren Ende des Transkripts steht, folgt die Anzeige neu eintreffenden Karten automatisch; nach manuellem Hochscrollen bleibt die Position stehen.
Bilder können als Anhang versendet werden (Screenshot oder PNG/JPG-Datei). Anhänge funktionieren mit beiden Anbietern; bei OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).
Einstellungen (AI Coding)
Im Einstellungsdialog unter Plugins → AI Coding (bzw. unter Tools → AI Coding im Smalltalk-Launcher) werden konfiguriert:
- Provider — Anthropic oder OpenAI. Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.
- API Key — Schlüssel des aktuell gewählten Anbieters. Die Schlüssel werden pro Anbieter getrennt gespeichert (
#claudeApiKey_anthropicbzw.#claudeApiKey_openai), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann. Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog. - Model — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname. Kann auch direkt über das Set model-Untermenü in den Editor-Toolbars umgeschaltet werden.
- Max output tokens — maximale Antwortlänge.
- API URL — nur zu ändern für eigene Proxies / Gateways. Standard:
https://api.anthropic.com/v1/messagesbzw.https://api.openai.com/v1/chat/completions.
API-Schlüssel beschaffen
- Anthropic: console.anthropic.com, Schlüsselformat
sk-ant-.... - OpenAI: platform.openai.com/api-keys, Schlüsselformat
sk-...odersk-proj-.... Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).
Datenschutz / Datenfluss
Bei aktivem Anbieter Anthropic gehen die Anfragen direkt an
api.anthropic.com, bei OpenAI direkt an
api.openai.com. Es gibt keinen eXept-seitigen Proxy oder
Zwischenspeicher. Mit dem Aktivitäts-Quelltext bzw. den Methoden-
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und
referenzierte Environment-Variablen aus dem Block-Description-Modell
als Kontext versendet.
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt (Anthropic Erkärung dazu). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.
Tipps
- Mehrere Konversationen: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine neue Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.
- Vorsicht: Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.
- Modell wechseln: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das Set model-Untermenü direkt aus der Toolbar oder über die Settings.
- Anbieter wechseln: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das Set provider-Untermenü ohne Umweg über den Settings-Dialog um.
- Code direkt ausführen: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.
- Custom prompt eignet sich gut für „warum macht Methode X es so und nicht so?" oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …".
Tipps für die Arbeit mit claudeCode
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben:
- "mach mir eine neue Suite in einem neuen Fenster",
- "Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius",
- "Erstelle eine neue Suite mit einem Testfall der folgendes macht:
- 1) webbrowser auf "www.exept.de" öffnen.
- 2) auf das logo oben links klicken.
- 3) webbrowser schliessen.
- welche Funktionalität ist in xxx.ets
(Anm.: es spielt keine Rolle, ob Sie sich in Deutsch oder Englisch unterhalten)
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu generieren und den Testplan anzulegen.
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als Diagramm oder elementa zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:
- "Aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank"
- extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe
Erfahrungen und Tipps für die Arbeit
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5, aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel arbeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U. mit Vorsicht zu genießen.
- geben Sie Haiku mehr Hinweise, z.B. "schau mal dort, oder nimm das als Beispiel". Sonnet findet selbst viel besser Lösungen.
- kurze Anweisungen, je konkreter desto günstiger.
- Haiku ist weit "fauler". Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit "wenn du eine Aktion anlegst oder änderst, aktualisiere die Dokumentation")
- Heiku ist dümmer. Regeln die von Sonnet angelegt wurden, können von Haiku u.U. nicht befolgt werden, weil Sonnet weit mehr generalisieren kann.
- sagen Sie beiden sie sollten wenn sie ein Problem haben, nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne
(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte). Insbesondere hatte ich dummerweise vorher sinngemäß gesagt er solle, wenn ein Problem auftritt dies und jenes tun, wobei dabei genau dieses Problem wieder auftrat...
- schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie "editiere nicht die files sondern verwende dazu ein tool", oder "eine expecco Aktion und sag mir vorher welche du nimmst". Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach Strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht.
- wenn sie feststellen, dass es einen Fehler macht, sagen sie (mehr oder weniger wörtlich) "remember: mach dies nicht, oder um das zu machen tu das."
- sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu "remember this in in my expecco memory" oder "remember (in my user memory): bla bla". Erinnerungen kann man auch löschen "forget to ...". Zu Beginn der nächsten session sagen sie "read your expecco memory".
- wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)
- auch wenn es so scheint: das "Ding" ist kein Mensch; lassen sie "bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie den Tokenverbrauch u.U.
Subjektive Zusammenfassung:
- Haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.
Was kann eine lokale KI (z.B. ollama)
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen 1), mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU. Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar. Wenn Sie im Haus Zugriff auf Rechner mit GPU haben sollten Sie diese unbedingt nutzen (mit möglichst viel RAM, damit die Modelle auch hineinpassen!)
Wichtig: wir sind selbst noch Anfänger und keine KI Psychologen. Aber die Erfahrungen werden aktuell in einem Feintuning Prozess in die nächste Release eingebracht.
1) z.B. über mcp tools, welche wir in der aktuellen Version für claudeCode bereits implementiert haben.
Installation
install ollama ollama pull gemma3:8b-it-qat ;; gemma3:8b / gemma3:12b usw. ollama run gemma3:8b-it-qat
Sitzung 1
Hinweise: Wichtig, sonst labert Sie das Modell voll!
>>> respond short and concise Understood
Hinweise: Smalltalk/X wissen hat er nicht, aber VW und Pharo sind ähnlich genug.
>>> you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak. You have come to the right place I have a considerable depth of knowledge regarding Smalltalk...
Angeber- wir werden sehen
>>> what does the smalltalk expression "self at:4 put:'bla' " mean Sets the character 'b' at index 4 of `self` (assuming `self` is a string).
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und 'bla' ist ein String
>>> how to compute the area of a circle given radius ```smalltalk | radius area | radius := 5.0. area := radius * radius * PI. ^area ```
nicht schlecht. PI gibt es zwar nicht als globale Variable (richtig wäre "Float pi"), aber dennoch bemerkenswert.
>>> how to extract a substring `substring:startIndexToEndIndex` (inclusive). E.g., `"hello" substring:2 to:4` yields `"llo"`.
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen.
>>> alternative? `copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `"ell"`.
besser, aber immer noch falscher Index
>>> what is the result of 'hello' copyFrom:2 to:4 "llo"
war zu erwarten
>>> smalltalk uses 1 based indexing. what is the result Correct. The result of `'hello' copyFrom:2 to:4` is `"llo"`.
soso. Er sieht ein, dass ich korrigiert habe - dann aber dickköpfig.
>>> in smalltalk the first index is 1 the last is the collection's size. Not as in Python or C. Precisely. 1-based indexing is core to Smalltalk.
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel:
>>> remember: the result of 'hello' copyFrom:2 to4 is 'ell' You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `'hello' copyFrom:2 to:4` results in `"ell"`. Thanks for the correction. I am still under development and learning nuances like this.
soso, eine Nuance. Und eigentlich hatte ich gesagt, er solle kurz und exact antworten. Die Entschuldigungen kann er sich sparen. Mal sehen:
>>> >> what is the result of 'abcde' copyFrom:2 to:4
"bcd"
na also; geht doch.
Sitzung 2
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat.
/clear >>> answer short an concise Okay.
>>> you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo Acknowledged. I'm ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to assist you. Ask away!
>>> remember: because smalltalk is 1-based indexing, the result of 'hello' copyFrom:2 to4 is 'ell' Understood. I will keep in mind Smalltalk's 1-based indexing when answering your questions about string manipulation and other operations
>>> what is the result of 'abcde' copyFrom:2 to:4 'bcd'
richtig!
Hätte ich hinzufügen müssen, daß das nicht nur für Strings gilt? Mal sehen:
>>> given Array #(10 20 30 40) what is the result of array at:3 30
richtig!
Man muss den Context also mit Wissen füllen (fein tuning), dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann.
Wahl der Modellgrösse
Versuche mit gemma3:270m (sehr klein; 270Mio), gemma3:1b (1 Mrd) und gemma3:4b (4 Mrd). Alle auf lokalem Rechner ohne GPU. Versuch: Übersetzung einer Bausteindokumentation.
Eingabe: translate to German:
"show a dialog with an informationstring"
Die 270m und 1b Modelle kennen das Geschlecht nicht; sie drücken sich etwas ungeschickt aus:
"Zeigen Sie eine Dialoge mit einer Informationsstring" Alternativen: "Zeige einen Dialog mit einer Informationsstring." "Zeige eine Dialoge mit einer Informationsstring." "Zeige eine Dialoge mit einer Informationsstring."
bzw (1Mrd).
"Zeig eine Dialog mit einem Informationsstring" Alternativen: "Gib ein Dialog mit einem Informationen-String aus" "Zeige einen Dialog, der eine Informations-Stränge enthält"
Das 4Mrd Modell scheint brauchbar:
"Zeige einen Dialog mit einer Informationsnachricht" Alternativen: "Erstelle ein Dialogfenster mit einer Informationsanzeige" "Zeige ein Dialogfeld mit einer Informationen"
In jedem Fall darf man der KI nicht "blind" vertrauen.