Nibiru-coderのトレーニング
ニビル風のチャットモデルを独自のオラマに登録する方法。一つのModelfile、一つのシェルスクリプト、60秒。
フレームワークのデフォルトチャットモデルは nibiru-coder:1.0 — これは、あなたのOllamaサーバーに登録するNibiru風Qwen 2.5 Coder 14Bです。トレーニングパイプラインは application/module/ai/training/ にあります。
nibiru-coderとは何なのか(そして何ではないのか)
Section titled “nibiru-coderとは何なのか(そして何ではないのか)”nibiru-coder:1.0 は LoRA ファインチューンではありません。これは同じ qwen2.5-coder:14b の重みが、システムプロンプトで包まれたものです。
- MMVC、モジュール、ディスパッチャー、シングルトンについて説明します。
- Nibiruの規約(
pageAction、navigationAction、View::assign、Form::create、Pageinationのスペリング)を強制します。 - モデルを一般的な Laravel / Symfony のアドバイスではなく、Nibiru 風の答えに向けます。
システムプロンプトのカスタマイズは즉座に完了します — GPUトレーニングやデータセット準備が不要です。これは実際のLoRAの約80%の価値をゼロコストで提供します。実際のファインチューンの予算がある場合は、以下の実際のLoRAパスをご覧ください。
./application/module/ai/training/build.sh # builds nibiru-coder:1.0./application/module/ai/training/build.sh 1.1 # bump tag for iterationsスクリプト:
- 同じディレクトリにある Modelfile を読みます。
${OLLAMA_BASE_URL}/api/create(デフォルトはhttps://your-ollama-host.example)に POST します。- 新しいタグが応答することを確認するために、スモークテストのチャットコールを実行します。
成功した後、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.
./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実際の LoRA パス
Section titled “実際の LoRA パス”Nibiruを知るモデルが必要な場合、システムプロンプトだけでなくその重みも考慮するには、コーパスエクスポーターが対応しています。
cd docsnpm run build:corpusdist/corpus/ ディレクトリ下に JSONL ファイルを出力します。
| ファイル | 形式 | 使用 |
|---|---|---|
chat.jsonl | sharegpt スタイルのメッセージ | Axolotl, LLaMA-Factory, Unsloth |
instructions.jsonl | 指令/入力/出力 | Alpaca スタイルのトレーナー |
completion.jsonl | プロンプト/完了 | 伝統的なテキストコンプリーション微調整 |
chunks.jsonl | チャンクメタデータ | RAG / 評価セット構築 |
シングルのA100または4090を使用した8Bベースの実用的なレシピ:
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: trueトレーニング後:
- LoRA を GGUF(
llama.cppのconvert_hf_to_gguf.py)に変換します。 FROM ./your-lora.ggufで Ollama Modelfile を構築します。./build.sh 2.0はそれをnibiru-coder:2.0として登録します。
フレームワークのコードは変更されません — ai.ini の chat.model を切り替えるだけで新しい重みを使用できます。
スモークテスト
Section titled “スモークテスト”php application/module/ai/training/smoke-test.php検証します:
- Ollamaサーバーにアクセスできます。
- モデルが1ターンの質問に応答します。
- 複数ターンの会話コンテキストが機能しています。
- エンベディングが機能しています(
nomic-embed-textがプルされていない場合は明確なメッセージでスキップされます)。
変更後、デプロイする前に実行します。
一般的な落とし穴
Section titled “一般的な落とし穴”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 として返ります。ストリーミングに変更する場合は、行ごとに解析してください。