Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
チャットボットのススメ
Kazuhiro NISHIYAMA
September 15, 2019
Programming
0
130
チャットボットのススメ
[Osaka RubyKaigi 02](
http://regional.rubykaigi.org/osaka02/
) での発表資料です。
Kazuhiro NISHIYAMA
September 15, 2019
Tweet
Share
More Decks by Kazuhiro NISHIYAMA
See All by Kazuhiro NISHIYAMA
qemuのriscv64にDebianを入れてみた
znz
0
27
systemd 再入門
znz
0
120
Ruby 3.0.0 コネタ集
znz
0
100
livedoor天気API終了対応
znz
0
120
Wireguard 実践入門
znz
0
140
あまり知られていないRubyの便利機能
znz
0
140
workflow,job,step の使い分けの基準を考える
znz
0
110
Dockerのオフィシャルrubyイメージとは?
znz
0
36
Dokku の紹介
znz
0
120
Other Decks in Programming
See All in Programming
Jetpack Compose best practices 動画紹介 @GoogleI/O LT会
takakitojo
0
410
Modern Android Developer ~ 안내서
pluu
1
670
Gitlab CIでMRを自動生成する
forcia_dev_pr
0
120
heyにおけるCI/CDの現状と課題
fufuhu
3
570
設計の学び方:自分流のススメ
masuda220
PRO
10
7.6k
Independently together: better developer experience & App performance
bcinarli
0
190
Baseline Profilesでアプリのパフォーマンスを向上させる / Improve app performance with Baseline Profiles
numeroanddev
0
260
Reactは何を提供するLibraryなのか?
taro28
5
680
UI Testing of Jetpack Compose Apps, AppDevCon
alexzhukovich
0
180
社用PCのdotfiles管理 / dotfiles-in-company
yammerjp
0
240
AWS Config Custom Rule、ノーコードでできるかな?
watany
0
130
Java アプリとAWS の良い関係 - AWS でJava アプリを実行する一番簡単な方法教えます / AWS for Javarista
kanamasa
2
1.3k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
47
3.9k
Designing for Performance
lara
597
63k
Building a Scalable Design System with Sketch
lauravandoore
448
30k
Raft: Consensus for Rubyists
vanstee
126
5.5k
Bootstrapping a Software Product
garrettdimon
296
110k
Three Pipe Problems
jasonvnalue
89
8.7k
Rails Girls Zürich Keynote
gr2m
86
12k
How to Ace a Technical Interview
jacobian
265
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
19
1.4k
Designing for humans not robots
tammielis
241
23k
Why Our Code Smells
bkeepers
PRO
324
55k
Automating Front-end Workflow
addyosmani
1351
200k
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