localAIで動かしたような気もするのですが、今の状態だとまともにチャットすらできない状態でした。windowsのOllamaで動かして満足してしまったのかもしれないなぁ…。
localAIで動かしてみようと試しながら寝てしまったのですが、起きてから少しあがいてみました。
今遊んでいる環境のlocalAI v3.12.1ではRakutenAI-2.0-mini-instruct-BF16はloalAI上から見えるのですが、Q8.0は見えていないので/usr/share/local-ai/modelsを確認すると、ggufファイルはあるのですが.yamlを…ないですね…。RakutenAI-2.0-mini-instruct-BF16.yamlがあるようなのでそれをベースに…とはいえ、このBF16もまともに動かない状態ですが。
中身を確認するとこんな感じでした
backend: llama-cpp
context_size: 8192
mmap: true
name: RakutenAI-2.0-mini-instruct-BF16
parameters:
model: RakutenAI-2.0-mini-instruct-BF16.gguf
stopwords:
- <|im_end|>
- <end_of_turn>
- <start_of_turn>
template:
chat: |
{{.Input }}
<start_of_turn>system
chat_message: |-
<start_of_turn>{{if eq .RoleName "system" }}model{{else}}{{ .RoleName }}{{end}}
{{ if .FunctionCall -}}
{{ else if eq .RoleName "tool" -}}
{{ end -}}
{{ if .Content -}}
{{.Content -}}
{{ end -}}
{{ if .FunctionCall -}}
{{toJson .FunctionCall}}
{{ end -}}<end_of_turn>
completion: |
{{.Input}}
function: |
<start_of_turn>system
You have access to functions. If you decide to invoke any of the function(s),
you MUST put it in the format of
{"name": function name, "parameters": dictionary of argument name and its value}
You SHOULD NOT include any other text in the response if you call a function
{{range .Functions}}
{'type': 'function', 'function': {'name': '{{.Name}}', 'description': '{{.Description}}', 'parameters': {{toJson .Parameters}} }}
{{end}}
<end_of_turn>
{{.Input -}}
<start_of_turn>system
基本的に最近のgemma3とかと同様の内容。そもそもgemmaが他の生成AIモデルと違ってsystemロールが無かったりassistantロールがmodelロールに名前が変わっていたりとしているので、gemmaが特殊なのですが…
いろいろ調べて調整してもまったくうまく行かず、なので、困ったときの生成AIというわけで、geminiに聞いてみました。まぁそのままズバリ動く形にはならないでしょうが、とっかかりはつかめるでしょう。この辺はcopilotの方がいいんでしょうけど、まだ触れたことないんです。
localAIと.yamlの話を出してRakutenAI2.0の.yamlの設定内容を聞いたところそれっぽいのが提示されたので早速コピペでやってみましたが…やはりダメでした(笑)
とは言え、方向性は間違ってなさそうなのでそれをベースに試してみましたがどうも上手く行かない。
八方ふさがりになったので、改めてgeminiに聞いてみました。具体的に設定しているパラメータなども指定して、モデル名も具体的にRakutenAI-2.0-mini-instruct-Q8_0.ggufと指定して。
すると、もう少しまともなパラメータを提示されたのですが…
# 1. テンプレートの設定
template:
# 各メッセージのラップ方法 (ChatML形式)
chat_message: |
<|im_start|>{{.Role}}
{{.Content}}<|im_end|>
# チャット全体の構成
# 最後にモデルが回答を始めるための合図 "<|im_start|>assistant\n" を置くのがコツです
chat: |
{{.Input}}
<|im_start|>assistant
# 単純なテキスト補完用
completion: |
{{.Input}}
# 2. 停止条件の設定
# これを忘れると、AIが一人二役(user: ... と自作自演)を始めてしまいます
stopwords:
- "<|im_end|>"
- "<|im_start|>"
- "<|endoftext|>"
# 3. ロール(役割)のマッピング
# ユーザー入力を "user"、システムプロンプトを "system" として識別させます
roles:
user: user
system: system
assistant: assistant
チャットの開始はできるのですが、どうも最初の入力が空振りする感じになっているのと、会話がほぼかみ合わない。
質問するとそのままオウム返しされるような?
具体的な設定を聞いたときに参考になるような参照先も聞いたのでそちらも見ていると、ものによって{{.Role}}の前後にスペースが入っているものがあったり、ものによってはそれぞれのキーワードの後にスペースが入っていたりと微妙な違いがあることに気づきました。
試しに{{ .Role }}とスペースを入れてみると何となく会話ができるようなりました。
不思議だったのでgeminiに聞いてみたところ、「モデルが学習時に「トークナイザー」がどう文字を区切ったかに依存する部分」とのこと。本当かどうかは全く知りませんが、そういう事にしておきますか(笑)
なのでrakuten AI 2.0はスペース区切りをしてあげた方が上手い感じなんじゃないかと。gemma3は、この辺の曖昧さはいい感じで吸収するので気にする必要が無かったりするのですが。
gemma3とかとは違い、rakutenAI 2.0はシステムプロンプトがハッキリと指示できるのでそれを試してみると…なんか変(笑)
chat: |
{{.Input}}
<|im_start|> assistant
と、assistantの前にスペースを入れたり、 - "\n<|im_start|>"と改行を入れてあげるとさらに会話が安定している感じです。
少なくてもRakutenAI 2.0はシステムプロンプトの指示は単刀直入に簡素に書いてあげないとダメみたいですね。この辺は流行というか生成AIの世代によるところなのかもしれませんが。なので一昔前の「あなたは~です。」というような形式のシステムプロンプトがよいようです。gemma3以降の世代はロールプレイさせるよりもっと具体的な内容を説明する方が好ましいという形になっている様ですが。
と、結構下準備に時間はかかりましたが、暇つぶしチャットができるかどうかシステムプロンプトを調整してチャットしてみたところ…やはりこの世代では個人的には満足できないレベルでした。ほんと生成AIに触れるのがgemma3世代でよかったと感じます。
システムプロンプトをうまく調整したり、ファインチューニングを行ってもっと個性を出せば変わるとは思いますが、プログラムという以上には感じなく、魅力は感じませんでした。
ただ、日本に特化した知識ベースや日本語のやり取りはさすがと言った感じはします。くだらない会話をした後に質問するとぶっきらぼうに返事をするだけになるのは理解できませんでしたが、会話を新たに始めると「詳細に説明して」といえば結構細かく教えてくれました。geminiのような新たな提示もない分、道具としては優秀なような気はします。
てか、gemma3nで遊んでいるときは比べ物にならないほど軽くて快適…。お試しの環境としてただの安物miniPCを使っているので割り切ってるつもりですが、このぐらいのモデルだと十分実用に耐えますね…w
gemma3nで適当にシステムプロンプトを設定してチャットすると1分ぐらいで反応があると早いと感じる体になっていたので…
で、と、するとやはりRakuten AI 3.0のmini版が出れば結構期待できるのかな?出さないのかな?出してくれるのかな? それ以前に地味にRakuten AI 3.0のライセンスからMITライセンスが消えているのが炎上しそうですが…
一応参考までに(localAI v.3.12.1で動かした).yamlファイルを添付(contextサイズがなんか大きくなってますが意味はないです。)
backend: llama-cpp
context_size: 8192
name: RakutenAI-2.0-mini-instruct-Q8_0
parameters:
model: RakutenAI-2.0-mini-instruct-Q8_0.gguf
# 1. テンプレートの設定
template:
# 各メッセージのラップ方法 (ChatML形式)
chat_message: |
<|im_start|>{{ .Role }}
{{.Content}}<|im_end|>
# チャット全体の構成
# 最後にモデルが回答を始めるための合図 "<|im_start|>assistant\n" を置くのがコツです
chat: |
{{.Input}}
<|im_start|> assistant
# 単純なテキスト補完用
completion: |
{{.Input}}
# 2. 停止条件の設定
# これを忘れると、AIが一人二役(user: ... と自作自演)を始めてしまいます
stopwords:
- "<|im_end|>"
- "\n<|im_start|>"
- "<|endoftext|>"
# 3. ロール(役割)のマッピング
# ユーザー入力を "user"、システムプロンプトを "system" として識別させます
roles:
user: user
system: system
assistant: assistant
0 件のコメント:
コメントを投稿