Ollama Pi(コーディングエージェント)をローカルLLMで試す|Qwen3.5 9b の限界

March 31, 2026

ollama から pi をローンチしたよ! というメールが届きました。

pi と書いてあるので、Raspberry pi で動くようにチューニングした Version の ollama でもリリースしたのかな?と思ったのですが、全く違いました。

pi という名前の、coding agent システムでした。

特徴をAIに解説してもらいました。

PiはMario Zechnerが開発したTypeScriptベースのツールキットで、OpenClawエージェントエコシステムの基盤になっています。プラグイン拡張システムを内蔵しており、Pi自身に拡張機能を書かせることもできます。

Claude code, Codex CLI, Gemini CLI と並ぶものです。

https://pi.dev

今回は、pi の動作確認と、local ollama による Qwen 3.5 9b でどこまでできるのかをテストしてみたいと思います。

出力トークンの上限を上げたmodel を登録する

qwen3.5:9b の出力上限を上げたバージョンを作る

cat > ~/Modelfile-qwen35-long <<'EOF'
FROM qwen3.5:9b
PARAMETER num_predict 16384
EOF

ollama create qwen3.5:9b-long -f ~/Modelfile-qwen35-long

モデルを登録する

OpenRouter の API key を export OPENROUTER_API_KEY=sk-... と、環境変数で設定するとともに、~/.pi/agent/models.json を作成し、ローカルの ollama を使用するように設定する。

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        {
          "id": "qwen3.5:9b-long",
          "name": "Qwen 3.5 9B Long (Local)",
          "reasoning": false,
          "input": ["text"],
          "contextWindow": 32768,
          "maxTokens": 16384,
          "compat": {
            "supportsDeveloperRole": false,
            "supportsReasoningEffort": false
          }
        }
      ]
    }
  }
}

pi 起動

$ pi

 pi v0.64.0                                                                                                                                                  
 escape to interrupt                                                                                                                                         
 ctrl+c to clear                                                                                                                                             
 ctrl+c twice to exit                                                                                                                                        
 ctrl+d to exit (empty)                                                                                                                                      
 ctrl+z to suspend                                                                                                                                           
 ctrl+k to delete to end                                                                                                                                     
 shift+tab to cycle thinking level                                                                                                                           
 ctrl+p/shift+ctrl+p to cycle models                                                                                                                         
 ctrl+l to select model                                                                                                                                      
 ctrl+o to expand tools                                                                                                                                      
 ctrl+t to expand thinking                                                                                                                                   
 ctrl+g for external editor                                                                                                                                  
 / for commands                                                                                                                                              
 ! to run bash                                                                                                                                               
 !! to run bash (no context)                                                                                                                                 
 alt+enter to queue follow-up                                                                                                                                
 alt+up to edit all queued messages                                                                                                                          
 ctrl+v to paste image                                                                                                                                       
 drop files to attach                                                                                                                                        
                                                                                                                                                             
 Pi can explain its own features and look up its docs. Ask it how to use or extend Pi.                                                                       


                                                                                                                                                             
 おはよう                                                                                                                                                    
                                                                                                                                                             

 The user greeted me in Japanese saying "おはよう" (Ohayou - Good morning). I should respond in a friendly manner. Since they're using Japanese, I'll        
 respond in Japanese as well.                                                                                                                                
 おはようございます!
 今日は何かお手伝いしましょうか?                                                                                                                             コードレビューやバグ修正、新しい機能の実装、あるいは単純に新規ファイル作成など、何でもお気軽にお申し付けください。                                          
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                                                                             
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
~/pi_tetris
↑1.5k ↓91 4.9%/33k (auto)                                                                                                            (ollama) qwen3.5:9b-long

一部文字化けしていたので、削除していますが、正常に動いています。

Claude code でもなく、Codex CLI でもなく、Gemini CLI でもない、
何か、軽量で、カスタマイズ可能な Vibecoding tool という実感が、たしかにあります。

models

Only showing models with configured API keys (see README for details)

→ google/gemini-3.1-flash-lite-preview [openrouter] ✓
qwen3.5:9b-long [ollama]
ai21/jamba-large-1.7 [openrouter]
alibaba/tongyi-deepresearch-30b-a3b [openrouter]
allenai/olmo-3.1-32b-instruct [openrouter]
amazon/nova-2-lite-v1 [openrouter]
amazon/nova-lite-v1 [openrouter]
amazon/nova-micro-v1 [openrouter]
amazon/nova-premier-v1 [openrouter]
amazon/nova-pro-v1 [openrouter]
(1/246)

Model Name: Google: Gemini 3.1 Flash Lite Preview

ということで、ollama と OpenRouter 一式が出てきます。

テトリス作成チャレンジ

qwen3.5:9b-long [ollama]

深く考えずに、生成を依頼してみました。
Local ollama の Qwen 3.5 9b です。

依頼内容
ブラウザで動作するシンプルなテトリスを作ってください。
Vanilla js で書き上げてください。
index.html, css/main.css, js/main.js の3ファイル構成
結果

index.html と css は生成に成功しましたが、どうしても js ファイルを書き出せませんでした。

考察

9b で js ファイルの生成に失敗した原因を、Claude に考察してもらいました。

9b で JS ファイルの生成に失敗した原因は、コード生成能力そのものというより、ツール呼び出しフォーマットを維持しながら長いコードを出力するマルチタスクの難しさにあると考えています。OpenRouter 版でも同様に失敗したことから、VRAM ではなくモデルサイズ自体の限界です。一方、35b-a3b(MoE)は推論時のアクティブパラメータこそ約 3B ですが、35B 分の知識容量を持つため、コーディングパターンとツール呼び出しの両方を安定して処理できたと思われます。

qwen/qwen3.5-9b [openrouter]

OpenRouter 版も試します。

メモリサイズが異なるので、うまくいくかもしれないと思いましたが、、、やはり、正常にファイルを生成できませんでした。

qwen/qwen3.5-35b-a3b [openrouter]

簡単に成功しました。

pi の自己拡張機能を試す

つづいて、自己機能拡張を試してみます。

pi の機能や特徴の調査にフォーカスしたいので、model は google/gemini-3.1-flash-lite-preview に差し替えました。

拡張機能を作らせる

/hello コマンドで挨拶する拡張機能を作ってください。
~/.pi/agent/extensions/hello.ts に保存してください。

と指示したところ、

 /hello コマンドで挨拶をする拡張機能を作成しました。以下のパスに保存されています。                                                                           
                                                                                                                                                             
 /home/kiyo/.pi/agent/extensions/hello.ts                                                                                                                    
                                                                                                                                                             
 もし既に pi が実行中であれば、/reload コマンドを実行して拡張機能を読み込んでください。その後、/hello または /hello [名前] で挨拶が表示されます。            

/hello コマンドで挨拶をする拡張機能を作成しました。以下のパスに保存されています。

ということなので、早速

/hello きよぽん

としたところ、、、

と、出ました。

手作り Vibecoding 環境という実感があります。

ローカル LLM で使う場合、9B クラスではエージェントタスクに限界がありますが、MoE の 35b-a3b 以上なら実用的に動きます。

自分好みのコーディングエージェントを組み立てたい人には、試す価値ありです。