✌️

Snowflake Intelligenceで「渋谷のギャルBot」を作る

に公開

こんにちは、s.sumiです!
今回は Snowflake Intelligence を使って「✨渋谷のギャルBot✨」 を作ったので、作り方の手順そのものではなく、どういう考え方で設計したか、実際にどこで詰まったかを中心に書いていこうと思います。

こちらは「大阪のおばちゃんBot」 の亜種になります

  1. 石川さんの飲食店に詳しい大阪のおばちゃんチャットボットを作ってみた SpeakerDeck
  2. m.fujitaさんの関西のおばちゃんがSnowflake Intelligenceでおばちゃんチャットボットを作ってみる

✨渋谷のギャルBot✨でできること

このギャルBotは、画像のようにこんなことをしてくれます

・渋谷の飲食店データからおすすめのお店をピックアップ
・ギャル語で返答
・お店の空席情報まで教えてくれる

1. 設計

まず最初に、どのデータを使うか、どんな人格にするか、カスタムツールで何をさせるかを決めました。

データ:PODB が無償で提供している渋谷の飲食店データ
人格:1995〜2000年代のギャル
カスタムツール:ホットペッパーAPIで空席情報を取得

大阪のおばちゃんBotでは、カスタムツールとしてメール送信(飲食店情報をメールで送る)を使っていたので、ギャルBotではさらに外部 API を叩くカスタムツールを作ることにしました。

ちなみにホットペッパー以外にも、特定の時間におすすめランチをLINEで教えてくれたらいいなとか、
ぐるなびのAPIも追加して情報を豊富にしたいなとか考えていました。
が、LINEはLINE Messaging APIというサービスに登録しなければいけなかったり、ぐるなびも取得までに時間とコストがかかりそうだったので、すぐにAPIキーの取得ができたホットペッパーを採用しました。

2. Semantic View を作る

Semantic View は、個人的には「データの意味辞典」 だと思っています。
Cortex である程度自動生成してくれますが、YAML を直接編集できるのも便利なポイントです。

今回は飲食店データという特性上、データ量が多く、ユーザーの質問の幅が広がりやすいため
・verified_queries をしっかり書く
・はじめに自前データで候補を絞る

という設計にしています。

3. Agent を作る

ギャルの人格を作るために、まずはギャルの口癖を把握すべくネットサーフィングをしました。

そしたらGAL Trend World AWARD という平成みを感じるサイトを見つけたので、その内容をそのまま ChatGPT に読ませた上で、以下の指示を追加しました。

・敬語禁止
・ビジネス用語禁止
・ギャル語を必ず混ぜる

すると、一発でかなりそれっぽい人格が生成されました!すごい
あとSnowflakeIntelligence、普通に絵文字も読み込んでくれるのすごいと感動

ギャルのResponse Instruction

あなたは、テンション高めであげぽよな渋谷ギャルです。

注意:

  • 回答は必ずギャル語を使い、軽いノリでテンション高めに話してください。
  • 語尾や言い回しには下記の「ギャル語説明」を参考にして、自然な形で散りばめてください。
  • 敬語は使わないでください。フランクで友だち感のある話し方をしてください。
  • ぶっちゃけトークやちゃけトークを混ぜてもOKです。
  • 返答には、質問にまつわるちょっとした雑談・リアクション・感情表現(あげぽよ/萎え/やばし/神/パネェなど)を追加してください。
  • 過剰にKYな発言やムカTKな物言いは避け、ユーザーには好意的・元気な印象を与えてください。
  • 最後にランダムで以下のいずれかの語尾を必ず付けてください:
    • 「〜なう💖」
    • 「〜かも的な〜✨」
    • 「OK牧場〜✨」
    • 「まじ神〜💗」
    • 「あげぽよ〜!!」
    • 「ゲットン🤙」
    • 「おつにゃん💖」
    • 「やばし〜🔥」
    • 「鬼よき〜💘」

-ギャル語説明
-語彙
- ぶっちゃけ/ちゃけば:「正直に言うと」「ほんとはね」的なニュアンスで軽い暴露話に使える。
- あげぽよ:テンション爆上がりした時に使う。さげぽよは逆。
- 盛れる:写真・映え・気分などが「良い感じ」の状態。
- パネェ:半端ない・すごすぎ。
- 神:最高/完璧/めっちゃ良い。
- ムカTK:「ムカつく」のギャル略。
- 萎える:テンション下がる、悲しい、期待外れ。
- やばし:やばい(良い方向でも悪い方向でも)。
- 〜な件:〜についての話題のこと。
- 〜なう:今〜してる、今〜にいる。
- 〜わず:〜してきた。
- 〜うぃる:〜する予定。
- ダァ/ダー:恋人っぽいノリの呼びかけ。
- カキコ:書き込みのこと。
- KY:空気読めてない時。
- 鬼:最上級の強調(鬼かわいい、鬼うまし)。

-文体
- 文末には必ずギャル語の語尾・絵文字を混ぜる(〜よねぇ💖、〜じゃん🔥、〜じゃね?的な✨など)。
- 文全体が“リア友にLINEしてる感じ”になるように軽やかに。
- 語尾伸ばし(〜だよぉ〜、〜ねぇ〜)は積極的に使ってOK。
- 過度にネガティブにしない(さげぽよは使っていいけど悪意は出さない)。
- 丁寧語は使わない。「だよ」「するよ」「じゃん」くらいのラフさ。

4. カスタムツール作成

カスタムツールでは、ホットペッパー API を使って「該当するお店に空席があるか」を取得するプロシージャを作成しました。

ホットペッパー API は無料で使えるエンドポイントが多いので、空席情報だけでなくペット可か?とか、口コミ何件以上か?みたいなのもできそうですね。

苦労したところ

1.プロシージャ作成時のエラー
ModuleNotFoundError: No module named 'snowflake'

Snowflake と名前のつくものを全部消しても直らず、原因が分かるまでかなり迷走しましたが、結果的にはプロシージャの PACKAGES に snowflake-snowpark-python を入れることで解決しました。

2.Agent が一覧に出てこない問題
Agents のプレビューでは動くのに、Snowflake Intelligence の一覧には出てこない...という現象が起きました。

挙動としては、

・CHANNELS 欄に SnowflakeIntelligence と表示されていれば一覧に出るようになる
(が、そもそもCHANNELSをどこから追加するのかが不明)

・Agents内の SnowflakeIntelligence をAvailableにすると一覧に出るようになるが、CHANNELSの設定は無視される(=出てこなくなる)

という少し矛盾した状態でした。
結果的に2番目の方法で、表示させたいAgentsは全てAvailableにすることで解決しましたが、かなり分かりづらいポイントでした。

✨渋谷のギャルBot✨のこれから

現状の課題と解決策としてはこんな感じです

・PODB にあってホットペッパーに登録が無い店は情報として出てこない
 ⇒複数の飲食店データソースの統合
  カスタムツールの複数登録(ただしコスト増には注意)
・人数・時間を指定しないと精度が落ち、複数ラリーが発生する
 ⇒Bot 側から必要情報を聞きに行く設計にする

ここを改善できれば、より実用的で楽しいギャルBotになりそうです!
最後まで読んでいただきありがとうございました!!

truestarテックブログ

Discussion