Qwen 3 ローカルLLMを動かす方法|実行と検証のチュートリアル

Blog

中国Alibabaは2025年4月29日、開発するオープンな言語モデルQwen 3を公開しました。

Ollama

Ollamaを利用するので、PCにインストールします

以下サイトから利用しているOSを選択してダウンロードしてください

Download Ollama on macOS
Download Ollama for macOS

Macの場合

Macの場合、zipをダウンロードしたら解凍して、「Ollama」をアプリケーションフォルダに移動してください

Qwen3

今回はモデルサイズ8bとしますが、Qwenでは、

  • 0.6b
  • 1.7b
  • 4b
  • 8b
  • 14b
  • 30b
  • 32b
  • 235b

があり、パソコンのスペックによって動作しない可能性があるので最適なものを選択してください

通常であればモデルサイズが大きいほど回答の精度はよくなるはずです

以下のコマンドをコマンドプロンプトやターミナルに貼り付けて実行してください。

ollama run qwen3:8b

Macだとこんな感じになります

実行すると以下のようになると思います。「success」が表示されれば成功です。

「>>>」にプロンプトを入れます

例えば、以下のように入力を与えると

このように回答してくれます

Qwen3の性能テスト(8b)

質問1


GolangでDuckDBにユーザとパスワードを格納するプログラムを作成してください

回答1

以下は、Go言語でDuckDBにユーザとパスワードを格納するためのプログラムの例です。このコードは、DuckDBのテーブルにユーザー情報を挿入する処理を実装しています。

---

### 💡 必要な準備
1. **DuckDBのインストール**:  
   DuckDBのCライブラリをインストールする必要があります。  
   - Linux: `sudo apt install duckdb`
   - macOS: `brew install duckdb`
   - Windows: [公式ダウンロードページ](https://duckdb.org/docs/installation)からインストール

2. **Goモジュールのインストール**:  
   ```bash
   go get github.com/duckdb/duckdb
   ```

---

### ✅ ソースコード

```go
package main

import (
    "fmt"
    "github.com/duckdb/duckdb"
)

func main() {
    // DuckDBに接続(ファイルベースで保存)
    conn, err := duckdb.Open("users.db")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // テーブルが存在しない場合にのみ作成
    _, err = conn.Exec("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT);")
    if err != nil {
        panic(err)
    }

    // ユーザー情報を挿入
    rowsAffected, err := conn.Exec("INSERT INTO users (username, password) VALUES (?, ?);", "testuser", "testpass")
    if err != nil {
        panic(err)
    }

    fmt.Printf("ユーザー情報を %d 行挿入しました。\n", rowsAffected)
}
```

---

### 📁 実行方法

1. 上記のコードを `main.go` として保存します。
2. コマンドラインで以下を実行します:
   ```bash
   go run main.go
   ```

---

### 📌 注意点

- **データ永続化**:  
  ファイル `users.db` が生成され、DuckDBのデータが保存されます。  
  プログラムを終了してもデータが保持されます。

- **セキュリティ**:  
  パスワードを明文で保存するのはセキュリティ上危険です。  
  実際の運用では、ハッシュ化(例: bcrypt)や暗号化を検討してください。

- **パラメータ化クエリ**:  
  `?` を使用することでSQLインジェクションのリスクを回避しています。

---

### 🧪 データ確認方法

DuckDB CLIでデータを確認するには、以下を実行します:

```bash
duckdb users.db
```

```sql
SELECT * FROM users;
```

---

このコードは、DuckDBにユーザ情報を保存する基本的な例です。必要に応じて、ユーザー入力やデータ検索などの機能を追加できます。

この状態だと、パスワードが平文のまま入ってしまうのでセキュアなコードではありません

質問2


パスワードが平文で入るのはセキュリティに問題があるので修正してください

回答2

以下は、パスワードを平文で保存しないように修正したGoコードです。このコードでは、`bcrypt` ライブラリを使用してパスワードをハッシュ化し、DuckDBに保存します。

---

### ✅ 必要な準備

1. **DuckDBのインストール**:  
   - Linux: `sudo apt install duckdb`
   - macOS: `brew install duckdb`
   - Windows: [公式ダウンロードページ](https://duckdb.org/docs/installation)

2. **Goモジュールのインストール**:
   ```bash
   go get github.com/duckdb/duckdb
   go get golang.org/x/crypto/bcrypt
   ```

---

### 📁 修正後のコード

```go
package main

import (
    "fmt"
    "github.com/duckdb/duckdb"
    "golang.org/x/crypto/bcrypt"
)

// パスワードをハッシュ化する関数
func hashPassword(password string) (string, error) {
    hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
    if err != nil {
        return "", err
    }
    return string(hashedPassword), nil
}

func main() {
    // DuckDBに接続(ファイルベースで保存)
    conn, err := duckdb.Open("users.db")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // テーブルが存在しない場合にのみ作成
    _, err = conn.Exec("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT);")
    if err != nil {
        panic(err)
    }

    // パスワードをハッシュ化
    hashedPassword, err := hashPassword("testpass")
    if err != nil {
        panic(err)
    }

    // ハッシュ化したパスワードを挿入
    rowsAffected, err := conn.Exec("INSERT INTO users (username, password) VALUES (?, ?);", "testuser", hashedPassword)
    if err != nil {
        panic(err)
    }

    fmt.Printf("ユーザー情報を %d 行挿入しました。\n", rows, rowsAffected)
}
```

---

### 🔐 セキュリティに関する説明

- **ハッシュ化の仕組み**:  
  `bcrypt` は、ランダムなソルトを含むハッシュ化アルゴリズムで、攻撃者がハッシュ値を逆算するのを困難にします。
  
- **コスト設定**:  
  `bcrypt.DefaultCost` はデフォルトの計算コストで、必要に応じて `bcrypt.SetCost()` で調整可能です。

- **パスワードの検証**:  
  保存したハッシュ値とユーザーが入力したパスワードを比較する際には、`bcrypt.CompareHashAndPassword()` を使用してください。

---

### 🧪 データ確認方法

1. DuckDB CLIでデータを確認するには:
   ```bash
   duckdb users.db
   ```
2. 以下のSQLでハッシュ値を表示:
   ```sql
   SELECT * FROM users;
   ```

---

### 📌 注意点

- **ハッシュ値の変更**:  
  一度ハッシュ化したパスワードは変更できません。ユーザーがパスワードを変更する必要がある場合、新しいハッシュ値を生成して更新する必要があります。

- **セキュリティベストプラクティス**:  
  - パスワードは常にハッシュ化して保存すること。
  - ハッシュ化アルゴリズムは `bcrypt` や `Argon2` など、現代の強力なアルゴリズムを使用すること。
  - パスワードを明文で保存しないこと。

---

このコードで、DuckDBに安全にユーザー情報を保存できるようになります。必要に応じて、ユーザー入力や認証処理の追加も可能です。

ハッシュ化してくださいとは具体的に明示していないですが、ちゃんとハッシュ化するプログラムが出てきたのでかなり理解していると思います

qwen3/model
Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixt...

コメント

タイトルとURLをコピーしました