はじめに
公式が以下でポストしていた Ollama v0.8 の新機能を試してみます。
ストリーミングとツールを組み合わせた出力を得られるようです。
過去に Ollama で試した内容
Ollama を使ったローカルLLM は、過去に以下の内容を試していたことがありました。
- M4 の Mac mini で ローカルLLM: Ollama で Gemma 3 を軽く試す(テキスト入力、画像も入力するマルチモーダル) - Qiita
- Mac mini で ローカルLLM: Ollama で「REST API」とライブラリ「ollama-js」を試す(モデルは Gemma 3) - Qiita
- Windows でローカルLLM: Ollama で Gemma 3 を軽く試す - Qiita
- 「node-red-contrib-ollama」を使って Node−RED で Ollama を使ったローカルLLM - Qiita
さっそく試す
それでは、さっそく試していきます。
今回試す内容
今回 Ollama v0.8 の新機能を試す際に使うのは、前にも使った「ollama - npm」です。
そして、公式ブログの以下に書かれているコードを少しだけ書きかえて使います。
●Streaming responses with tool calling · Ollama Blog
https://ollama.com/blog/streaming-tool
利用するモデル
今回はツールを使うので、それが利用可能なモデルを選びます(※ 以前は gemma3:12b-it-q8_0
を使いました)。適当に以下を選びました。
●qwen3:14b
https://ollama.com/library/qwen3:14b
動作テスト
とりあえず、モデルのダウンロードもかねて動作テストをやっておきます。
まずは以下を実行します。
ollama run qwen3:14b
その後、モデルのダウンロードが完了してから、「あなたは誰?」というプロンプトを入力してみました。その結果、以下のとおり回答を得られました。
Ollama の JavaScriptライブラリを使って新機能を試す
それでは Ollama の JavaScriptライブラリを使って v0.8 の新機能を試します。
パッケージのインストール
以下でパッケージをインストールします。
npm i ollama
用いるコードと実行結果
そして、用いるコードは以下の通りです。
import ollama from "ollama";
const addTool = {
type: "function",
function: {
name: "addTwoNumbers",
description: "Add two numbers together",
parameters: {
type: "object",
required: ["a", "b"],
properties: {
a: { type: "number", description: "The first number" },
b: { type: "number", description: "The second number" },
},
},
},
};
async function run(model) {
const messages = [
{ role: "user", content: "What is 2 plus 3?(日本語で答えて)" },
];
console.log("Question:", messages[0].content);
for await (const chunk of await ollama.chat({
model,
messages,
tools: [addTool],
stream: true,
})) {
if (chunk.message.tool_calls) {
for (const toolCall of chunk.message.tool_calls) {
console.log("Tool call:", toolCall);
}
} else {
process.stdout.write(chunk.message.content);
}
}
}
run("qwen3:14b").catch(console.error);
上記を実行すると、以下の内容が少しずつ表示されていきました。
最後の部分を見ると、ツールの呼び出しも行えているようです。