4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPTのOSS版が出た!ということでgpt-ossをNode.jsから触る

Posted at

GPTのOSS版が出ましたね〜

OpenAIさんはモデルをオープンにしないイメージでしたけどまた流れが変わりそう

gpt-oss

GPTのOSS版って感じです。

GPT2以来のオープンウェイト言語モデルらしいです。GPT2の時代知らなかったけどオープンだったんですね。

OpenAIは新しいオープンウェイト言語モデル「gpt-oss-120b」と「gpt-oss-20b」を発表しました。
これらはApache 2.0ライセンスで公開され、既存のオープンモデルより高性能・高効率で、推論やツール利用など実用的な機能も強化されています。
gpt-oss-120bは80GBのGPUで動作し、OpenAIの有料モデルに匹敵する性能を持ちます。gpt-oss-20bは16GBで動作し、エッジデバイス向きです。
安全性にも配慮され、広範な用途で無料・自由に利用やカスタマイズが可能です。
Hugging Faceなど主要なプラットフォームで配布され、個人から企業まで幅広い利用が想定されています。

さすがの@youtoyさん早い。

プレイグラウンドで触ると結構爆速です。

npakaさんのまとめも爆速

120bと20bが出てますね

Ollamaで試す

Ollamaだとすぐ試せます。

CleanShot 2025-08-06 at 16.21.29.png

20bだと13GBくらいの容量で120bだと61GBくらいです。快適に動くかは別としてノートパソコンにも入れられる。

CLIだとollama runでいけます。

$ ollama run gpt-oss

OllamaにNode.jsからアクセスして利用

OpenAIのSDKが互換APIは動くのでこんな感じで動かせます。

$ npm i openai

APIキーにnot-neededって書いてますが何かは入れないと怒られたので入れておきます。

import { OpenAI } from "openai";

const client = new OpenAI({
    baseURL: "http://localhost:11434/v1",
    apiKey: "not-needed"
});

const chatCompletion = await client.chat.completions.create({
    model: "gpt-oss:20b",
    messages: [
        {
            role: "user",
            content: "なぜ空は青いのですか?",
        },
    ],
});

console.log(chatCompletion.choices[0].message);

ただこれだと僕の環境だと反応なさすぎるので以下のコードに変えました。

import { OpenAI } from "openai";

const client = new OpenAI({
    baseURL: "http://localhost:11434/v1",
    apiKey: "not-needed",
});

const streamChat = async (question) => {
  console.log("🤔 考え中...\n");
  
  const stream = await client.chat.completions.create({
    model: "gpt-oss:20b",
    messages: [
      { role: "user", content: question }
    ],
    stream: true,  // ストリーミング有効
    temperature: 0.7,
  });

  // リアルタイム出力
  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content;
    if (content) {
      process.stdout.write(content);  // 改行なしで追加
    }
  }
  
  console.log('\n\n✅ 完了!');
};

// 使用例
streamChat("プロトアウトスタジオについて詳しく教えて");
$ node app.mjs

ゆったり

CleanShot 2025-08-06 at 16.52.18.gif

Hugging FaceのAPIでNode.jsから触る

ローカルだと僕のマシンは全然使い物にならん感じだったので、Hugging FaceのAPIで利用しようと思います。

OllamaもHugging FaceのAPIを使うことでNode.jsから触ってみたいと思います。

CleanShot 2025-08-06 at 16.23.58.png

Inference Providersというルーター役割をしてくれるAPIエンドポイントが使えます。

CleanShot 2025-08-06 at 16.37.53.png

import { OpenAI } from "openai";

const client = new OpenAI({
	baseURL: "https://router.huggingface.co/v1",
	apiKey: `Hugging FaceのAPIキー`,
});

const chatCompletion = await client.chat.completions.create({
	model: "openai/gpt-oss-120b:novita",
    messages: [
        {
            role: "user",
            content: "なぜ空は青いの?",
        },
    ],
});

console.log(chatCompletion.choices[0].message);

ローカル実行だとマシンスペック的に遅くなってしまうけどこのやり方だと早いですね。

CleanShot 2025-08-06 at 16.40.58.gif

まとめ

さっくり触ってみました。

頭の良さはo4-miniやo3-miniくらい。これがローカルで動くのはすごいですね。

チューニングとかもしやすそうなので色々試してみたいと思います。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?