どんな人向けの記事?
- ローカルLLMでAIエージェントを作りたい方
背景
前回の記事では、Mastra + Ollama + MCPでローカルAIエージェントを作るところまでできたが、Tool Use時にストリーミングに対応できないという課題があった。
このために、Mastra APIとの接続時に非ストリーミングには対応していないAITuberKitへの接続ができなかった。
この課題を解決するために、ollama-ai-providerをTool Use時のストリーミングに対応させたフォークを作成し、それをnpmパッケージとして公開した。本記事ではこれらの記録を備忘録的にまとめる。
開発環境
Ubuntu 24.04 on GMKtec EVO-X2(AMD Ryzen AI Max+ 395, 128GB UMA)
前回の記事でも述べたが、ollama-ai-provider
は長期間(記事執筆時点で約6ヶ月)更新がされていない。
一方、ollama本体の方は2025年5月28日にTool使用時のストリーミングに対応している。
これを反映させるために、ollama-ai-providerのレポジトリをフォークして改修を行う。
フォークを確認する
すでに36個のフォークが存在したため、自分で改修を始める前に念の為同様の改修を行ったレポジトリがないか確認したところ、こちらのフォークではTool使用時のストリーミングに対応させていることがわかった。
それならこれをそのまま使えばよいのでは?と思ってMastraに導入しようとしたが、下記のようなエラーが出て導入できなかった。
$ pnpm add @tuorganizacion/ollama-ai-provider
ERR_PNPM_FETCH_404 GET https://registry.npmjs.org/@tuorganizacion%2Follama-ai-provider: Not Found - 404
This error happened while installing a direct dependency of /home/gosrum/AI/temp/temp
@tuorganizacion/ollama-ai-provider is not in the npm registry, or you have no permission to fetch it.
An authorization header was used: Bearer npm_[hidden]
Progress: resolved 0, reused 1, downloaded 0, added 0
そこで、githubのレポジトリを更にフォークすることにした。
Claude Codeでの改修
レポジトリをクローンしても動かし方がわからなかったため、ClaudeにMastraへの導入方法を確認した。
とりあえずビルドできればインストール自体はできるそうだが、私の環境ではそのままではビルドができなかったので、例によってClaude Codeに改修してもらった。
これをbuildしてそれをインストールすれば使えるらしいが、そのままでは他の人に使ってもらうのが難しいので最終的にnpmパッケージで公開することにした。
npmパッケージの公開
Claudeに確認したら、npmパッケージの公開は思ったより簡単にできるらしい。ただし、公開後しばらくすると消すのが難しくなるため、要注意。
以下に簡単に手順を示す。
$ npm run build
$ npm test
$ npm pack
- npmアカウントとセットアップ
npmjs.comにアクセスしてアカウント名とパスワードを登録する。
- 公開
下記のコマンドで公開ができる。ただし、パッケージ名(packages/ollama/package.json
の”name”)やpackages/ollama/README.md
などを必要に応じて修正する。
また、エラーが出たら適宜修正する。
以上で公開が完了する。はじめて公開したが、案外簡単にできた。
今回publishしたnpmパッケージがこちら。
pnpm add @robustonian/ollama-ai-provider-fork
などで導入できる。
使い方は単純で、前回記事で導入したMastraのmcpAgent.tsで説明する。
$ pnpm add @robustonian/ollama-ai-provider-fork
- ロードするnpmパッケージの修正
src/mastra/agents/mcpAgent.ts
- import { createOllama } from 'ollama-ai-provider';
+ import { createOllama } from '@robustonian/ollama-ai-provider-fork';
以上で修正が完了し、toolやMCP使用時でもollamaのストリーミングが可能になった。
これによって、Mastra UI上でMCPを使うときにもStreamingが機能するようになる。
作成したコード
導入済みのレポジトリも公開している。
ブランチがollama-tool-streaming
となっているため、クローンする際は下記のコマンドを利用されたい。
$ git clone -b feature/ollama-tool-streaming https://github.com/robustonian/mastra_ollama_mcp.git
最後に、AITuberKitへの接続を行う。
ニケちゃんさんの記事の「キャラクターとエージェントをつなげる」の通りに設定することで、接続が簡単にできる。
無事にAITuberKitで、MCPを使えるローカルエージェントと対話できていることがわかる。
最後にローカルAIエージェントを作り、少しだけ触った段階での所感を書き留めておく。
特に日本語に強い、ツール使用が得意なLLMモデルで、これだ!というものがない。そのため、今は圧倒的にClaude Sonnet 4などのプロプライエタリモデルが無双している印象がある。
Qwen3シリーズはそれなりに性能もよいが、thinkingしてようやく使えるかもというレベル。ローカルはとにかく遅いのに、thinkingまでするのでリアルタイム性という観点ではかなり分が悪い。
また今回はAITuberKitへの接続をしたり、サイコロを降るだけのMCPを使ったりする例を示した。
確かに上記は機能としてはAIエージェントと言えると思うが、まだこれだけでは欲しい・使いたいといったものにはなっていない。
重要なのは、誰向けに、どんな目的で、なんのツールを使えるようにするか、といったことを考えるところ。ただ一つ言えることは、今回オンプレミス環境で動作するAIエージェントのチャットUI・API環境を自前で構築できたので、その特性を活かしたアプリケーションを今後作っていきたい。
今回の記事では、下記について備忘録的にまとめました。
- ollama-ai-providerをTool Use時のストリーミングに対応させる
- npmパッケージとして公開する
- AITuberKitとの接続する
この記事ではMastra + ollama + MCPを組み合わせたAIエージェントを使った活用例としては、AITuberKitと接続することしか示せていないですが、例えば下記のような場合に役立ちそうです。
- ネットワーク環境から断絶された環境でAIエージェントを使いたい
- オンプレミス環境が求められる、極めて機密性の高い環境でAIエージェントを使いたい
- 極めて個人的な情報や機器をAIエージェント経由で扱いたい場合
1,2は業務で使うことになるのでほとんど情報が外に出てこないと思いますが、3.については面白い活用例が作れたら記事等で紹介したいと思います。
最後まで読んでいただきありがとうございました。次回もぜひよろしくお願いします。
Views: 0