
判断特化型AI Jev互換のOSSモデル「Kev」を M4 Mac の MLX で動かし、4B の判定精度を試してみた
はじめに
「Kev」は、判断特化型 AI の Jev 互換の API を備えた OSS モデルで、M1 以降の Apple Silicon Mac で使える MLX をサポートしています。
前回は M1 の Mac で Docker / CPU で Kev を動かしました。Docker の Linux コンテナからは Mac の GPU を使えないため、MLX は使えず CPU 実行でした。ローエンドの 0.8B しか実用的な速度では動かすことができず、判定精度を確認するには至りませんでした。
今回は Apple M4 Pro / macOS 27 の環境を用意して、4B モデルを MLX で試した結果を紹介します。
動かす環境を用意する
バージョン情報
- Mac mini(M4 Pro、メモリ 24GB)
- macOS 27.0
- uv 0.12.19
- Python 3.13.15
- mlx 0.32.2 / mlx-lm 0.31.3
- Kev
jaredpalmer/kev-4b(release_date: 2026-09-24)
導入
uv で Kev を導入して起動します。uv のバイナリ、Python、venv、Hugging Face のモデルキャッシュは、いずれもユーザー領域に配置します。
# uv を導入(未導入の場合)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Kev を clone し、依存 + MLX を venv へ
git clone --depth 1 https://github.com/jaredpalmer/kev.git
cd kev
uv sync --extra serve --python 3.13
# サーバ起動(初回のみ重みをダウンロード)
uv run python -m kev.serve --run jaredpalmer/kev-4b --port 8009
起動ログに次の行が出れば、Mac の GPU(mps)で MLX バックエンドが動いています。
serving jaredpalmer/kev-4b (...) on mps via mlx (bfloat16) 127.0.0.1:8009
GET /v1/models も 200 OK で、backend は mlx、device は mps、dtype は bfloat16 と返りました。
評価
モデル別のメモリ、応答時間
--run のモデル名を変えて 0.8B・4B・9B を起動し、サーバ起動後に同じ日本語リクエスト(前回記事と同じ、サポートチケットの担当部署・エスカレーション・怒りの度合いを聞くもの)を送ったときの初回と2回目の応答時間です。メモリは vmmap --summary で読んだ Physical footprint の実測値です。
| モデル | Physical footprint(peak) | 初回 | 2回目 |
|---|---|---|---|
| Kev-0.8B | 2.1G(3.1G) | 205.7ms | 45.0ms |
| Kev-4B | 8.6G(15.6G) | 1200.9ms | 262.1ms |
| Kev-9B | 17.4G(30.6G) | 30244.8ms | 483.0ms |
9B の Physical footprint 17.4G は、Kev README の「Kev-9B needs about 17 GB」と一致します。peak の 30.6G は 24GB の Mac の搭載メモリを超えており、初回だけ 30244.8ms かかった理由と考えられます。0.8B と 4B は footprint・peak とも 24GB に収まり、初回も 1.2 秒以内でした。
choice API を試した
Kev の choice API は、候補から1つを選ぶ API です。
選択対象は AI-DLC(awslabs/aidlc-workflows v2.10.0)の scope です。scope は、仕事の種類ごとにどのステージを実行するかを決める区分で、bugfix、feature、enterprise など11個あります。AI-DLC 本体は /aidlc <自由文> の依頼からキーワードで scope を自動判定しますが、これを Kev に意味で選ばせたら、依頼文から適切な scope 名を選べるのか。これが今回の問いです。
Kiro Crew 0.7 に追加された Auto (Jev) モードは、多数のスキルからメッセージの意味を解釈して1つを選びます。「依頼文から候補を1つ選ぶ」という問題の形が同じなので、これができれば Auto (Jev) の Jev によるスキル選択の精度も期待できると考えました。
リクエストと応答
choice API は /v1/systemone に type: choice の question を1つ含めて送ります。11個の scope に「該当なし(none)」を加えた12択を criteria に並べ、依頼文を state に入れます。scope の1件分は次のようになります。
curl -s http://127.0.0.1:8009/v1/systemone -H "content-type: application/json" -d "$(cat scope-request.json)"
{
"state": "The login page returns a 500 error for users whose email contains an apostrophe. Fix it.",
"model": "kev-latest",
"questions": {
"scope": {
"type": "choice",
"instructions": "Which AI-DLC scope should handle this request?",
"criteria": {
"aidlc-bugfix": "Fix a specific bug",
"aidlc-classic": "V1-style ceremony through Inception and Construction - the implicit default",
"aidlc-enterprise": "Regulated enterprise feature, full audit trail",
"aidlc-express": "Lightest run: requirements to deploy, no design pass, no reviewers",
"aidlc-feature": "Full lifecycle for new features, practical depth",
"aidlc-infra": "Infrastructure changes",
"aidlc-mvp": "Skip operations, ship the core",
"aidlc-poc": "Prove feasibility fast",
"aidlc-refactor": "Clean up existing code",
"aidlc-security-patch": "CVE response",
"aidlc-workshop": "Facilitated group session with mandatory gates",
"none": "None of these apply to this request."
}
}
}
}
この依頼文に対して Kev-4B が選んだのは aidlc-bugfix でした。確率は 0.63 で、次点は none の 0.14、応答時間は 268.5ms です。筆者が付けた正解ラベルも aidlc-bugfix なので、この1件は正解です。
同じ形の依頼文を英語と日本語で用意し、正解ラベルは筆者が付けました。日本語にしたのは依頼文(state)だけで、criteria と instructions は英語のままです。criteria の説明文は、上記の短い版と、キーワードと本文冒頭1文を足した詳しい版の2種類を試しています。scope とは別に、AI-DLC の skill(knowledge、outcomes-pack、replay、session-cost の4個 + none の5択)も同じ手順で試しました。
依頼文は2組あります。
明確な依頼は、依頼文の言葉が正解 scope の説明文とほぼ一致しているものです。
- 「依存しているログライブラリに CVE-2026-1234 が出ています。対応してください。」→ 正解 aidlc-security-patch(説明文は "CVE response")
- 「PCI DSS の監査下で新しい決済手段を追加します。すべての判断に監査証跡が必要です。」→ 正解 aidlc-enterprise
天気を聞くなど scope に該当しない依頼も none の正解として混ぜています。scope 15件・skill 10件 × 2言語で50件です。
紛らわしい依頼は、別の scope の言葉を混ぜたものです。
- 「新しいロードバランサに移行して、そこで出ている 502 に対処してください。」→ 正解 aidlc-infra。「502 に対処」が aidlc-bugfix に寄る
- 「管理コンソールに多要素認証を追加します。SOC 2 の監査対象でサンプリングされます。」→ 正解 aidlc-enterprise。「追加します」が aidlc-feature に寄る
scope 8件・skill 2件 × 2言語で20件です。
結果
criteria 2版を合わせた誤り件数と、括弧内に正答率です。分母は明確な依頼が100回、紛らわしい依頼が40回です。
| モデル | 明確な依頼(/100) | 紛らわしい依頼(/40) |
|---|---|---|
| Kev-0.8B | 23(77%) | 20(50%) |
| Kev-4B | 0(100%) | 10(75%) |
| Kev-9B | 1(99%) | 12(70%) |
0.8B は 4B・9B に明らかに劣ります。明確な依頼で外した23回のうち、4B は23回とも、9B は22回を正解しています。0.8B の誤りは大半が none を選ぶ取りこぼしで、別の scope を誤って選んだのは明確な依頼では2回だけです。
4B と 9B に明確な差はありませんでした。紛らわしい依頼で 4B が外した10回のうち8回は 9B も外しており、そのうち6回は同じ誤答です。9B だけが外したのは多要素認証の依頼で、英語・日本語・criteria 2版の4回とも aidlc-feature を選んでいます。4B は4回とも正解でした。
4B・9B が共に外した依頼
依頼文にすると4種類です。同じ結果になった言語・criteria 版はまとめています。
| 依頼文 | 正解 | 4B | 9B | 0.8B |
|---|---|---|---|---|
| 決済モジュールを綺麗に書き直してください。ついでに項目を2つ追加します。(日本語・B版) | refactor | feature | feature | refactor |
| 新しいロードバランサに移行して、そこで出ている 502 に対処してください。(日本語・A/B版) | infra | none | none | bugfix |
| Tidy up the CI configuration and cut the build time while you are at it.(英語・A版) | refactor | infra | infra | infra |
| 記録のために、何をどういう理由で決めたのかを教えてください。(日本語・英語、A/B版) | replay(skill) | none / outcomes-pack | none / knowledge / outcomes-pack | none / outcomes-pack |
1件目は、筆者自身が refactor か feature か一意に決まらないと判断している依頼です。4件目は skill の replay と outcomes-pack の説明文が近く、人間でも迷います。モデルの誤りと言えるのは2件目と3件目で、どちらも別の言語や criteria 版では両モデルとも正解しています。
0.8B だけが外した依頼(4B・9B は正解、16種類)
| 依頼文 | 正解 | 0.8B |
|---|---|---|
| PCI DSS の監査下で新しい決済手段を追加します。すべての判断に監査証跡が必要です。(日本語・B版) | enterprise | feature |
| 要件からデプロイまで最短で通してください。設計パスもレビュアーも省略でいいです。(日本語・B版) | express | none |
| Prove whether on-device inference can stay under 200 ms. Feasibility only, throw the code away after.(英語・A版) | poc | none |
| Run a facilitated session with the whole team on Tuesday, with a mandatory gate at each step.(英語・B版) | workshop | none |
| Make things better.(英語・A版) | none | bugfix |
| チームドライブの PDF を、エージェントが引用できるように取り込んでください。(日本語・英語、A版) | knowledge | none |
| 社内の設計ドキュメントをカタログに登録して同期してください。(日本語・英語、A版) | knowledge | none |
| ワークフローが終わりました。チームが自分たちで運用できるよう引き継ぎ資料を作ってください。(日本語・A版) | outcomes-pack | none |
| 所有権をプラットフォームチームに移せるよう、クロージングの引き継ぎ文書を書いてください。(日本語・英語、A/B版) | outcomes-pack | none |
| この場にいなかった関係者向けに、今回のセッションで何が起きたかをまとめてください。(日本語・英語、A/B版) | replay | none |
| このワークフローの所要時間、走ったステージ数、センサーの発火数を教えてください。数字だけで。(日本語・A版) | session-cost | none |
| 現在のワークフローのコストビューを見せてください。(英語 A/B版、日本語 A版) | session-cost | none |
| ダッシュボードの初版を早く出します。監視はいったん省きます。(日本語・B版) | mvp | infra |
| 新入社員向けに、ワークフローを一緒に辿る研修日を開催します。(日本語・A版) | workshop | none |
| CI の設定を整理して、ついでにビルド時間を削ってください。(日本語 A/B版、英語 B版) | refactor | infra |
| 引き継ぎ用にこのワークフローをまとめてください。各ステージの所要時間も入れてください。(日本語・英語、A/B版) | outcomes-pack | none |
まとめ
M4 Pro / 24GB の Mac で、Kev-4B を MLX で利用できました。choice API で AI-DLC の scope を選ばせたところ、4B は 0.8B より明らかに良好で、9B にしても 4B との差はありませんでした。依頼文を日本語にしても 4B の誤り件数は英語と同じで、回答品質が大きく劣化することもありませんでした。
また、4B の応答時間は、M1 / Docker / CPU では 26〜93 秒でしたが、M4 Pro / MLX では初回 1.2 秒、2回目 0.26 秒と実用的な速度で利用できたため、推論時の入力データを外部 API に送信したくない場合、判断特化型 AI の実行環境として Kev + MLX は有力な選択肢になりそうです。
今後は、Kiro Crew 0.7 でサポートされた Auto (Jev)(プロンプトに応じて使うモデルやスキルを Jev が判定して動くモード)での評価や、本家の Jev、CLM などとの違いも評価してみたいと思います。







