AIToday
AIコーディングオープンソースAIZenn AI/ML掲載日時: 2026年10月25日 13:01

Ollamaのチャットを標準ライブラリでストリーミング

LINEで送る
Ollamaのチャットを標準ライブラリでストリーミング

3つのポイント

  1. 何が起きたか

    投稿者はWindows 11とPython 3.11上でOllama 0.40.4に対しchat_stream.pyを実行。

  2. なぜ重要か

    公式ollamaライブラリを入れられない、あるいは入れたくない開発者にとって、追加依存ゼロでストリーミング出力を実現する実例となる。ただしモデルの読み込み時間と履歴の管理は自前で行う必要がある。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

この投稿はよくある摩擦点を狙っている。Ollamaには公式Pythonライブラリがあるが、スクリプトによってはない方がよい場合もある。urllibとjsonだけをインポートすることでpipを完全に回避でき、単一ファイルのツールやパッケージ追加が面倒なマシンに適する。スクリプトはローカルのhttp://127.0.0.1:11434/api/chatを小さなqwen2.5:0.5bモデルで叩くため、ループ全体が約20行で見通せる。

仕組みの要はNDJSONにある。streamをtrueにすると、各行がmessage.contentの断片とdoneフラグを持つ自己完結したJSONオブジェクトになる。応答を反復して各断片をflush付きで出力することが、ターミナルでのタイプライター効果を生む。ただしパイプにリダイレクトすると一つの塊に潰れてしまう。投稿者は、Python 3.6以降がUTF-8を自動検出するためjson.loadsが生のバイト列をそのまま受け付け、デコードの落とし穴を避けられると指摘する。

注意点は概念的というより実務的だ。最初のリクエストはモデルの読み込みを待ち、0.5Bモデルで約30秒と計測されており、自前でタイムアウトを設定する場合は重要になる。そしてストリーミングが動いた後は、会話履歴とトークン統計の整形が自分の責任になる。その負担が大きくなったら公式ライブラリを勧めると投稿者は述べており、ここでの要点は依存ゼロで動かすことにある。

よくある質問
ストリーミング出力を得るコツは何か?
/api/chatリクエストでstreamをtrueに設定する。応答はNDJSONで返り、1行につき1つのJSONオブジェクトになる。各行を読んでmessage.contentをflush付きで出力すればストリーミング効果が得られる。
最初のリクエストにはどれくらいかかるか?
モデルの読み込みが必要なため最初のリクエストは遅く、投稿者の計測では0.5Bモデルで約30秒だった。urllibのデフォルトにはタイムアウトがないため、自分でタイムアウトを設定する場合は長めに設定する。
ストリームの終了はどう分かるか?
最後のチャンクにdone: trueが含まれる。このシグナルでループを抜ければ、その最後のチャンクに含まれる統計情報も保持できる。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

このようなAIの動きを、御社の業界・競合に合わせて毎朝届ける法人プランもあります → 詳しく見る

関連記事

次の記事へConstellationは低負債で増配が速い