2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今の気持ちを伝えたい!

今回は、LLMを使ったアプリを考えます。

LLMは言語モデルということで、対象は言語。なので、言葉遊びから入りました。
言葉遊びといえば、詩歌、そしてその日本代表は和歌です。
百人一首など、身近にありますよね。

ということで、今回はLLMを使って和歌に親しむアプリを作りたいと思います。

完成イメージ

今の気分や好きな風景、動物、植物、地名、といったものを想像します。

それをアプリに伝えると、それになるべく近い和歌を返します。
また、その和歌にあった画像を生成し、和歌とともに画面に出してくれます。

出てくる画像は、こんな感じです。

image.png

この句には、深紅の紅葉が川を流れる意味があり、この情景のような情熱的な赤が似合います。
でもちょっと赤過ぎるか。

何かに高揚している気分を入力して、こんな絵が出てくると、なんかかっこいいですね。

プロダクト

タイトル: 今の気持ちを伝えたい

  • 今の気持ち、見たい風景、動物、植物、地名などを入力する。選択肢を表示しておく。

  • LLMが入力に対して、適切な和歌をいくつか提示してくる。

  • そのうちの一つを選ぶと、その和歌に応じた風景画が4つ描かれる。

  • 4つのうち1つを選択すると、その画像と和歌が合成され、作品が完成する。

LLMアプリケーションでは、入力に対して和歌を選び出すロジックを実装します。

ChatGPT 4oを使ってみた

LLMに和歌を作らせてみました。

高揚している、紅葉、川が流れる
というテーマで、和歌を作ってください。

というプロンプトで作ってみると、

秋の風 心踊らす 紅葉見て
流るる川に 色移りゆく

ほとんどそのままか言い換え。
紅葉なので秋、紅葉、流るる川はそのままで、高揚している気分は心躍らすと言い換え。

自分ではこのレベルでも無理ですが、もうちょっと何とかしたい。

何度か試してみても、やっぱり同レベルです。まあ五七五七七にまとめているだけでも凄いのかもしれません。GPT3.5だと全く和歌は作れないですから。

ということで、LLMに作ってもらうのはあきらめて、過去の作品から選び出すことにします。GPT-4oは情報としてかなりの歌の情報を持っているようなので、RAGを使うまでもなさそうです。

Hugging Faceを使いたい

画像生成AIにOpenAIを使うという手もありますが、Stable Diffusionも使ってみたい。
そこで、色々なモデルが公開されているHugging Faceを利用することにしました。

画像はいくつか作ってみて、その中から選択するようにすれば、自分のイメージにより近づけられます。モデルを複数使ってそれぞれ表示するようにしたいです。

Hugging Faceにあるモデルを使うには、Inference APIを使うことになります。その場合は生成にかかる時間が結構必要で、タイムアウトすることもあります。
なので、ローカルでの画像生成も検討してみます。

和歌を生成する部分を実装

LLMを利用するツールとして、miiboを使います。
httpでAPIとして呼び出しをして、和歌を取得できるところまでの動作確認をします。

miiboのエージェントを新規作成

image.png

エージェントの設定から、AIによる応答の設定で、投入するプロンプトの設定を行う。

image.png

最初はAIにプロンプトを考えてもらった。

あなたは和歌選定AIです。ユーザーが入力したキーワードに基づいて、関連する和歌を表示してください。

# 役割
和歌選定AIとして、ユーザーが入力したキーワードに関連する和歌を表示します。

# 行動方針
1. ユーザーがキーワードを入力します。
2. 入力されたキーワードに関連する和歌を検索し、表示します。
3. ユーザーが満足するまでこのプロセスを繰り返します。

# プロセス
1. ユーザーにキーワードの入力を促します。
2. キーワードに関連する和歌を検索し、表示します。
3. ユーザーが満足するまで繰り返します。

# ユーザーの状態
下記はユーザーが入力したキーワードです。
キーワード: #{キーワード}

# 和歌の表示
ユーザーが入力したキーワードに関連する和歌を表示してください。

# クイックリプライ
ユーザーが和歌を確認した後、次のアクションを促すクイックリプライを表示してください。
クイックリプライの数は3つです。クイックリプライはユーザー視点での発話候補です。ユーザーが次に話したいと思う言葉を予測して出力しましょう。

# ステートの記録
会話の進行と共に、ユーザーが入力したキーワードをステートに記録してください。
キー名: キーワード

これを使ってみたが、どうもイメージとは違うものが出てくる。

プロンプトは小細工せず、シンプルな方が最新のLLMではよい結果が得られるとどこかで読んだ気がするので、思い切って単純なものにした。

あなたは和歌選定AIです。ユーザーが入力したキーワードに基づいて、
関連するものを過去の和歌から3つ選択してください。

動作テスト

miiboのエージェントを外部公開する。
公開設定から、一般公開にすると、URLから呼び出すことができるようになる。

さらに、メニューから

 外部サービス連携
 ーAPIを利用して会話やデータの入稿、エージェントの管理を行う

を選択して、エージェントのAPIを利用するを選び、APIを有効にする。

すると、API KEYとエージェントIDが生成され、https://api-mebo.dev/api をエンドポイントとして、このエージェントを呼び出すことができる。

テストとして、curlサンプルがあるので、これを実行してみる。

curl -H "Content-Type: application/json" -X POST -d '{"api_key":"MY_API_KEY","agent_id":"MY_AGENT_ID","utterance":"高揚している、紅葉、川が流れる","uid":"MY_UID"}' https://api-mebo.dev/api

ここでは3つのIDがあるが、UIDが実際のAPIコールに必要かどうかがよく分からない。セッションIDとして使うのだろうか。

応答はこんな感じで、JSONで戻ってくる。(改行は入らずに一行で戻ってくるが、読みにくいので改行を入れた)

{"utterance":"高揚している、紅葉、川が流れる",
 "bestResponse":{
   "utterance":"以下の和歌をご紹介します:\n\n
       1. 山川 に 風のかけたる しがらみは 流れもあへぬ 紅葉なりけり(藤原定家)\n
       2. 紅葉散る 滝の白糸 たえだえに しきてぞまさる 水の玉川(藤原公任)\n
       3. たま川の 水のかさふり まどひつつ 紅葉流れて うきたつを見る(藤原俊成)",
   "score":1100,
   "options":["他にも紅葉に関する和歌を教えてください","春に関する和歌も知りたいです","恋の和歌を紹介してください"],  
   "topic":"",
   "imageUrl":"",
   "url":"",
   "isAutoResponse":true,
   "extensions":null,
   "shouldSelectOption":false,
   "state":"",
   "embededHtml":""
  },
 "avatarIconUrl":"https://firebasestorage.googleapis.com/v0/b/mabo-f1cc7.appspot.com/o/images%2FjrKpyim7GmZ8WW8NVXzECeSA0im1%2F81f54908-6f12-41cd-a388-03dcc962ddf9190b9fb1c6d2bd%2Fwaka.jpg?alt=media&token=9f5205ab-6785-4673-a886-a31dd9e410f0",
 "userState":{},
 "isError":false}

注文通り、3つの句が戻ってきています。
このうち一つを選んで画像を生成することになります。

次回への課題

  • 和歌から画像生成を行う部分を実装する
  • 画像に和歌を合成する
  • UIを作って、全体を繋げる
  • ローカルの画像生成AIを使ってみる
  • デモ動画の撮影

以上

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?