Formation nibiru-coder
Comment enregistrer un modèle de conversation à base de Nibiru sur votre propre Ollama. Un fichier Modelfile, un script shell, soixante secondes.
Le modèle de chat par défaut du framework est nibiru-coder:1.0 — un Qwen 2.5 Coder 14B à la saveur Nibiru que vous enregistrez sur votre serveur Ollama. Le pipeline d’entraînement se trouve dans application/module/ai/training/.
Ce que nibiru-coder est (et ce qu’il n’est pas)
Section intitulée « Ce que nibiru-coder est (et ce qu’il n’est pas) »nibiru-coder:1.0 n’est pas une fine-tuning LoRA. C’est les mêmes poids qwen2.5-coder:14b enveloppés avec un système de prédiction intégré qui :
- explique MMVC, les modules, le dispatcheur, les singletons,
- impose les conventions de Nibiru (
pageAction,navigationAction,View::assign,Form::create, l’orthographe dePageination), - pousse le modèle vers des réponses idiomatiques Nibiru au lieu d’advice générique Laravel / Symfony.
La personnalisation du système-prompt se fait instantanément — pas d’entraînement GPU, pas de préparation de jeu de données. Cela offre environ 80 % de la valeur d’un vrai LoRA à un coût d’entraînement nul. Lorsque vous avez un budget pour un entraînement réel, consultez le chemin du LoRA réel ci-dessous.
Construisez-le
Section intitulée « Construisez-le »./application/module/ai/training/build.sh # builds nibiru-coder:1.0./application/module/ai/training/build.sh 1.1 # bump tag for iterationsLe script :
- Lit le fichier Modelfile situé à côté de lui.
- Envoie une requête POST à
${OLLAMA_BASE_URL}/api/create(par défauthttps://your-ollama-host.example). - Exécute un test fumeur de conversation pour confirmer que le nouveau tag répond.
Après son succès, définissez le modèle dans application/module/ai/settings/ai.ini :
[AI]chat.model = "nibiru-coder:1.0"chat.fallback_model = "qwen2.5-coder:14b"…et chaque instance de \Nibiru\Module\Ai\Ai dans votre application communique avec elle. Le fallback assure que rien ne se casse si vous n’avez pas encore construit l’étiquette.
Itérer sur le système d’invite
Section intitulée « Itérer sur le système d’invite »Le bloc SYSTEM """ ... """ du Modelfile est la clé. Affinez les conventions, ajoutez de nouveaux exemples et citez des fichiers spécifiques du framework. Réexécutez build.sh avec un nouveau tag (1.1, 1.2, …) et effectuez une comparaison A/B par rapport au tag précédent dans votre application.
./application/module/ai/training/build.sh 1.1# Edit ai.ini → chat.model = "nibiru-coder:1.1"# Compare answers in the Oracle widget or via smoke-test.phpChemin réel LoRA
Section intitulée « Chemin réel LoRA »Lorsque vous souhaitez un modèle dont les poids connaissent Nibiru — et non seulement son système de prédiction — l’exportateur de corpus est là pour vous aider.
cd docsnpm run build:corpusGénère des fichiers JSONL dans dist/corpus/ :
| Fichier | Format | Utilisation |
|---|---|---|
chat.jsonl | messages de style sharegpt | Axolotl, LLaMA-Factory, Unsloth |
instructions.jsonl | instruction/input/output | formateurs de type Alpaca |
completion.jsonl | prompt/completion | fine-tunage legacy text-completion |
chunks.jsonl | métadonnées de blocs | RAG / construction de l’ensemble d’évaluation |
Une recette pragmatique pour une base de 8B sur un seul A100 / 4090 :
base_model: meta-llama/Llama-3.1-8B-Instructadapter: loralora_r: 16lora_alpha: 32lora_dropout: 0.05lora_target_modules: [q_proj, k_proj, v_proj, o_proj]
datasets: - path: docs/dist/corpus/chat.jsonl type: sharegpt
sequence_len: 4096sample_packing: truegradient_accumulation_steps: 4micro_batch_size: 2num_epochs: 3optimizer: adamw_bnb_8bitlearning_rate: 0.0002warmup_ratio: 0.05bf16: trueAprès l’entraînement :
- Convertissez le LoRA en GGUF (
llama.cpp’sconvert_hf_to_gguf.py). - Créez un fichier Modelfile Ollama avec
FROM ./your-lora.gguf. ./build.sh 2.0l’enregistre sous le nom denibiru-coder:2.0.
Le code du framework ne change pas — remplacez chat.model dans ai.ini et vous utilisez les nouveaux poids.
Test fumigatoire
Section intitulée « Test fumigatoire »php application/module/ai/training/smoke-test.phpVérifie :
- Le serveur Ollama est accessible.
- Le modèle répond à une demande d’un seul tour.
- Le contexte de conversation multi-tours fonctionne.
- Les embeddings fonctionnent (ignorés avec un message clair si
nomic-embed-textn’est pas tiré).
Exécutez après chaque modification du fichier Modelfile, avant le déploiement.
Trucaments courants
Section intitulée « Trucaments courants »- Le système de
Modelfilea un prompt trop long. Certaines versions d’Ollama limitent les prompts système. Gardez-le sous ~3000 tokens. - Oublier de tirer le modèle FROM. Le modèle
qwen2.5-coder:14bdoit déjà être sur le serveur. Utilisezcurl ${OLLAMA_BASE_URL}/api/tagspour vérifier. - Collisions de tags. Ré-exécuter
build.sh 1.0écrase l’existingnibiru-coder:1.0. Utilisez des nouveaux tags pour les itérations ; épinglez des tags spécifiques dansai.inipour la production. - Confusion concernant
--no-stream. Le script de construction utilisestream: false, donc la réponse revient sous forme d’un seul JSON. Si vous passez à un flux, analysez ligne par ligne.