気分転換に、Xのポストで見かけたGradioのChatInterfaceに取り組んでみました。解説ページは以下。
わからないことがいっぱいあるので、ページをファイルに保存して、Claude 3 opusに読み込ませていろいろ質問しながら進めてみました。
サンプルのpredict関数の引数の説明です。
さらに詳しい説明はこちら
historyにはそのまま履歴が残っているので、LLMに入力するためには以下のことを考えないといけない。
もっと理解を深めてみる。
ということで、以下のコードの部分がようやく理解できました。
history_openai_format = []
for human, assistant in history:
history_openai_format.append({"role": "user", "content": human })
history_openai_format.append({"role": "assistant", "content":assistant})
history_openai_format.append({"role": "user", "content": message})
さて、Macbookを使っているので、MLXアーキテクチャでのLLMを使ってみます。シンプルに、mlx-lmモジュールで提供されている generateを使ってみることにします。help(generate)で出た説明は以下です。
あと、今回は以下のモデルを使ってみます。
例に従って、tokens=1024, temperature=0.5, で設定することにします。
いろいろ試行錯誤しましたが、シンプルに以下のスクリプトでGradioが動きました。デバッグ用のterminal出力のprint文は残してあります。
import gradio as gr
from mlx_lm import load, generate
model, tokenizer = load("stabilityai/stablelm-2-zephyr-1_6b")
chat_template = tokenizer.chat_template or (
"{% for message in messages %}"
"{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}"
"{% endfor %}"
"{% if add_generation_prompt %}"
"{{ '<|im_start|>assistant\n' }}"
"{% endif %}"
)
def predict(message, history):
prompt = []
for human, assistant in history:
prompt.append({'role': 'user', 'content': human})
prompt.append({'role': 'assistant', 'content': assistant})
prompt.append({'role': 'user', 'content': message})
print (f"履歴の形はこんな感じ:\n {history}")
print (f"promptの形はこんな感じ:\n {prompt}")
inputs = tokenizer.apply_chat_template(prompt,
tokenize=False,
add_generation_prompt=True,
chat_template=chat_template)
print (f"入力される最終プロンプトはこんな感じ:\n{inputs}")
response = generate(model, tokenizer, prompt=inputs, temp = 0.5, max_tokens = 1024, verbose=False)
return response.strip()
gr.ChatInterface(predict).launch()
上記のchat_templateとtokenizer.apply_chat_template部分はいつものように、下記を参考にさせてもらっています。
実行結果画面はこちらです。
(mlxとmlx-lm, gradioを導入した上で走らせてください。)
この時点でのterminalの出力は以下です。
Streaming出力表示とかもできそうですが、今回はここまでで満足しました。
勝手に対話履歴がhistoryに保存されていくのは便利ですね。
#AI #AIとやってみた #やってみた #Gradio #大規模言語モデル #Huggingface #MLX #MacbookPro