はじめに
突如として現れたAIモデル「Jev」。
「速い」「安い」と話題になっていますが、なんといっても目を引くのは そもそもLLMではない 点です。
Jevは、選択肢を選んだり採点したりと 判断することに特化 しています。
{
"new_noul_1": {
"type": "noul",
"instructions": "バナナはおやつに入りますか?",
"criteria": {
"true": "",
"false": ""
}
}
}
{
"new_choice_1": {
"type": "choice",
"instructions": "パンはパンでも食べられないパンは?",
"criteria": {
"パンダ": "笹を主食とする熊の一種",
"パンツ": "下半身に身につける下着の一種",
"フライパン": "食べ物を加熱する調理器具の一種"
}
}
}
{
"new_score_1": {
"type": "score",
"instructions": "仏の顔も",
"criteria": [
"零度まで",
"一度まで",
"二度まで",
"三度まで",
"四度まで",
"五度まで"
]
}
}
普通のLLMのように、プロンプトに対して言葉で返答することはありません。そのおかげで速くて効率の良い判断ができているのですが...やっぱりJevと話してみたくありませんか?
言葉を返せなくても、君の気持ちが知りたいんだ。
作ったもの
というわけで作ってみました。Jevの恋愛シミュレーターです。
npm run dev で起動します1。
Jevに話しかけると、内容に応じて 表情が変化 します。
リリースおめでとう!
喜ばせると少しずつ親密度も上がっていきます。
好きです、付き合ってください
永遠の愛を誓います
質問をすることもできます。Yes/Noで答えられる質問をしてみましょう。
疲れちゃった?
Jevリクエスト
実装を軽く紹介します。
UIの表情は、感情の選択肢を選ばせることで更新しています。
Jevには複数の質問をまとめてリクエストできるため
- 感情: choice
- 親密度の増減: score
- (質問の場合)質問文: yes/no (noul)
をリクエストしています。
{
"emotion": {
"type": "choice",
"instructions": "「疲れちゃった?」を聞いて感情がどう変わった?",
"criteria": {
"neutral": "落ち着いている",
"happy": "嬉しくて楽しい気持ちである",
"laughing": "面白くて大笑いしたい気持ちである",
"pleased": "穏やかに満足し、にこやかな気持ちである",
"loving": "愛おしさで胸がいっぱいな気持ちである",
"silly": "はしゃいでふざけたい、おどけた気持ちである",
"thinking": "疑問に思い、考え込んでいる気持ちである",
"annoyed": "うんざりして呆れている気持ちである",
"pleading": "縋りたいような、いじらしく切ない気持ちである",
"anxious": "不安で落ち着かない気持ちである",
"crying": "悲しくて泣きたい気持ちである",
"shocked": "驚愕し、衝撃を受けている気持ちである",
"angry": "腹立たしく、怒っている気持ちである"
}
},
"intimacyChange": {
"type": "score",
"instructions": "親密度の変化",
"criteria": [
"急降下",
"下降",
"少し下降",
"そのまま",
"少し上昇",
"上昇",
"急上昇"
]
},
"yesNo": {
"type": "noul",
"instructions": "疲れちゃった?"
}
}
また、Jevには現状の状態(LLMで言うコンテキスト)を渡すこともできるため、以下を指定しています。
- 現在の親密度
- ユーザーのメッセージ/質問
- 直前の感情
{
"intimacy": 2,
"message": "疲れちゃった?",
"previousEmotion": "5分前の感情: 愛おしさで胸がいっぱいな気持ちである"
}
ちなみに、previousEmotion を「5分前の感情」としているのは、この記述がないと結果の感情が previousEmotion と同じものになってしまい感情を変化させられなかったためです。
(おそらくstateの内容がそのままquestionに反映されてしまった)
上記の質問の結果がレスポンスで返ってくるので、この内容でUIの
- 表情
- yes/no questionの場合は首を縦に振る/横に振る
- 好感度
を更新します。
UIでは使用しませんでしたが、それぞれの選択肢の確率、どれだけ自信を持って選択できたか(confidence)も記載されています。
{
"model": "jev-1.13.0",
"answers": {
"emotion": {
"type": "choice",
"choice": "loving",
"confidence": 0.33,
"probabilities": {
"pleased": 0.0,
"silly": 0.0,
"happy": 0.0,
"anxious": 0.21,
"annoyed": 0.02,
"crying": 0.01,
"loving": 0.39,
"angry": 0.0,
"pleading": 0.03,
"neutral": 0.17,
"shocked": 0.0,
"thinking": 0.17,
"laughing": 0.0
}
},
"intimacyChange": {
"type": "score",
"score": 1.08,
"confidence": 0.37,
"legend": {
"0": "急降下",
"1": "下降",
"2": "少し下降",
"3": "そのまま",
"4": "少し上昇",
"5": "上昇",
"6": "急上昇"
},
"probabilities": {
"0": 0.55,
"1": 0.14,
"2": 0.1,
"3": 0.15,
"4": 0.02,
"5": 0.02,
"6": 0.02
}
},
"yesNo": {
"type": "noul",
"noul": 0.64
}
},
"usage": {
"input_tokens": 829,
"output_tokens": 158
}
}
おわりに
以上、Jevと話せるアプリの紹介でした。みなさんもJevと心を通わせてみてはいかがでしょうか?
Jevとの会話記録を技術記事にしたんだけど、役に立つと思う?
-
構成に関する注意:JevのAPIリクエストのためにViteプロキシでバックエンドを用意し、そこからリクエストしています(セキュリティ保護のため、CORS許可がなくフロントエンドから直接APIリクエストできないようになっている)。ローカル実行なのでこの構成にしましたが、もし公開する場合はちゃんとバックエンドを実装する必要があります。 ↩








