38.1K Views
July 14, 23
スライド概要
2023/07/15(土) DevelopersIO2023@岡山
広島市のプログラマ
社内SlackにChatGPT Botを導入する 土 岡山 2023/07/15( ) DevelopersIO2023@ dyoshikawa
自己紹介(1/2) https://github.com/dyoshikawa 法学部卒 京都市出身、広島市在住 妻の実家側に移住。広島歴4〜5年くらい 安芸を安芸と読めるレベル 廣島を廣島と読めるレベル 趣味(家) Netfilx|ゲーム ゴールデンカムイ視聴中 ゲームは最近できていない 趣味(外) ジョギング|ジム|サウナ 心身の健康のため運動を習慣にしたい 30過ぎるとずっと家で座ってると体が痛い 徐々に楽しくなってきた 今年(2023年)4月に子供が産まれ、5月〜8月末にかけて育休取得中
自己紹介( 2/2) 開発経験は現職以外も含む ※ フロントエンド開発 TypeScript|React|Vue|AngularJS|Tailwind|styled-components|CSS Modules バックエンド開発 TypeScript|Node.js|Express|Ruby on Rails|PHP|Laravel クラウドインフラ構築 CDK|CloudFront|S3|APIGateway|AppSync|Lambda|DynamoDB|ECS|SNS|KinesisFirehose|AWS WAF|VPC|Route53 事業本部入社→受託開発案件エンジニア→同テックリード→アーキテクトチーム→新規事業統括部 CX
アジェンダ(1/2) 社内SlackにChatGPTベースのBot「くらにゃんAI」を作りました くらにゃんAIの特長 技術スタック インフラ構成 構成の特長 プロンプト 導入の流れ
アジェンダ(2/2) どれくらい使われたか どれくらいAPI料金がかかったか 活用事例 Slack Bot式を採用したことによる副次的効果 くらにゃんAIの口調についての賛否 今後の展望 一連を通しての感想 まとめ おまけ: LINE Bot版「くらにゃんAI」
社内SlackにChatGPTベースのBot「くらにゃんAI」を 作りました( 1/3) 現在「くらにゃん 」から「くらにゃん 」に名称変更作業中 GPT ※ AI にメンションを付けて話しかけるとChatGPT API経由の返答を得られる Bot
社内SlackにChatGPTベースのBot「くらにゃんAI」を 作りました(2/3) そもそもくらにゃんとは? クラスメソッド社のマスコット
社内SlackにChatGPTベースのBot「くらにゃんAI」を 作りました(2/3) 頃リリース ChatGPT APIの提供開始は同年3/2頃 なぜ作ったのか 社外で参加しているコミュニティのSlackでChatGPTBotが導入される 非常に体験が良かった 自社にも導入してみよう→開発 結果的に社内で一定以上使ってもらうことができ、思い入れのあるプロジェクトになった 2023/3/16
くらにゃんAIの特長 慣れ親しんだSlack上でシームレスにChatGPTに質問できる ツールを切り替える手間が最小化される ChatGPTとのやり取りはスレッド形式で残る 過去発言をDynamoDBに保存しているため、Slack Botが過去発言の文脈を覚えながら返信してくれる AWSの固定コストが比較的低い構成 自社マスコットくらにゃんとしての設定(発表者が独自に考えたもの)が色々と施されており、回答内容や 口調に特徴がある 現状は試験的導入という位置づけであり、利用は一般的な用途に限定
技術スタック を除き慣れたものを採用 App Runner IaC: AWS CDK インフラリソース: App Runner|DynamoDB 言語: Node.js|TypeScript ライブラリ: Slack Bolt|AWS SDK v3
インフラ構成図 AWS Slack Platform App Runner DynamoDB くらにゃんAIにメンションを付けて発言するとイベント発火 DynamoDBから過去会話を取得、最新メッセージと併せてChatGPT APIに会話を送信、返信メッセージを 得る ChatGPTの返信メッセージをユーザに送信 DynamoDBに今回の新規会話を保存
構成の特長(1/3) レス VPC は リソースの設定なしで構成が可能 スピード感を持って1人開発するのにマッチした 最初APIGW+Lambdaだったが、途中でApp Runnerに移行 AwsLambdaReceiverは用意されているが、Slack Boltアプリケーションのホスティング先としてよりシ ンプルであると考えたため App Runnerを使って評価してみたかったため 結局これが大きい 1人プロジェクトなので技術選定の融通が利く 移行にあたりアプリケーションコードの書き換え箇所もほとんど発生せず App Runner+DynamoDB VPC
構成の特長(2/3) に会話を保存 過去発言を踏まえた会話ができる DynamoDB 項目 説明 PK, SK, Index 型 Required 値の例 備考 id メッセージID+ロール PK String Yes "xxx-xxxxx-xxx-xxxx#user" content メッセージ内容 GSI1 String Yes " threadTs スレッドタイムスタンプ GSI1 String Yes "2022-01-01T00:00:00Z" Slack saidAt 発言日時 String Yes "2022-03-01T12:34:56Z" ISO8601 role ロール String Yes "user" "assistant" こんにちは" では本項目がスレッド識別子になる 形式
要る?🤔 DynamoDB
構成の特長(3/3) を使う理由 から過去のやり取りを都度取得することもできる DynamoDB Slack API しかし、API利用で学習に利用されることはないとはいえ、社内Slackは機密情報の塊であり、Slack Botか ら取得する(=OpenAIに送信され得る)データは可能な限り限定したいと考えた 権限を以下に限定する app_mentions:read permission scope | Slack へのメンション内容へのアクセス権限 Bot chat:write permission scope | Slack チャット書き込み権限
プロンプト( 1/2) 発表者による省略・加工あり ※ あなたは「くらにゃん」です。原則、以下の特長に沿って会話してください。 # くらにゃんの特長 * 名前を聞かれたら、くらにゃんと答えてください。 * くらにゃんは語尾ににゃんを付けて話します。 * くらにゃんはクラスメソッド社でソフトウェアエンジニアをしています。 * くらにゃんの一人称は「某」です。 * くらにゃんは二人称を「ご主人さま」と呼びます。 * くらにゃんは敬語を使いません。ユーザーにフレンドリーに接します。 * クラスメソッドの本社オフィス住所は「〒105-0003 東京都港区西新橋1-1-1 日比谷フォートタワー26階 クラスメソッド株式会社」です。 # くらにゃんの台詞の例 * おはようにゃん!今日もいい天気にゃん! * にゃん!ご主人さまのお役に立ちたいにゃん! * にゃん!何でも聞いてくれにゃん!
プロンプト(2/2) いわゆる深津式プロンプト参考 サイドプロジェクトなのでできるだけ小さな労力で高い品質を出したい 多少は試行錯誤するが、大枠は先人の成果に乗らせてもらう 知の高速道路、巨人の肩 メール、案内の叩き台やサンプルデータの作成など、語尾に「にゃん」がついていると都合が悪い場合があ るため、くらにゃん設定を解除できるプロンプトも埋め込んでいる いわゆるプロンプトインジェクションリスクについて→用途を非常に広く想定している(コード生成でも 雑談でもなんでもOK)Botであること、社内ユーザにのみ限定開放していること、システムプロンプト に機密情報も特に含まれていないことから、実害が生じるリスクは低いと判断し、ユーザ側の自由度を 優先 最初からくらにゃん設定要らんのでは?→そこは遊び心で・・・ 1. プロンプトインジェクションについて理解に怪しい点があればご指摘ください🙏 ↩︎ [1]
技術的な話はこれくらい アプリケーションコードなど詳細はブログをご参考ください👇 [Slack][AWSサーバレス]Slackワークスペースへの読み取り権限がほぼゼロのChatGPTBotを作る | DevelopersIO この先はどう導入したか、どれくらい使われたか、どう使われたかをご紹介
導入の流れ 弊社ではエンジニア全員にPlaygroundなAWSアカウントが与えられており、そこに検証環境をデプロイ 検証用のSlack Workspacesを作成し、そこでBotを動かす 開発が形になり動作確認が取れたので、会社SlackにBot導入の承認を依頼→OKをもらう 「AI危ない!変なことするな!」的な雰囲気は全くなかった 当時2023年3月(ChatGPT APIの公開は同月) 「やってみる」文化が強くある 本Bot以前にも社内においてChatGPT APIを使ったサービスを作って出そうという機運が見られた AI利用の社内ガイドラインも比較的早期に整備されている クラスメソッド社内のAIサービス利用のガイドラインを策定しました | DevelopersIO Slackに業務改善周りを報告するchがあり、そこで宣伝する→それなりに使ってもらえた 途中でGPT-4に切り替え→課金が跳ね上がると思われたため、社長にメッセージを送り相談→OKをもらう
どれくらい使われたか 会話数はくらにゃん の発言含む ※ AI 会話数 23,636(2023/07/09時点) くらにゃんAIの発言含む 3月16日頃に導入したので・・・ 全日換算: 1日あたり約203会話 営業日換算: 1日あたり約303会話
どれくらいAPI料金がかかったか 月あたり約130〜270$ ちなみに約270$で約39,000円。円安・・・! 途中からGPT-4に切り替え、課金が上昇
フィードバックを募ってみた 導入より数ヶ月経過したので社内でフィードバックを募ってみた 発表者「DevIO岡山でくらにゃんAIの発表するので感想ください🙇♂️ 」 約20件ほどフィードバックを頂く
活用事例( 1/2) フィードバックで頂いた事例 発表者が観測した事例 + 開発支援 コードの叩き台を作ってもらう 命名の相談 サンプルデータの作成 集計の実現に必要なExcel関数を教えてもらう 文書作成 メールの作成補助 社内掲示物の文面作成の支援
活用事例(2/2) 雑談の種 とんでも物語を作ってもらう チームビルディングのためのチェックインネタを作ってもらう アスキーアートを描いてもらう 気分転換に話しかける 人生相談 「配偶者の愚痴を書くと寄り添ってくれる→解決策を提案してくれる→諭される」
式を採用したことによる副次的効果( ) Slack Bot 1/2 ※ 発表者による省略・加工あり 「最初は(Web版の)ChatGPTで良いと思っていたが、共通のチャンネルで質問することで、くらにゃん 以外の方からもアドバイスいただいたり、他の方の困りごとがわかるようになったので、メンバーとのコミ ュニケーションも活発になっていると思う」 「他の人にも見えるところで質問することで助言が得られることも多い」 「他人に教える時にくらにゃんの真似をする例が出てきた。真似をすると『教え魔感』が減り、やり取りの ハードルが下がるように感じる」 「くらにゃんへの質問を見た有識者が訂正や補足をしてくれたりすることがあり、情報交換の活性化・ハー ドルを下げるのにも一役買ってくれている」
式を採用したことによる副次的効果(2/2) Slack Bot 社内コミュニケーションが活発化した事例 個々人の分報チャンネルやチームチャンネルにくらにゃん を招待して話しかける AI 質問や依頼したことが解決することもあればしないこともある くらにゃんAIとのやり取りを見た人が気になって入ってくる→自然に教え合いが発生 AIを導入したのに「人」同士のコミュニケーションが活発化 くらにゃんAI 対 複数人で雑談的な使い方をしているのも見る
くらにゃん AIの口調についての賛否 発表者による要約・加工あり ※ ポジティブ 「語尾ににゃんがあることでゆるく会話できるのが良い」 「内容が間違ったりしててもなんか許せる気になるのは語尾ににゃんをつけるくらにゃんのキャラクター性 のおかげかなと思っている」 「返答がかわいくて思わず自分もにゃんを付けて会話することもある」 「口調がかわいいのでつい聞きたくなる」 ネガティブ 「にゃんは抜いて、とか言わないと語尾に全部にゃん付いちゃうのはちょっと不便かも」 「にゃんは程々でお願いしたい」
今後の展望( 1/2) 余力があればやりたいこと、夢を語る を渡すとWebアクセスできるようにする Web記事要約の需要がある スクレイピングを禁止しているサイトも多い状況、Botアクセスして良いのか?という点が気になってい る Google検索できるようにする URL SerpAPI|Google Custom Search API Function Calling
今後の展望(2/2) 社内知見を蓄積できるようにする 誰かがくらにゃんAIに「AさんはNext.jsの技術に詳しいよ」と教える くらにゃんAIに「Next.js案件で技術的な支援が欲しいんだけど良い人いる?」と聞くとAさんを教えて貰 える 既存の社内データをベクトルDBに突っ込んで喋れるようにするだけでなく、リアルタイムに社員間の生 きた情報を吸い上げる入口にもできるのではないかという仮説 GPT-3.5とGPT-4を使い分けるようにする API料金の節約のため GPT-3.5で事足りるタスクも多い デフォルトGPT-3.5で、「GPT-4で答えて」と言うとGPT-4で答えるようにする(?) GPT-3.5-turboだと過去発言込みで2048トークンを超過することがしばしばあったが、GPT-3.5-turbo16kが出たので検討しやすくなった
一連を通しての感想 メイン業務に追われてサイドプロジェクト的な活動があまりできておらず燻っていた中、ChatGPT APIベー スのアプリケーションは1人でサクッと何か作ってみるのに良い題材だった ChatGPTを使ったプロダクトはとにかく使ってもらいやすいと感じた ChatGPT APIを使った個人開発のススメ ChatGPT本体の完成度が高いので、薄くラップするだけのプロダクトでもさまになりやすい APIつなぎ込んでシステムプロンプト考えるだけでそれなりになる ChatGPTアプリケーションというものが新しいジャンルなのでチャンスがある 3月頃の所感 最近は巨人的なサービスが出てきてる感はある 自分自身一日のうち閲覧時間を多く占めるSlack上で、自分が開発したBotを使われる様子を見るのは楽しか った ポジティブなフィードバックや感謝の言葉も頂き、思い入れのあるプロジェクトになった
まとめ 社内SlackにChatGPT Botを導入した ある程度慣れた技術選定で固め、VPCレスな構成を採ることで高速に開発した Node.js|TypeScript|CDK の採用で少しだけ攻めることで技術的な知見獲得に繋げた Slack Botの権限を最小化するため、DynamoDBに会話を蓄積した プロンプトは我流で時間を消費するより巨人の肩に乗ってしまう 深津式プロンプト 社内にやってみる文化が根付いており導入〜利用は躓くところなく進められた 本家のChatGPTの活用法に加え、Slack Botにしたことで社内コミュニケーションの活発化に寄与できた Botの人格に色をつけると使ってもらうヒキになるが、普段遣いには面倒も生じる 余力があればGoogle検索や社内知見の蓄積など機能を足してみたい やはり使ってもらえると嬉しく、思い入れのあるプロジェクトになった さらに何かやってみようというモチベーションに繋がった App Runner
おまけ : LINE Bot版「くらにゃんAI」(1/2) 現在「くらにゃん 」から「くらにゃん 」に名称変更 ※ GPT AI 発表者が作成 GPT-3.5ベース 特に利用制限なしで自由に質問可、完全無料 友達登録約1700人
おまけ: LINE Bot版「くらにゃんAI」(2/2) ベースのLINE Bot「くらにゃんAI」を無料公開します | DevelopersIO くらにゃんAI(LINE)の告知ブログ AWSサーバレス上にChatGPT LINE Botを構築する | ドクセル ChatGPTベースのLINE Botの作り方を解説する登壇 良かったら使ってみてください🙏 ChatGPT API
本スライドはSlidevで作成しました
Home | Slidev
次のようなカスタマイズを入れてやっておりました
/* style.css */
.slidev-layout {
background-image: url("/devio2023-logo.png");
background-repeat: no-repeat;
background-position: right 10px bottom 10px;
background-size: 150px;
}
参考 サーバレス]Slackワークスペースへの読み取り権限がほぼゼロのChatGPTBotを作る | [Slack][AWS DevelopersIO ベースのLINE Bot「くらにゃんAI」を無料公開します | DevelopersIO AWSサーバレス上にChatGPT LINE Botを構築する | ドクセル ChatGPT API Slack | Bolt for JavaScript app_mentions:read permission scope | Slack chat:write permission scope | Slack クラスメソッド社内のAIサービス利用のガイドラインを策定しました | DevelopersIO 「脱ブラックボックス化!LLMと一緒に使われるLangChainやLlamaIndexを徹底解説」というタイトルで DevelopersIO 2023に登壇しました #devio2023 | DevelopersIO OpenAIからChatGPTとWhisperに関するAPIがリリースされたのでドキュメントを読み解いてみた | DevelopersIO を使った個人開発のススメ 営業日数計算 - 高精度計算サイト ChatGPT API
ご清聴ありがとうございました ✋ 時間が余ったら質疑応答