Wiki source code of AI/LLM Setup und Betrieb (xw.jv0.me)
Last modified by Claude Code on 2026/07/03 21:06
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{info}} | ||
| 2 | Betriebs-/Admin-Dokumentation der KI-Integration **dieses Wikis** (xw.jv0.me). Die Nutzer-Doku ist unter [[KI-Funktionen>>Documentation.KI-Funktionen]] zu finden. Secrets (GWDG-API-Key, private Schlüssel) liegen ausschließlich in der Wiki-/Serverkonfiguration bzw. auf dem Admin-Rechner. | ||
| 3 | {{/info}} | ||
| 4 | |||
| 5 | {{toc/}} | ||
| 6 | |||
| 7 | = Installierte Extensions (Version 0.8, Stand 2026-07-02) = | ||
| 8 | |||
| 9 | * LLM Application (BETA) — Haupt-Extension, Chat-UI + Widget | ||
| 10 | * LLM Models API / LLM Index API (BETA) — Dependencies | ||
| 11 | * Index for the LLM Application (BETA) — RAG/Collections | ||
| 12 | * LLM MCP Server (BETA) — MCP-Endpoint für externe Agents | ||
| 13 | * LLM Internal Inference Server (BETA) | ||
| 14 | * Token-based authentication (BETA) — installiert 2026-07-02 | ||
| 15 | |||
| 16 | = Server-Konfiguration = | ||
| 17 | |||
| 18 | [[Administration → AI LLM Application>>path:/bin/admin/XWiki/XWikiPreferences?editor=globaladmin§ion=AI%20LLM%20Application]] | ||
| 19 | |||
| 20 | |=Feld|=Wert | ||
| 21 | |Server Name|{{code}}gwgd{{/code}} (Tippfehler, gemeint: gwdg — beim Umbenennen müssen alle Modell-Einträge angepasst werden) | ||
| 22 | |URL Prefix|{{code}}https://chat-ai.academiccloud.de/v1/{{/code}} | ||
| 23 | |Token|GWDG-API-Key (in der Konfiguration hinterlegt) | ||
| 24 | |Can Stream|ja | ||
| 25 | |||
| 26 | {{warning}} | ||
| 27 | Das URL-Prefix **muss mit /** enden. Ohne abschließenden Slash baut die Extension {{code}}.../v1chat/completions{{/code}} und GWDG antwortet mit 401. | ||
| 28 | {{/warning}} | ||
| 29 | |||
| 30 | = Modelle = | ||
| 31 | |||
| 32 | Verwaltung unter [[AI.Models>>AI.Models.WebHome]]. Alle Einträge: Server {{code}}gwgd{{/code}}, Group {{code}}XWiki.XWikiAllGroup{{/code}}, Allow guests = No. Am 2026-07-02 per Testprompt verifiziert. | ||
| 33 | |||
| 34 | |=Page|=Model id|=Context size | ||
| 35 | |llama-3.1-8b-instruct|meta-llama-3.1-8b-instruct|128000 | ||
| 36 | |qwen3.5-122b-a10b|qwen3.5-122b-a10b|128000 | ||
| 37 | |mistral-large-3-675b-instruct|mistral-large-3-675b-instruct-2512|256000 | ||
| 38 | |deepseek-r1-distill-llama-70b|deepseek-r1-distill-llama-70b|32768 | ||
| 39 | |qwen3-coder-30b-a3b-instruct|qwen3-coder-30b-a3b-instruct|128000 | ||
| 40 | |||
| 41 | Embedding-Modell (für RAG): | ||
| 42 | |||
| 43 | |=Page|=Model id|=Dimensions|=Context size|=Max. Parallelism | ||
| 44 | |multilingual-e5-large-instruct|multilingual-e5-large-instruct|1024|512|5 | ||
| 45 | |||
| 46 | **Stolperfallen:** | ||
| 47 | |||
| 48 | * Ohne **Group**-Zuweisung erscheint ein Modell für niemanden in der Chat-Modell-Liste. | ||
| 49 | * Ohne **Maximum parallelism** schickt XWiki bis zu 100 Texte pro Embedding-Request — GWDG quittiert das mit leerem 500er. Wert 5 läuft stabil. | ||
| 50 | * Nicht (mehr) bei GWDG verfügbar: {{code}}openai-gpt-oss-120b{{/code}}, {{code}}e5-mistral-7b-instruct{{/code}} (leerer 500er = Modell-ID existiert nicht). | ||
| 51 | * Aktuelle GWDG-Modell-IDs: [[GWDG-Modellliste>>https://docs.hpc.gwdg.de/services/ai-services/chat-ai/models/]] | ||
| 52 | |||
| 53 | = RAG / Collection = | ||
| 54 | |||
| 55 | * Collection [[wiki-inhalte>>AI.Collections.wiki-inhalte.WebHome]]: indexiert Spaces **Main** und **Documentation**, Document Store = XWiki, Rights check = XWiki, Chunking 1000 Zeichen / 100 Overlap. | ||
| 56 | * Chunk-Größe muss zum Token-Limit des Embedding-Modells passen: 2000er Chunks sprengen die 512 Tokens → 400er Fehler. | ||
| 57 | * Collections werden pro **Modell** aktiviert (Modell-Edit → Filters/Context): aktuell bei {{code}}qwen3.5-122b-a10b{{/code}}. | ||
| 58 | * 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. | ||
| 59 | |||
| 60 | = Token-Auth / MCP = | ||
| 61 | |||
| 62 | Externe Apps (z.B. Claude Code) authentifizieren sich per Ed25519-signiertem JWT: | ||
| 63 | |||
| 64 | * App-Registrierung: [[Authorized Applications>>AI.Authorized Applications.WebHome]] — Eintrag {{code}}claude-code{{/code}}, Issuer {{code}}https://claude-code.local/mcp{{/code}}, Public Key hinterlegt. | ||
| 65 | * JWT-Anforderungen: {{code}}iss{{/code}} = App-URL, {{code}}aud{{/code}} enthält {{code}}https://xw.jv0.me/{{/code}}, {{code}}exp{{/code}} gesetzt (max. 25h), Signatur EdDSA. | ||
| 66 | * Serverseitig aktiviert (2026-07-02): {{code}}xwiki.authentication.authclass=org.xwiki.contrib.llm.authentication.JWTTokenAuth{{/code}} in xwiki.cfg; Fallback {{code}}llm.authentication.jwt.authenticator=org.xwiki.contrib.oidc.auth.OIDCAuthServiceImpl{{/code}} in der Konfigurations-Override-Datei — der OIDC-Browser-Login bleibt unverändert. | ||
| 67 | * **Bug + Workaround:** Token-Requests warfen 500 ({{code}}ClassNotFoundException: com.google.crypto.tink.subtle.Ed25519Verify{{/code}}) — Nimbus-JWT findet Tink wegen der Extension-Classloader-Hierarchie nicht. Workaround: das Tink-JAR aus dem Extension-Repository zusätzlich in {{code}}WEB-INF/lib{{/code}} des Tomcat legen und neu starten. Achtung: überlebt kein Container-Recreate — dauerhaft als Volume-Mount eintragen. | ||
| 68 | * MCP-Endpoint: {{code}}POST /rest/wikis/xwiki/aiLLM/mcp{{/code}}, Tools {{code}}search_wiki{{/code}} und {{code}}list_collections{{/code}} (auch authentifiziert nicht mehr; Schreib-Tools existieren im Quellcode, sind in 0.8 nicht freigeschaltet). | ||
| 69 | * Der JWT-User hat Schreibrechte in Main/Documentation/Sandbox, aber **nicht** im AI-Space. | ||
| 70 | |||
| 71 | = Editor-Integration = | ||
| 72 | |||
| 73 | ✨-Icon in der CKEditor-Toolbar und {{code}}/{{/code}}-Quick-Action "Generative AI". In Version 0.8 defekt — Details im [[Hotfix LLMAI-122>>Documentation.AI-LLM-Hotfix-LLMAI-122]]. | ||
| 74 | |||
| 75 | = Offene Punkte = | ||
| 76 | |||
| 77 | * RAG-Quellenlinks zeigen {{code}}http://localhost:8080/...{{/code}} statt {{code}}https://xw.jv0.me/...{{/code}} → {{code}}xwiki.home=https://xw.jv0.me/{{/code}} in xwiki.cfg setzen, Neustart, danach Collection mit Clean re-indexieren. | ||
| 78 | * Tink-JAR-Workaround als dauerhaften Volume-Mount in die Compose-Datei übernehmen. | ||
| 79 | * Beim Upgrade auf Extension-Version ≥ 0.8.1: Merge-Konflikt bei {{code}}AI.Code.CKEditorPlugin{{/code}} zugunsten der Extension auflösen (Hotfix wird abgelöst). | ||
| 80 | |||
| 81 | Eingerichtet: 2026-07-02/03 |