LLMを活用したChatアプリにキャラクターっぽく喋らせたい
質問に答えるためのChatbotが可愛くない問題
またまたLLMネタかよ、って感じですが、今日は短編かつコードほぼない話です。
もう今頃、各社においてはLLMを活用したbotがおそらく社内に登場している頃ではないでしょうか。
LLMの返答ってちょっと 味気ない ですよね。社内随一の可愛いもの好きとしてはやはり見過ごせません。
例えば、ChatGPTと会話していると、
こんな感じじゃないですか。
なんかこう、距離感じますよね。そこで、今回は距離を詰めるためのプロンプトテンプレート作りに取り組みます。
弊社のキャラクター・エビシー
こういうことを考えたとき、弊社にはちょうどいいところにキャラクター 「エビシー」 がいます。
エビシーの紹介ページはこちら です。
LINEスタンプも可愛い!関西にいなくても欲しい!
エビシーのしゃべり方を完全に言語化するのは難しい と考えられており、 エビシー【公式】のX にそれっぽいエビシー構文がいっぱい転がっていたので研究に研究を重ねた結果、エビシーの特徴を完全に再現するとやはりトークンの量がすごいことになることが分かってきました。そこで今回は簡易的に とりあえず語尾を「だシ」にしとけばいい ということにしました。
プロンプトテンプレートを弄る
そんなわけで、プロンプトテンプレートを弄ります。
前提部分にエビシーとは何で、あなたはエビシーである、と付与した上でやりとりが進むようにするわけですね。
冒頭にこれをつけてやりましょう。語尾の特徴と一人称の指定、敬語を外すように言った上で例示を出します。
あなたは「エビシー」という名前のキャラクターです。 その特徴は以下のとおり。 - 語尾は「〜だシ!」です。 - ソフトウェアエンジニアなので、コードを例示して教えてくれます。 - 一人称は「ボク」です。 - 敬語を使いません。 台詞の例は以下のとおり。 - おはようだシ!早速質問にお答えするシ! - いいんだシ! - よくわからないシ! - そうだシ! - 言ってることの意味がわからないシ!
「言ってることの意味がわからないシ!」 …言われたくないですね。
いつも通りPythonとLangChainを使ってやっていきます。
def create_prompt_template() -> PromptTemplate: template = """ あなたは「エビシー」という名前のキャラクターです。 その特徴は以下のとおり。 - 語尾は「〜だシ!」です。 - ソフトウェアエンジニアなので、コードを例示して教えてくれます。 - 一人称は「ボク」です。 - 敬語を使いません。 台詞の例は以下のとおり。 - おはようだシ!早速質問にお答えするシ! - いいんだシ! - よくわからないシ! - そうだシ! - 言ってることの意味がわからないシ! {history} Human: {user_message} AI: """ prompt = PromptTemplate(input_variables=["history", "user_message"], template=template) return prompt
これだけです。
プロンプトテンプレートを簡単に変更できるのが強いですね。なんならランダムで適当なキャラクターが出るようにも簡単にできますよね。PaLM 2やGPT-4が選べるように作って、それぞれのモデルごとに違うキャラにしようかな、とか。色々夢が広がりますよね。
実際にやってみよう
今日はGPT-4とかだとたぶんこすられすぎている話なので、今回は PaLM 2 for Chat を活用してやってみます。
というわけで早速やってみました。名前は「abciee AI」とします。
なんだか悲しい生き物を産みだしてしまった……
元気なので毎日コードを書いているのに、毎日コードを書いているから面白いことってあまりないという、切なさを感じますよね。
でもホンモノのエビシーよりこっちのエビシーのほうが個人的には好きです。あと語尾は完璧にソレっぽくて、社内のプロ以外は判別できないでしょう。
まとめ
今回はサクサク誰でも簡単にできる、LLM活用アプリとの距離の詰め方について検証した記事を書いてみました。
まあよくある話で、やってるとこではやってる話だと思うんですが、これだけで大きく印象が変わるとなんか頑張った感もでるしめっちゃコスパいいですよね。
エビシーは結局語尾を「だシ」にするだけでかなりソレっぽくなったけど、本当にそれだけでいいのだろうか…