Open5

phi4 + Ollama、ローカルLLM に挑戦

knaka Tech-Blogknaka Tech-Blog

概要

  • ローカルLLM + phi4 + Ollama、 環境を構築するメモになります。
  • Ollamaは、windows版を使う例です。
  • PCは、 RAM 32GB (GPUなし)

[ 公開 2025/01/11 ]


構成

  • Ollama
  • phi4
  • ollama-ui (chrome機能拡張)

  • phi4 (14B)

https://ollama.com/library/phi4

  • 約 9.1 GB
  • ダウンロード時間 約18分ほど

  • 起動コマンド
ollama run phi4

  • ollama list
PS C:\Users\user1> ollama list
NAME           ID              SIZE      MODIFIED
phi4:latest    ac896e5b8b34    9.1 GB    12 hours ago

  • 試しプロンプト
>>> 日本語わかりますか?
はい、私は日本語を理解しています。何か質問がある場合や、お手伝いが必要なことがあれば、どうぞお気軽にお尋ねください!


web画面 (ollama-ui)


  • コード生成 試す
  • プロンプト:軽めの React 画面
コード生成して欲しいです。
TODOアプリ、
React , tailwindCSS 使用したいです。

・TODOの追加機能を、追加したい
  • 出力
もちろんです!以下はReactとTailwind CSSを使った簡単なTODOアプリケーションのコード例です。このサンプルでは、新しいTODOを追加する機能を実装しています。

準備
まず、ReactとTailwind CSSが導入された環境で作業します。以下のようにcreate-react-appとTailwind CSSをセットアップすることができます:

Create React App

npx create-react-app todo-app
cd todo-app
Tailwind CSS をインストール

npm install tailwindcss postcss autoprefixer
npx tailwindcss init -p
tailwind.config.js と styles.css の編集

tailwind.config.jsを以下のように設定します:

module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};
src/index.cssを以下のように書き換えます:

@tailwind base;
@tailwind components;
@tailwind utilities;
アプリケーションコード

以下は、TODO追加機能を含む基本的なReactコンポーネントの例です:

// src/App.js

import React, { useState } from 'react';
import './App.css';

function App() {
  const [tasks, setTasks] = useState([]);
  const [newTask, setNewTask] = useState('');

  const addTask = () => {
    if (newTask.trim()) {
      setTasks([...tasks, newTask]);
      setNewTask('');
    }
  };

  return (
    <div className="App bg-gray-100 min-h-screen flex items-center justify-center">
      <div className="w-full max-w-md p-8 bg-white rounded-lg shadow-xl">
        <h1 className="text-2xl font-bold mb-6 text-center">TODO List</h1>
        
        {/* Task input form */}
        <div className="mb-4 flex items-center">
          <input
            type="text"
            value={newTask}
            onChange={(e) => setNewTask(e.target.value)}
            placeholder="Add a new task..."
            className="flex-grow p-2 border rounded-l-md focus:outline-none"
          />
          <button 
            onClick={addTask} 
            className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r-md">
              Add
          </button>
        </div>

        {/* Task list */}
        <ul className="mb-6">
          {tasks.map((task, index) => (
            <li key={index} className="flex items-center mb-2">
              <span className="text-gray-700">{task}</span>
            </li>
          ))}
        </ul>

        {/* Footer */}
        <div className="text-center">
          <p className="text-xs text-gray-500">© 2023 TODO App</p>
        </div>
      </div>
    </div>
  );
}

export default App;
実行
すべての準備ができたら、以下のコマンドを使ってアプリケーションを開始します:

npm start
これによりブラウザが起動し、http://localhost:3000でTODOアプリケーションを確認できます。新しいTODOを追加するための入力欄と「Add」ボタンが表示されるはずです。

このコードには、基本的なTODO機能しか含まれていませんが、削除機能や編集機能を追加することでさらに拡張可能です。


まとめ

  • そこそこ生成でも使えそうな。小型モデルのイメージでした。
  • 生成速度が遅い点は、ローカルPC増強も必要かと思いました。

knaka Tech-Blogknaka Tech-Blog

webUI の種類 nextjs-ollama-llm-ui

  • webUIの種類を探して、 nextjsのwebUI 検索できました。

参考


起動手順

  • 上記の、README の順で。画面起動できました。

  • git cloneします。

  • .env

