Ollamaのmodelfileの詳細メモ

# はじめに
Ollamaのモデルファイルの仕様について日本語でまとめました（というより翻訳してみた）。以下のページが情報元になります。gpt-4oを使ってます。ちょっと日本語修正しました。

https://github.com/ollama/ollama/blob/main/docs/modelfile.md

# Ollama モデルファイル

> 注意: `Modelfile` の構文は開発中で、今後変更する可能性があります。

モデルファイルは、Ollamaでモデルを作成・共有するため設定ファイル（ブループリント）です。

## フォーマット
`Modelfile` のフォーマットは以下の通りです:

```plaintext
# コメント
INSTRUCTION 引数
```

### 指示(INSTRUCTION)の説明
| 指示(INSTRUCTION)       | 説明                                                   |
|------------|--------------------------------------------------------|
| FROM (必須) | 使用するベースモデルを定義                               |
| PARAMETER  | モデルの実行パラメータを設定                            |
| TEMPLATE   | モデルに送信する完全なプロンプトテンプレート             |
| SYSTEM     | テンプレートに設定されるシステムメッセージを指定         |
| ADAPTER    | モデルに適用するLoRAアダプターを定義                    |
| LICENSE    | ライセンスを指定                                    |
| MESSAGE    | メッセージ履歴を指定                                    |

## 例

### 基本的な `Modelfile`
```plaintext
FROM llama3
# 創造性を高めるためtemperatureを1に設定
PARAMETER temperature 1
# コンテキストウィンドウサイズ（保持する文脈サイズ）を4096に設定
PARAMETER num_ctx 4096
# システムメッセージを設定
SYSTEM You are Mario from super mario bros, acting as an assistant.
```

使用方法:
1. ファイルに保存 (例: `Modelfile`)
2. `ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>`
3. `ollama run choose-a-model-name`
4. モデルをOllamaで実行

## 指示

### FROM (必須)
ベースモデルを定義します:
```plaintext
FROM <model name>:<tag>
```

### PARAMETER
モデル実行時に設定するパラメータを定義します:
```plaintext
PARAMETER <parameter> <parametervalue>
```

有効なパラメータと値の例:
| パラメータ       | 説明                                                                                                           | 値のタイプ | 使用例                     |
|------------------|----------------------------------------------------------------------------------------------------------------|------------|----------------------------|
| mirostat         | 周期性を制御するためのMirostatサンプリングを有効にする (デフォルト: 0, 0 = 無効, 1 = Mirostat, 2 = Mirostat 2.0) | int        | mirostat 0                 |
| mirostat_eta     | 生成されたテキストからのフィードバックに対するアルゴリズムの反応速度を制御 (デフォルト: 0.1)                      | float      | mirostat_eta 0.1           |
| mirostat_tau     | 出力の一貫性と多様性のバランスを制御 (デフォルト: 5.0)                                                           | float      | mirostat_tau 5.0           |
| num_ctx          | 次のトークンを生成するために使用するコンテキストウィンドウのサイズを設定 (デフォルト: 2048)                      | int        | num_ctx 4096               |
| repeat_last_n    | 繰り返しを防ぐためにモデルが戻る長さを設定 (デフォルト: 64, 0 = 無効, -1 = num_ctx)                             | int        | repeat_last_n 64           |
| repeat_penalty   | 繰り返しに対するペナルティの強さを設定 (デフォルト: 1.1)                                                       | float      | repeat_penalty 1.1         |
| temperature      | モデルの温度を設定 (デフォルト: 0.8)                                                                           | float      | temperature 0.7            |
| seed             | 生成に使用する乱数シードを設定 (デフォルト: 0)                                                                 | int        | seed 42                    |
| stop             | 停止シーケンスを設定 (複数の停止パターンを指定可能)                                                           | string     | stop "AI assistant:"       |
| tfs_z            | 出力から確率の低いトークンの影響を減らすためにテイルフリーサンプリングを使用 (デフォルト: 1)                    | float      | tfs_z 1                    |
| num_predict      | テキスト生成時の最大トークン数を設定 (デフォルト: 128, -1 = 無限生成, -2 = コンテキストを満たす)                | int        | num_predict 42             |
| top_k            | ナンセンスな生成を防ぐために使用 (デフォルト: 40)                                                              | int        | top_k 40                   |
| top_p            | top-kと連携して動作 (デフォルト: 0.9)                                                                          | float      | top_p 0.9                  |

### TEMPLATE
モデルに渡すプロンプトテンプレートを定義します。システムメッセージ、ユーザーメッセージ、モデルからの応答が含まれます。テンプレートはGoテンプレート構文を使用します。

テンプレート変数:
| 変数          | 説明                                       |
|---------------|--------------------------------------------|
| `{{ .System }}` | カスタム動作を指定するためのシステムメッセージ |
| `{{ .Prompt }}` | ユーザーのプロンプトメッセージ               |
| `{{ .Response }}`| モデルからの応答                          |

### SYSTEM
テンプレートで使用されるシステムメッセージを指定します:
```plaintext
SYSTEM """<system message>"""
```

### ADAPTER
LoRAアダプターを指定します:
```plaintext
ADAPTER ./ollama-lora.bin
```

### LICENSE
法的ライセンスを指定します:
```plaintext
LICENSE """
<license text>
"""
```

### MESSAGE
メッセージ履歴を指定します:
```plaintext
MESSAGE <role> <message>
```

有効な役割:
| 役割        | 説明                                  |
|-------------|---------------------------------------|
| system      | モデルに対するシステムメッセージ       |
| user        | ユーザーが尋ねたメッセージの例         |
| assistant   | モデルが応答する例                     |

### 例:
```plaintext
MESSAGE user Is Toronto in Canada?
MESSAGE assistant yes
MESSAGE user Is Sacramento in Canada?
MESSAGE assistant no
MESSAGE user Is Ontario in Canada?
MESSAGE assistant yes
```

## 注意事項
- `Modelfile` は大文字小文字を区別しません
- 指示の順序は自由です