Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
チャットボットのススメ
Search
Kazuhiro NISHIYAMA
September 15, 2019
Programming
400
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
チャットボットのススメ
[Osaka RubyKaigi 02](
http://regional.rubykaigi.org/osaka02/
) での発表資料です。
Kazuhiro NISHIYAMA
September 15, 2019
More Decks by Kazuhiro NISHIYAMA
See All by Kazuhiro NISHIYAMA
Rubyの配布パッケージの変遷
znz
0
31
Headscale + Tailscale に移行中
znz
0
72
Ruby on Rails と私
znz
0
79
riscv64.rubyci.org internal
znz
0
59
Rubyの日本語リファレンスマニュアルの現在と未来
znz
0
120
devise-two-factorを4.xから5.xに上げた話
znz
0
430
docs.ruby-lang.org/ja/ の生成方法を変えた
znz
0
120
Ubuntuのriscv64版をqemuで動かした
znz
0
150
lilo.linux.or.jpをbusterからbullseyeに上げた
znz
0
150
Other Decks in Programming
See All in Programming
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
520
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
120
Performance Engineering for Everyone
elenatanasoiu
0
270
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
5.9k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
490
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
140
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
1
290
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
250
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
170
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.9M
Exploring anti-patterns in Rails
aemeredith
3
440
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
YesSQL, Process and Tooling at Scale
rocio
174
15k
Writing Fast Ruby
sferik
630
63k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
830
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Bash Introduction
62gerente
615
220k
Paper Plane
katiecoart
PRO
2
52k
GitHub's CSS Performance
jonrohan
1033
470k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
63
55k
Transcript
チャットボットのススメ Kazuhiro NISHIYAMA Osaka RubyKaigi 02 #osrk02 2019/09/15 株式会社Ruby開発 Powered
by Rabbit 2.2.1
自己紹介 西山 和広 Ruby のコミッター twitter, github など: @znz 株式会社Ruby開発
www.ruby-dev.jp 1/28
Agenda チャットとは チャットボットとは なぜおすすめなのか 色々なボット例 人工無脳の話 ボット作成時の注意 2/28
チャットとは? 主にテキストで リアルタイムに 会話(chat)するシステム 3/28
使ってきたチャットシステム NIFTY-Serve の RT → RT を含むサービス終了 (@nifty 自体は存 続)
IRC → 今も利用 Slack → 今のメイン Idobata, Gitter, Discord, … → たまに 利用 4/28
チャットボットとは? 誰かの発言に対して反応して発言 時間や通知など他のトリガーで自動発言 システムによって使えるトリガーは違う RT は入退室で挨拶するボットが可能だった IRC は入室の挨拶は可能だが退室前は不可 能 Slack
は使われ方が違うので挨拶ボットは 困難 5/28
なぜおすすめなのか? (1/3) プログラムの基本は入力を受けて出力を 返す 出力がないと 計算だけしてもできているのかどうかわか らない 入力がないと 同じことしかできない (そういう用途も多
い) 6/28
なぜおすすめなのか? (2/3) チャットボットはテキスト入出力で単純 昔ながらのチャットシステム (IRC など) だと行ごとの入出力でさらに単純 テストもしやすい 標準入出力で試せるようにするのも簡単 7/28
なぜおすすめなのか? (3/3) 複数対応するといろんな経験を積める 本質的な部分とシステム依存の分離 システムによる機能差 システム依存だが便利な機能の実装 長期運用でシステム移行も経験可能 例: RT から
IRC への移行を経験 8/28
小ネタ系ボット例 ping → pong と返すだけ ボットの生存確認やユーザー側の接続確認 9/28
便利ボット例 URL → タイトル 文字コード, JavaScript, HTML 以外の対応 など、簡単そうに見えて実際やってみると大 変
g> 検索キーワード → Web 検索のトッ プ tenki> 大阪 → 天気予報 amedas> 大阪 → アメダスの最近の値10/28
反応例 g> OsakaRubyKaigi02 osrk02 - https://twitter.com/hashtag/osrk02 (and 3 hits) tenki>
大阪 tenki bot: 大阪府 大阪 の天気: 今日:晴時々曇(max:31), 明日:晴れ(min:24,max:35), 明後日:晴時々曇 - 近畿地方は、 北部や中部では高気圧に覆われておおむね晴れていますが、南部では 湿った空気の影響でおおむね曇り、雨の降っている所があります。 (2019-09-14T10:31:00+0900) - http://weather.livedoor.com/area/forecast/270000 amedas> 大阪 amedas: 2019年09月14日 大阪(オオサカ) 時刻:15時, 気温:31.6℃, 降水量:0.0mm, 風向:北東, 風速:3.8m/s, 日照時間:0.6h, 湿度:49%, 気圧:1008.9hPa http://www.jma.go.jp/jp/amedas_h/today-62078.html?groupCode=45&areaCode=000 amedas: 2019年09月14日 大阪(オオサカ) 最低気温(℃):22.7 at 05:53, 最高気温(℃):32.0 at 13:43, 最大瞬間風速(m/s)(風向(16方位)):9.1(東) at 01:14 11/28
時報ボット 「西暦2019(平成31/昭和94/大正108/明 治152/皇紀2679)年(己亥)09月(長月)14日 (土)08時00分28秒(インターネットタイム @000.3)です。」 過去の元号や干支や旧暦の月なども対応 Swatch のインターネットタイムも対応 (24 時間=1000ビート、タイムゾーンなしの世界
共通の時刻) 12/28
時報ボット 「西暦2019年(令和元年/平成31年/昭和 94年/大正108年/明治152年/皇紀2679年) (己亥)09月(長月) 13日(金) 18時00分00秒 (インターネットタイム@416.7)です。」 13日の金曜日は装飾 13/28
挨拶ボット 挨拶ボット IRC のように接続通知がないと難しい 「prefix+時間の挨拶+suffix > nick+敬 称」(秘蔵のランダムデータで生成) 14/28
挨拶ボット例 「次はおはようございますみゅ > NICK御 中」 「なんでもいいおはようございますする か? > NICK代表」 「積極的におはようがなんともうれしい
> NICKタン」 15/28
運用系ボット uptime : サーバーの uptime 確認 「| uptime」の出力を発言するだけ upgradable :
apt で upgradable に なっているパッケージ一覧 「apt list -qq -o APT::Cmd::use- format=true -o APT::Cmd::format=${Package}($ {installed:Version}->$ {candidate:Version}) -- upgradable」 16/28
人工無脳とは? 「人工無能」とも AI (人工知能) ほど高度なものではないと いうことから ここでは人間の発言に自動発言を返す ボット 17/28
人工無脳の種類 (1/3) 単純な部分文字列マッチ Slackbot のようにチャットシステム側に存 在することも 正規表現マッチ 個人運用しているものはこれ 18/28
人工無脳の種類 (2/3) 形態素解析を利用 人工無脳ししゃも (Sixamo) など 書籍「恋するプログラム―Rubyでつくる人 工無脳」の後半はこれ 19/28
人工無脳の種類 (3/3) ELIZA 人工無脳の起源, 英語のパターンマッチング 内容によってはかなり自然な会話ができるらし い 複数手法の組み合わせ 人工無能うずら (ソース非公開)
日本語の IRC (IRCnet) では多分一番有 名 20/28
人工無脳への攻撃対策 (1/2) 問題例: ReDoS (regular expression denial of service) 正規表現をユーザー登録可能な場合
不適切な語彙の学習 任意の言葉を登録可能な場合 21/28
人工無脳への攻撃対策 (2/2) 対応例 (クローズドなグループ向けを想定) 技術的な対応はあまりしない アカウントを ban するなどのソーシャルな対応 が楽 (ボットが無視するアカウントにするなど)
22/28
不適切な学習の問題 Tay というマイクロソフトの Twitter ボッ ト ユーザーによる不適切な学習によりヘイト スピーチなどをするようになったらしい (その後停止) 対処は難しそう
23/28
ボット作成時の注意 ボットとボットのループに注意 ボットの発言にボットが発言するとループの可 能性があって危険 IRC ではボットは NOTICE で発言して NOTICE には反応しないのが原則
大量発言に注意 アカウントが ban される可能性も 24/28
脆弱性にも注意 任意コード実行ボットはかなり難易度が高 い タイトル取得ボットは情報漏洩に注意 例えば localhost に制限しているもの “169.254.169.254” ? 25/28
発言量の問題 ほとんどの発言に反応 → 迷惑? 受け入れられていれば問題なし 以前からそういうものとして存在 新規ならボットとの会話用チャンネルに隔離? 26/28
単調にみえる反応 大量のパターンを用意しても… キーワード反応型 ユーザーの発言のバリエーションが少ない → 反応も単調 時間に依存するもの ユーザーが使う時間がほぼ同じ → 反応もほぼ同じ
27/28
最後に ping pong のような単純なものから始める のがオススメ Twitter のような公開の場所は攻撃される可 能性もあがるので Slack などのクローズド
な場所で始めるのがオススメ アイデア次第で簡単なものでも便利だった り面白くなったり 28/28 Powered by Rabbit 2.2.1