はじめに
この記事はOllamaのPythonライブラリを使ってローカルLLMを利用するの続き
今回はストリーミング形式で表示する方法について
また、Llama3.1-Swallowのv0.2が2024年11月11日に公開されていたhttps://swallow-llm.github.io/llama3.1-swallow.ja.html
過去の記事(Llama 3.1 SwallowをOllamaで使えるようにする|ローカルLLM)と同じ手順でv0.1からv0.2に変更した
サンプルコード
あらかじめ、ollamaライブラリをpipでインストールしてある
公式のドキュメント通りに書いた→https://github.com/ollama/ollama-python
import ollama
stream = ollama.chat(
model='Llama-3.1-Swallow-8B-Instruct-v0.2_Q4_K_M',
messages=[{'role': 'user', 'content': '名古屋で1日遊ぶプランを考えてください'}],
stream=True)
# 型の表示
print(type(stream))
print(stream)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
ストリーミング形式
ollama.chat()メソッドでstream = Trueにするだけ
型を出力すると以下のようになる
<class 'generator'>
<generator object Client._stream at 0x1023c47b0>
generatorクラスが返ってきていることが分かる
streamの出力
streamはジェネレーターなので、逐次データを生成する
データごとにchunkに入れてprint()関数で表示している
print()関数
chunkは辞書のネスト構造をしているので、キーで[‘message’][‘content’]を指定してやる必要がある
これはストリーミングを使わない場合と同じ
end
デフォルトでは文末には改行コード(\n)になっている
このままでは、1データごと(数文字ごと)に改行されて見づらいので、end = ”(空文字)にしておく
flush
print関数では出力を一度バッファに保存するが、flush = Trueにすることですぐに画面に表示できる
実行結果
<class 'generator'>
<generator object Client._stream at 0x1023c47b0>
名古屋で1日遊ぶプランを考えてみました。以下は、名古屋の魅力を味わえる一日のスケジュールです。
**9:00 - 10:00:栄(Sakae)へ移動**
* 名古屋駅から名鉄線に乗り、栄駅で下車します。
* 栄は名古屋の中心地であり、ショッピングやグルメを楽しめるエリアです。
**10:00 - 12:00:松坂屋本店(Matsuzakaya Department Store)**
* 栄にある松坂屋本店で買い物を楽しみます。
* この百貨店には、名古屋の有名な菓子や土産品が揃っています。
**12:00 - 13:30:ランチ**
* 名古屋はグルメの街としても有名です。
* ランチは、名古屋めしと呼ばれる地域独自の料理を試してみてください。味噌カツやひつまぶしなどが人気です。
**13:30 - 15:00:名古屋城(Nagoya Castle)**
* 名古屋城は、江戸時代に築かれた城で、現在は国宝に指定されています。
* 城内には、歴史博物館や庭園があります。天守閣から見える景色も美しいです。
**15:00 - 17:00:熱田神宮(Atsuta Shrine)**
* 熱田神宮は、日本最古の神社の一つであり、多くの歴史的建造物や文化財があります。
* 参拝をして、名古屋の伝統文化に触れてみてください。
**17:00 - 19:00:名古屋港(Nagoya Port)**
* 名古屋港は、日本の主要な貿易港の一つです。
* 港周辺には、レストランやショッピングモールがあります。夕方に訪れると、美しい夕焼けも楽しめます。
**19:00 - 21:00:名古屋駅周辺でのディナー**
* ディナーの後は、名古屋駅周辺のホテルやレストランで一日を振り返りながら食事を楽しみましょう。
* 名古屋は夜遅くまで賑わっているので、夜遊びも楽しめます。
このプランでは、名古屋の歴史、文化、グルメ、そしてショッピングなどを網羅的に体験できます。ただし、実際のスケジュールや場所については、最新の情報を確認することをお勧めします。
名古屋駅から栄までは名鉄線では移動できないし、名古屋城は国宝には指定されていないし、ツッコミどころはあるが、8Bのモデルでここまで書けるのは個人的にはすごいと思う。
長文になるほど、ストリーミング形式は役に立ちそう
活用の方法として、Chat GPTやClaudeのブラウザのように逐次表示するシステムがOllamaでも実現できる
あとは、逐次出力された応答をText To Speechに送れば、ローカルLLMを利用した音声対話の高速化が望めそう
コメントを残す