# LLM-Dienst – Kurzanleitung ## Worum geht es? Der Dienst stellt **große Sprachmodelle (LLMs)** über eine einfache HTTP-API bereit, die direkt aus Python-Skripten, Jupyter-Notebooks oder eigenen Anwendungen angesprochen werden kann. Die Modelle laufen lokal auf einem GPU-Server im Intranet – ohne Datenübertragung nach außen und ohne Cloud-Kosten. Typische Anwendungsfälle: - Texte zusammenfassen, übersetzen oder umformulieren - KI-gestütztes Coding (z.B. mit **[opencode](https://opencode.ai)**) - Experimente mit Prompt-Engineering und LLM-Integration in eigene Projekte --- ## Zugang Der Dienst ist **nur im Intranet** erreichbar. | | | |---|---| | **API-Endpunkt** | `http://141.75.33.244:8000` | | **Authentifizierung** | API-Key erforderlich (per E-Mail beim Admin anfragen) | --- ## Verfügbare Modelle | Modell | Größe | Hinweis | |---|---|---| | `gemma4:31b` | 19 GB | kompakt, schnell | | `gpt-oss:20b` | 13 GB | kompakt, schnell | | `gpt-oss:120b` | 65 GB | sehr leistungsfähig | | `qwen3.5:122b` | 81 GB | sehr leistungsfähig | | `qwen3-coder-next:q8_0` | 84 GB | speziell für Code | > **Wichtig:** Es kann immer nur **ein Modell gleichzeitig** im GPU-Speicher geladen sein. > Wechselt jemand das Modell, muss das vorherige entladen und das neue geladen werden – > das kann **mehrere Minuten** dauern. Der erste Prompt nach einem Modellwechsel ist > deshalb deutlich langsamer. Danach bleibt das Modell einige Zeit geladen. --- ## Python-Beispiel – Einfacher Prompt Das API folgt dem **OpenAI-Standard**, d.h. die `openai`-Bibliothek kann direkt verwendet werden. ```bash pip install openai ``` ```python from openai import OpenAI API_KEY = "sk-..." # euren API-Key eintragen BASE_URL = "http://141.75.33.244:8000/v1" MODEL = "gemma4:31b" # Modell nach Bedarf wählen client = OpenAI(api_key=API_KEY, base_url=BASE_URL) response = client.chat.completions.create( model=MODEL, messages=[ {"role": "user", "content": "Erkläre den Unterschied zwischen L1- und L2-Regularisierung."} ] ) print(response.choices[0].message.content) ``` --- ## Python-Beispiel – Verfügbare Modelle abfragen ```python from openai import OpenAI API_KEY = "sk-..." BASE_URL = "http://141.75.33.244:8000/v1" client = OpenAI(api_key=API_KEY, base_url=BASE_URL) models = client.models.list() for m in models.data: print(m.id) ``` --- ## Empfehlungen zur Nutzung - **Kleines Modell zuerst** (`gemma4:31b` oder `gpt-oss:20b`) – viel schneller, für viele Aufgaben ausreichend. - **Großes Modell** nur bei komplexen Aufgaben (`qwen3.5:122b`, `gpt-oss:120b`). - **Code-Aufgaben**: `qwen3-coder-next:q8_0` ist speziell dafür optimiert. - Wenn möglich, **dasselbe Modell wie andere Nutzer** verwenden, um häufige Modellwechsel zu vermeiden. --- ## Quotas Je nach API-Key können folgende Limits konfiguriert sein: - Maximale **Anfragen pro Tag / Monat** - Maximale **Tokens pro Tag / Monat** Bei Überschreitung gibt die API den Statuscode `429 Too Many Requests` zurück. --- ## Coding-Assistent: opencode [opencode](https://opencode.ai) ist ein terminal-basierter KI-Coding-Agent (ähnlich Claude Code), der OpenAI-kompatible APIs unterstützt und damit direkt auf den Intranet-Dienst zeigen kann. ### Installation ```bash npm install -g opencode-ai # oder curl -fsSL https://opencode.ai/install | bash ``` ### Konfiguration Konfigurationsdatei anlegen unter `~/.config/opencode/config.json`: ```json { "$schema": "https://opencode.ai/config.json", "providers": { "openai": { "apiKey": "sk-...", "baseURL": "http://141.75.33.244:8000/v1" } }, "model": "openai/qwen3-coder-next:q8_0" } ``` Für Code-Aufgaben empfiehlt sich `qwen3-coder-next:q8_0`, für allgemeine Aufgaben `gemma4:31b` oder `gpt-oss:20b`. ### Starten ```bash opencode ``` opencode öffnet eine interaktive Terminal-Oberfläche und kann dann im Projektverzeichnis eingesetzt werden – Dateien lesen, Code generieren, Refactoring vorschlagen usw. --- ## Administration (nur für Admins) Das Web-Interface zur Verwaltung von API-Keys und Quotas ist erreichbar unter: **`http://141.75.33.244:8001`** Dort können API-Keys angelegt, deaktiviert und mit Quotas versehen werden. ### Modell-Lock für Praktika Unter **Einstellungen → Aktives Modell (Lock)** kann ein Modell fest vorgegeben werden. Ist ein Lock gesetzt, wird das `model`-Feld in jedem Request durch dieses Modell ersetzt – unabhängig davon, was der Client schickt. Das verhindert unkoordinierte Modellwechsel während einer Veranstaltung, die alle Teilnehmenden durch lange Ladezeiten ausbremsen würden. Typischer Ablauf für ein Praktikum: 1. Vor der Veranstaltung: passendes Modell in Ollama laden 2. Lock in der Admin-Oberfläche aktivieren 3. Nach der Veranstaltung: Lock wieder deaktivieren (Feld leeren)