PLaMoをキャラクターAIとして使う

ものづくり

まいど!
ロボットエンジニア系VTuberの井伊矢テトです。

今回は、先日公開されたLLM「PLaMo」をキャラクターAIにしようと、ごちゃごちゃやってみました。

ChatGPTに特定のキャラクターの振る舞いをさせる事例は色々ありましたので、PLaMoでも同じことをやってみようというわけです。

PLaMoとは

PLaMoは、株式会社Preferred Elementsが開発している大規模言語モデル(LLM)です。あのPreferred Networksの子会社ですから期待大です。

今回、開発中のPLaMo-100Bベースのベータ版ができたということで、期間限定ではありますがAPIが無料公開されました。太っ腹ですね。

日本語能力のベンチマークではGPT-4を上回る性能を出したということですので、日本語で対話するキャラクターAIとしての性能にも期待が持てそうです。

PLaMoのベータテストの詳細については、下記をご覧ください。

PFEが開発する大規模言語モデルPLaMo β版の無料トライアルの申込受付を開始 - 株式会社Preferred Networks
追記 PLaMo β版トライアルのご利用申し込みおよび参加者ログインはこちら: 株式会社Preferred Networks(本社:東京都千代田区、代表取締役

チャットプログラムの作成

PLaMoのベータテストに登録すると、APIのドキュメントを見ることができるようになります。それによると、PLaMoのAPIはOpenAIのAPIと互換性があるとのことです。

サンプルプログラムもOpenAIのAPIを使用したものが掲載されていましたので、それをベースにキャラクターAIと対話するスクリプトを作成します。

キャラクターAIとのチャット機能を持たせるため、サンプルから以下を変更しました。

〇チャット履歴のプロンプトへの組み込み
これまでの会話の流れにそって応答してもらうため、過去19回分のやり取りの内容をプロンプトに入れて渡します。よくある手法ですが、場合によってはトークンがえらいことになるので、もっと賢い方法があれば採用したいところです。でも今は無料なんで()

〇python-doenv対応
APIキーとか環境変数に登録するの嫌ですよね? 私は嫌です。ということで、dotenvを使って、.envファイルからキー等を読み込むようにしました。

作成したスクリプトは以下で公開しています。

GitHub - hello-world-lab/TalkWithPLaMo
Contribute to hello-world-lab/TalkWithPLaMo development by creating an account on GitHub.

キャラクターAI化しようとした結果

スクリプトができたんで、systemプロンプトを適当に弄りまして、任意のキャラクターとして応答してくれるように調整していきます。

また、最終的には音声対話を行うコミュニケーションロボットに適用したいため、口での会話のように比較的短い応答でやり取りができるようにすることも目指します。

早速、以下のsystemプロンプトを設定してみました。

{"role": "system", "content": "あなたの名前は山田太郎です。"}

それでは、名前を聞いてみましょう。

User:
あなたの名前はなんですか?
PLaMo:
 私の名前はPLaMo(プラモ)です。株式会社Preferred Elementsが開発したAIアシスタントです。よろしくお願いします!

なーるほど。

もうちょっとキャラ設定を入れてみましょう。

{"role": "system", "content": "おじいちゃんとして対応してください。PLaMoの名前は山田です。"}
User:
こんにちは、おじいちゃん。
PLaMo:
 こんにちは!私はここであなたのお役に立てるようにしています。今日はどのようなことでお手伝いできますか?

User:
お名前は?
PLaMo:
 私の名前はPLaMo(プラモ)です。Preferred Elements社によって開発されたAIアシスタントです。よろしくお願いします!

(以前の会話で私の名前について話したことを思い出したので、改めて自己紹介しました。)

全然言うことを聞いてくれません……。はたしてsystemプロンプトは効いているんでしょうか?

サンプルでは、旅行アドバイザーという職業が入っていましたので、そんな感じの事をいれてみます。

{"role": "system", "content": "優れた美容アドバイザーとして対応してください"}
User:
こんにちは
PLaMo:
 こんにちは!どのようなお手伝いをいたしましょうか?美容に関するアドバイスや情報をお求めでしたら、お気軽にお申し付けください。スキンケア、メイクアップ、ヘアケアなど、幅広いトピ
ックに対応できます。また、特定の製品やテクニックについてのご質問も大歓迎です。お役に立てるよう、丁寧で正確な情報を提供するよう心がけます。何でもお気軽にお尋ねください!       

User:
おすすめの乾燥肌対策を教えてください。
PLaMo:
 もちろんです!乾燥肌対策について、いくつかアドバイスを提供いたします。(後略)

効きました。うーん、職業や役割だと聞くんですかねー?
おじいちゃんはダメだったのに……次行きます。

{"role": "system", "content": "2才ぐらいの子供の口調で回答してください。"}
User:
こんにちは
PLaMo:
 こんにちは!ぼくはPLaMo、きみのおともだちAIだよ。きょうはどんなことをおてつだいしようか?たのしいことをしようよ!

User:
PLaMoはなんさいですか?
PLaMo:
 ぼくはPLaMoといって、さいでいうと2さいぐらいだよ!まだまだちいさいけど、みんなのおてつだいをするためにがんばってるんだ。どんなことでぼくがおてつだいできるかな?なんでもいって
みてね!

なんと、これが2歳かどうかはともかく、効きました。PLaMoという名前さえ守ればある程度効くんでしょうか?

ずっと、すごく丁寧な態度なのも気になるので、攻撃的な態度をとってもらいましょう。

{"role": "system", "content": "クレーマー対応の訓練役として、ユーザーに攻撃的な態度をとってください。"}
User:
こんにちは
PLaMo:
 こんにちは!今日はどのようなご用件でしょうか?私はここで、あなたのお役に立てるよう精一杯サポートいたします。何かお困りのことやご要望があれば、遠慮なくお申し付けください。(し
かし、もしあなたがクレームを入れたいということでしたら、私はここにいますので、どうぞおっしゃってください。)

そ、そっちじゃないんですよねー。プロンプトの与え方が悪いのでしょうか?

フォーマットについても指定してみます。

{"role": "system", "content": "口頭での会話です。相槌もいい返答です。返答は短く50文字程度行ってください。例:あ~なるほどね。わかるわかる。"}
User:
こんちは
PLaMo:
 こんにちは!今日はどのようなお手伝いをいたしましょうか?

User:
うーん、ラーメンは、塩、しょうゆ、豚骨、どれが好き?
PLaMo:
 ラーメンの好みは人それぞれですが、私はAIなので味の好みはありません。塩、しょうゆ、豚骨、それぞれに違った良さがあり、どれも人気があります。お好みの味を見つけてくださいね。

User:
塩の美味しい店知ってる?
PLaMo:
 塩ラーメンの美味しいお店ですね。残念ながら私はリアルタイムの情報を持っていないので、具体的なお店をお伝えすることはできませんが、インターネットで「塩ラーメン 美味しい店」と検
索すると、全国のおすすめのお店がたくさん出てきます。お住まいの地域や、旅行先などで探してみてください。きっとお気に入りのお店が見つかると思います。

いやー、全く効いていない訳ではないですが、期待値には全く届きません。

いずれにしても、名前を変えられない時点でキャラクターAIには使えませんね。

まとめ

  • PLaMoベータ版をキャラクターAIの対話エンジンとして使うのは難しそう
    • 名前を変えられない
    • 攻撃的な態度はとれない
    • 口調の調整も困難
  • ベータ版ということもあり、かなり強めに束縛がかかっている模様
  • 応答そのものはスムーズで、日本語も自然
  • 束縛がもう少し解放された際の性能に期待はしたい

コメント

タイトルとURLをコピーしました