---
title: "Trainingskorpus"
description: "Wie die Dokumente als LoRA-fähige Trainingsmenge exportiert werden und wie sie neu generiert werden können."
---

Jede Seite in dieser Dokumentation ist auch ein **Trainingsdatenpunkt**. Nibiru bietet ein Skript, das einen sauberen JSONL-Korpus extrahiert, der für die LoRA-Fine-Tuning eines offenen Modells – wie Llama, Mistral, Qwen oder Gemma – auf spezifische Kenntnisse von Nibiru geeignet ist.

## Führen Sie es aus
```bash
cd docs
npm run build:corpus
```
Dies schreibt:
```
docs/dist/corpus/
├── instructions.jsonl     # instruction → response pairs
├── chat.jsonl             # OpenAI/Anthropic chat-message format
├── completion.jsonl       # plain prompt → completion (legacy)
└── chunks.jsonl           # raw Markdown chunks (one per H2/H3 section)
```
## Formate

### `anweisungen.jsonl`

LoRA-freundliche Anweisungsoptimierung:
```json
{
  "instruction": "How do I scaffold a new module in Nibiru?",
  "input": "",
  "output": "Run `./nibiru -m <name>`, optionally with `-g` for Graylog hooks. This creates `application/module/<name>/` with traits/, plugins/, interfaces/, settings/<name>.ini and the main `<name>.php` class implementing `IModule`."
}
```
Jede Eintragung wird aus einem Dokumentationsabschnitt generiert, der eine klare Frage (abgeleitet vom H2/H3-Titel) und den Abschnittstext als Antwort enthält.

### `chat.jsonl`

OpenAI Chat / Anthropic Nachrichtenformat:
```json
{
  "messages": [
    {"role": "system", "content": "You are an expert on the Nibiru PHP framework."},
    {"role": "user", "content": "How do I scaffold a new module?"},
    {"role": "assistant", "content": "Run `./nibiru -m <name>`. …"}
  ]
}
```
Kompatibel mit OpenAI Fine-Tunes, der API von Anthropic zur Bewertung und den meisten LoRA-Tools, die Eingaben im Chat-Format erwarten (Vorlage `sharegpt` von Axolotl, Unsloth, LLaMA-Factory).

### `chunks.jsonl`

Rohdaten für die Verwendung als RAG-Retrieval-Daten:
```json
{
  "id": "core/modules#observer-pattern",
  "title": "The observer pattern",
  "url": "/core/modules/#the-observer-pattern",
  "section": "core/modules",
  "language": "en",
  "tokens": 412,
  "content": "Modules implementing `SplSubject` can broadcast events…"
}
```
Dies ist genau die Datei, die intern von [Oracle](/ai/oracle/) verwendet wird.

## Wie Chunks abgeleitet werden

Der Korpus-Bauer durchläuft jede `.md` / `.mdx`-Datei unter `src/content/docs/`, analysiert sie in einen AST und teilt sie an den Grenzen von H2/H3 auf. Er erfordert:

- Ein Abschnitt pro H2-Kapitel (oder H3, wenn das H2 leer ist).
- ~200–800 Token pro Abschnitt (teilen Sie es auf, wenn es länger ist, zusammenführen Sie es, wenn es kürzer ist).
- Codeblöcke bleiben unverändert — teilen Sie sie niemals in der Mitte.
- Jeder Abschnitt trägt seinen Quellpfad, seine Anker-URL und den Sprachcode bei.

Das Skript befindet sich in `scripts/build-corpus.mjs` und ist vollständig konfigurierbar.

## Vorgeschlagene LoRA-Rezepte

Ein pragmatischer Ausgangspunkt für ein 8-Billionen-Parameter-Grundmodell auf einer einzelnen A100 / 4090:
```yaml
# axolotl.yaml
base_model: meta-llama/Llama-3.1-8B-Instruct
adapter: lora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_modules: [q_proj, k_proj, v_proj, o_proj]

datasets:
  - path: docs/dist/corpus/chat.jsonl
    type: sharegpt

sequence_len: 4096
sample_packing: true
gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 3
optimizer: adamw_bnb_8bit
learning_rate: 0.0002
warmup_ratio: 0.05
bf16: true
```
Trainen Sie dann die LoRA-Gewichte zusammen und stellen Sie sie über Ollama, vLLM oder text-generation-inference bereit. Ändern Sie den `MODEL`-Eintrag des Orakels auf Ihren lokalen Endpunkt, und Sie haben eine vollständig Nibiru-native Chat-Benutzererfahrung.

## Erneut ausführen bei jeder Dokumentenänderung

Verbinden Sie es in Ihre CI ein:
```yaml
- name: Build corpus
  run: cd docs && npm run build:corpus
- name: Upload corpus artifact
  uses: actions/upload-artifact@v4
  with:
    name: nibiru-corpus
    path: docs/dist/corpus/
```
Wenn die Dokumentationen sich ändern, wird das Korpus neu erstellt; Consumer (Trainingspipelines, RAG-Indizes) haben immer die neuesten Daten.

## Sprachen

Der Korpus beachtet die Lokalisation. Seiten unter `en/` sind mit `language: en` markiert, deutsche Seiten mit `language: de` und so weiter. Trainieren Sie monolinguale oder mehrsprachige LoRAs, indem Sie das JSONL nach dem Feld `language` filtern.

## Lizenz

Die Dokumentation ist unter der gleichen BSD-4-Klausel lizenziert wie das Framework selbst. Der exportierte Korpus erbt diese Lizenz – Sie sind freigestellt, Modelle auf ihm für den kommerziellen Gebrauch zu feinabzustimmen, wobei eine Zitierung erforderlich ist.
