AI/LLM Setup und Betrieb (xw.jv0.me)

Last modified by Claude Code on 2026/07/03 21:06

Information

Betriebs-/Admin-Dokumentation der KI-Integration dieses Wikis (xw.jv0.me). Die Nutzer-Doku ist unter KI-Funktionen zu finden. Secrets (GWDG-API-Key, private Schlüssel) liegen ausschließlich in der Wiki-/Serverkonfiguration bzw. auf dem Admin-Rechner.

Installierte Extensions (Version 0.8, Stand 2026-07-02)

  • LLM Application (BETA) — Haupt-Extension, Chat-UI + Widget
  • LLM Models API / LLM Index API (BETA) — Dependencies
  • Index for the LLM Application (BETA) — RAG/Collections
  • LLM MCP Server (BETA) — MCP-Endpoint für externe Agents
  • LLM Internal Inference Server (BETA)
  • Token-based authentication (BETA) — installiert 2026-07-02

Server-Konfiguration

Administration → AI LLM Application

FeldWert
Server Namegwgd (Tippfehler, gemeint: gwdg — beim Umbenennen müssen alle Modell-Einträge angepasst werden)
URL Prefixhttps://chat-ai.academiccloud.de/v1/
TokenGWDG-API-Key (in der Konfiguration hinterlegt)
Can Streamja
Warning

Das URL-Prefix muss mit / enden. Ohne abschließenden Slash baut die Extension .../v1chat/completions und GWDG antwortet mit 401.

Modelle

Verwaltung unter AI.Models. Alle Einträge: Server gwgd, Group XWiki.XWikiAllGroup, Allow guests = No. Am 2026-07-02 per Testprompt verifiziert.

PageModel idContext size
llama-3.1-8b-instructmeta-llama-3.1-8b-instruct128000
qwen3.5-122b-a10bqwen3.5-122b-a10b128000
mistral-large-3-675b-instructmistral-large-3-675b-instruct-2512256000
deepseek-r1-distill-llama-70bdeepseek-r1-distill-llama-70b32768
qwen3-coder-30b-a3b-instructqwen3-coder-30b-a3b-instruct128000

Embedding-Modell (für RAG):

PageModel idDimensionsContext sizeMax. Parallelism
multilingual-e5-large-instructmultilingual-e5-large-instruct10245125

Stolperfallen:

  • Ohne Group-Zuweisung erscheint ein Modell für niemanden in der Chat-Modell-Liste.
  • Ohne Maximum parallelism schickt XWiki bis zu 100 Texte pro Embedding-Request — GWDG quittiert das mit leerem 500er. Wert 5 läuft stabil.
  • Nicht (mehr) bei GWDG verfügbar: openai-gpt-oss-120b, e5-mistral-7b-instruct (leerer 500er = Modell-ID existiert nicht).
  • Aktuelle GWDG-Modell-IDs: GWDG-Modellliste

RAG / Collection

  • Collection wiki-inhalte: indexiert Spaces Main und Documentation, Document Store = XWiki, Rights check = XWiki, Chunking 1000 Zeichen / 100 Overlap.
  • Chunk-Größe muss zum Token-Limit des Embedding-Modells passen: 2000er Chunks sprengen die 512 Tokens → 400er Fehler.
  • Collections werden pro Modell aktiviert (Modell-Edit → Filters/Context): aktuell bei qwen3.5-122b-a10b.
  • Re-Indexierung: Collection-Seite → "Start re-indexing". Clean nur bei Modell-/Dimensionswechsel nötig; einzelne transiente 500er verschwinden durch erneutes Re-Indexieren ohne Clean. Seiten-Updates in indexierten Spaces laufen automatisch.

Token-Auth / MCP

Externe Apps (z.B. Claude Code) authentifizieren sich per Ed25519-signiertem JWT:

  • App-Registrierung: Authorized Applications — Eintrag claude-code, Issuer https://claude-code.local/mcp, Public Key hinterlegt.
  • JWT-Anforderungen: iss = App-URL, aud enthält https://xw.jv0.me/, exp gesetzt (max. 25h), Signatur EdDSA.
  • Serverseitig aktiviert (2026-07-02): xwiki.authentication.authclass=org.xwiki.contrib.llm.authentication.JWTTokenAuth in xwiki.cfg; Fallback llm.authentication.jwt.authenticator=org.xwiki.contrib.oidc.auth.OIDCAuthServiceImpl in der Konfigurations-Override-Datei — der OIDC-Browser-Login bleibt unverändert.
  • Bug + Workaround: Token-Requests warfen 500 (ClassNotFoundException: com.google.crypto.tink.subtle.Ed25519Verify) — Nimbus-JWT findet Tink wegen der Extension-Classloader-Hierarchie nicht. Workaround: das Tink-JAR aus dem Extension-Repository zusätzlich in WEB-INF/lib des Tomcat legen und neu starten. Achtung: überlebt kein Container-Recreate — dauerhaft als Volume-Mount eintragen.
  • MCP-Endpoint: POST /rest/wikis/xwiki/aiLLM/mcp, Tools search_wiki und list_collections (auch authentifiziert nicht mehr; Schreib-Tools existieren im Quellcode, sind in 0.8 nicht freigeschaltet).
  • Der JWT-User hat Schreibrechte in Main/Documentation/Sandbox, aber nicht im AI-Space.

Editor-Integration

✨-Icon in der CKEditor-Toolbar und /-Quick-Action "Generative AI". In Version 0.8 defekt — Details im Hotfix LLMAI-122.

Offene Punkte

  • RAG-Quellenlinks zeigen http://localhost:8080/... statt https://xw.jv0.me/...xwiki.home=https://xw.jv0.me/ in xwiki.cfg setzen, Neustart, danach Collection mit Clean re-indexieren.
  • Tink-JAR-Workaround als dauerhaften Volume-Mount in die Compose-Datei übernehmen.
  • Beim Upgrade auf Extension-Version ≥ 0.8.1: Merge-Konflikt bei AI.Code.CKEditorPlugin zugunsten der Extension auflösen (Hotfix wird abgelöst).

Eingerichtet: 2026-07-02/03