mv .example.env .env
  • 接続先変更する場合 .env変更すれば良いかもです。
NEXT_PUBLIC_OLLAMA_URL="http://localhost:11434"
  • install
npm install
  • start dev
npm run dev

  • モデルは、phi4:latest を選択しました。
  • 試しに、プロンプト入力しました。問題なく出力されました。


knaka Tech-Blogknaka Tech-Blog

ollama + phi4 , UI画面作成 electron

  • electron + Reactの UI画面作成 試作メモになります
  • 前の、ollama + phi4 ローカルLLM環境に対応、生成AI 出力目的
  • 出力 実行ファイルは、windows版でテストしました。
  • ollamaは、モデルphi4 を起動しておきます。

構成

  • electron
  • React
  • tailwindcss
  • ollama (JS ライブラリ)

参考


書いたコード


ストリーミング通信

  • .chat で、通信可能
import ollama from 'ollama'

const response = await ollama.chat({
  model: 'llama2',
  messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(response.message.content)

  • stream: true
  • ストリーミング、通信開始後に先頭から一部分データ配信イメージでした。
import ollama from 'ollama'

const message = { role: 'user', content: 'Why is the sky blue?' }
const response = await ollama.chat({ model: 'llama3.1', messages: [message], stream: true })
for await (const part of response) {
  process.stdout.write(part.message.content)
}

見た目

  • 受信テキストの、electron 画面表示
  • ダウンロードは、MD形式でファイル出力できました。


GIF 動画

https://x.com/k_nakashima/status/1880208848008671340

  • 出力速度は遅めです、高性能なPCでないです。

  • コード生成に挑戦、とりあえず出力できました。


knaka Tech-Blogknaka Tech-Blog

ollama + llama3.1:8b , 生成メモ

  • ollama + llama3.1:8b ローカルLLM環境 試すメモです。
  • 出力 実行ファイルは、windows版でテストしました。
  • 前の UI画面 electron版を使用

書いたコード


構成

  • electron
  • React
  • tailwindcss
  • ollama (JS ライブラリ)

参考


  • ollama list
D:\>ollama list
NAME                    ID              SIZE      MODIFIED
llama3.1:8b             46e0c10c039e    4.9 GB    38 seconds ago
qwen2.5-coder:latest    2b0496514337    4.7 GB    3 hours ago
qwen2.5-coder:7b        2b0496514337    4.7 GB    3 hours ago
llama3.2:latest         a80c4f17acd5    2.0 GB    4 hours ago
phi4-cline:latest       eacbc14d4070    9.1 GB    4 days ago
phi4:latest    

GIF動画

https://x.com/k_nakashima/status/1880505065494180167


まとめ

  • 前の、phi4 14bより。速度は改善しました。
  • ローカルPC(CPU)で、大きいモデルで 14b以上は負荷的に厳しいようで
  • 今回の、llama3.1:8b や llama3.2 ですと。快適にできそうでした。

knaka Tech-Blogknaka Tech-Blog

deepseek-r1:14b + Ollama ローカルLLM , 生成メモ

  • deepseek-r1:14b + Ollama ローカルLLM環境 試すメモです。
  • UI画面は、 前の electron版を使用

関連


参考


  • run
ollama run deepseek-r1:14b

  • 7b
* ollama run deepseek-r1:7b

  • 今回は、14b (9 GB) 以下、テストしました。


  • ollama list
D:\>ollama list
NAME                     ID              SIZE      MODIFIED
deepseek-r1:14b          ea35dfe18182    9.0 GB    3 hours ago
deepseek-r1:7b           0a8c26691023    4.7 GB    4 hours ago
deepseek-coder-v2:16b    63fb193b3a9b    8.9 GB    10 hours ago
llama3.1:8b              46e0c10c039e    4.9 GB    3 days ago
llama3.2:latest          a80c4f17acd5    2.0 GB    3 days ago
phi4-cline:latest        eacbc14d4070    9.1 GB    7 days ago
phi4:latest              ac896e5b8b34    9.1 GB    9 days ago   

GIF動画

  • コード生成テスト、軽めのReact 画面
  • 速くはないです。。長文の出力は、5分以上になりそうでした。
  • model deepseek-r1:14b を選択しました。