コンテンツにスキップ
Nibiru docsv0.9.2

Nibiru-coderのトレーニング

ニビル風のチャットモデルを独自のオラマに登録する方法。一つのModelfile、一つのシェルスクリプト、60秒。

Stable Reading time ~ 1 min Edit on GitHub

フレームワークのデフォルトチャットモデルは nibiru-coder:1.0 — これは、あなたのOllamaサーバーに登録するNibiru風Qwen 2.5 Coder 14Bです。トレーニングパイプラインは application/module/ai/training/ にあります。

nibiru-coderとは何なのか(そして何ではないのか)

Section titled “nibiru-coderとは何なのか(そして何ではないのか)”

nibiru-coder:1.0LoRA ファインチューンではありません。これは同じ qwen2.5-coder:14b の重みが、システムプロンプトで包まれたものです。

  • MMVC、モジュール、ディスパッチャー、シングルトンについて説明します。
  • Nibiruの規約(pageActionnavigationActionView::assignForm::createPageination のスペリング)を強制します。
  • モデルを一般的な Laravel / Symfony のアドバイスではなく、Nibiru 風の答えに向けます。

システムプロンプトのカスタマイズは즉座に完了します — GPUトレーニングやデータセット準備が不要です。これは実際のLoRAの約80%の価値をゼロコストで提供します。実際のファインチューンの予算がある場合は、以下の実際のLoRAパスをご覧ください。

Terminal window
./application/module/ai/training/build.sh # builds nibiru-coder:1.0
./application/module/ai/training/build.sh 1.1 # bump tag for iterations

スクリプト:

  1. 同じディレクトリにある Modelfile を読みます。
  2. ${OLLAMA_BASE_URL}/api/create(デフォルトは https://your-ollama-host.example)に POST します。
  3. 新しいタグが応答することを確認するために、スモークテストのチャットコールを実行します。

成功した後、application/module/ai/settings/ai.ini にモデルを設定します。

[AI]
chat.model = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"

…そしてアプリケーション内のすべての\Nibiru\Module\Ai\Aiインスタンスがそれに接続しています。フォールバックは、タグをまだ構築していない場合に何も壊れないようにします。

システムプロンプトを改善する

Section titled “システムプロンプトを改善する”

The Modelfile’s SYSTEM """ ... """ block is the lever. Tighten the conventions, add new examples, add citations to specific framework files. Re-run build.sh with a new tag (1.1, 1.2, …) and A/B against the previous tag in your app.

Terminal window
./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.php

Nibiruを知るモデルが必要な場合、システムプロンプトだけでなくその重みも考慮するには、コーパスエクスポーターが対応しています。

Terminal window
cd docs
npm run build:corpus

dist/corpus/ ディレクトリ下に JSONL ファイルを出力します。

ファイル形式使用
chat.jsonlsharegpt スタイルのメッセージAxolotl, LLaMA-Factory, Unsloth
instructions.jsonl指令/入力/出力Alpaca スタイルのトレーナー
completion.jsonlプロンプト/完了伝統的なテキストコンプリーション微調整
chunks.jsonlチャンクメタデータRAG / 評価セット構築

シングルのA100または4090を使用した8Bベースの実用的なレシピ:

axolotl.yml
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

トレーニング後:

  1. LoRA を GGUF(llama.cppconvert_hf_to_gguf.py)に変換します。
  2. FROM ./your-lora.gguf で Ollama Modelfile を構築します。
  3. ./build.sh 2.0 はそれを nibiru-coder:2.0 として登録します。

フレームワークのコードは変更されません — ai.inichat.model を切り替えるだけで新しい重みを使用できます。

Terminal window
php application/module/ai/training/smoke-test.php

検証します:

  • Ollamaサーバーにアクセスできます。
  • モデルが1ターンの質問に応答します。
  • 複数ターンの会話コンテキストが機能しています。
  • エンベディングが機能しています(nomic-embed-text がプルされていない場合は明確なメッセージでスキップされます)。

変更後、デプロイする前に実行します。

  • Modelfile システムプロンプトが長すぎます。 一部の Ollama バージョンではシステムプロンプトに上限があります。約3000トークン未満で保つようにしてください。
  • FROM モデルを取得していない場合。 qwen2.5-coder:14b はすでにサーバー上にある必要があります。curl ${OLLAMA_BASE_URL}/api/tags を実行して確認してください。
  • タグの衝突。 build.sh 1.0 を再度実行すると既存の nibiru-coder:1.0 が上書きされます。反復のために新しいタグを使用し、ai.ini で特定のタグを固定してください。
  • --no-stream の混乱。 ビルドスクリプトは stream: false を使用しているため、レスポンスは1つの JSON として返ります。ストリーミングに変更する場合は、行ごとに解析してください。