Ir al contenido
Nibiru docsv0.9.2

Corpus de entrenamiento

Cómo se exportan los documentos como un conjunto de entrenamiento listo para LoRA y cómo regenerarlo.

Stable Reading time ~ 3 min Edit on GitHub

Cada página de esta documentación también es un punto de datos de entrenamiento. Nibiru incluye un script que extrae un corpus JSONL limpio adecuado para el ajuste fino de una modelo de peso abierto — Llama, Mistral, Qwen, Gemma — en conocimientos específicos de Nibiru.

Ventana de terminal
cd docs
npm run build:corpus

Eso escribe:

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)

Instrucciones de calentamiento amigables para LoRA:

{
"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`."
}

Cada entrada se genera a partir de una sección de documentos con una pregunta clara (derivada del título H2/H3) y el cuerpo de la sección como la respuesta.

Formato de OpenAI chat / Mensajes de Anthropic:

{
"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>`. …"}
]
}

Compatible con las ajustes de OpenAI, la API de Anthropic para evaluación y la mayoría de las herramientas LoRA que esperan entradas en formato de chat (plantilla sharegpt de Axolotl, Unsloth, LLaMA-Factory).

Fragmentos sin procesar para su uso como datos de recuperación RAG:

{
"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…"
}

Este es exactamente el archivo que usa internamente Oracle.

El constructor de corpus recorre cada archivo .md / .mdx bajo src/content/docs/, lo parsea en un AST y lo divide en bloques a los límites de H2/H3. Impone:

  • Un fragmento por sección H2 (o H3 si la H2 está vacía).
  • ~200–800 tokens por fragmento (dividir si es más largo, fusionar si es más corto).
  • Las barras de código se mantienen intactas — nunca dividir en medio de un bloque.
  • Cada fragmento lleva su ruta fuente, URL anclaje y código de idioma.

El script está en scripts/build-corpus.mjs y es completamente configurable.

Una línea base pragmática para un modelo base de 8 mil millones de parámetros en una sola A100 / 4090:

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

Entrena, luego fusiona los pesos de LoRA y sirve mediante Ollama, vLLM o text-generation-inference. Cambia el MODEL del Oracle para que apunte a tu punto final local y tendrás una experiencia de usuario de chat completamente nativa de Nibiru.

Vuelve a ejecutar en cada cambio de documento

Sección titulada «Vuelve a ejecutar en cada cambio de documento»

Conéctalo a tu CI:

- 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/

Cuando cambian las documentaciones, el corpus se reconstruye; los consumidores (canales de formación, índices RAG) siempre tienen los datos más recientes.

El corpus respeta la configuración regional. Las páginas bajo en/ están etiquetadas como language: en, las páginas alemanas como language: de, y así sucesivamente. Entrena LORAs monolingües o multilingües filtrando el JSONL en el campo language.

La documentación está licenciada bajo la misma BSD-4-Clause que el marco en sí mismo. El corpus exportado hereda esa licencia — tienes libertad para afinar modelos en él con fines comerciales, siempre y cuando se requiera atribución.