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
42
Headscale + Tailscale に移行中
znz
0
82
Ruby on Rails と私
znz
0
86
riscv64.rubyci.org internal
znz
0
65
Rubyの日本語リファレンスマニュアルの現在と未来
znz
0
120
devise-two-factorを4.xから5.xに上げた話
znz
0
440
docs.ruby-lang.org/ja/ の生成方法を変えた
znz
0
120
Ubuntuのriscv64版をqemuで動かした
znz
0
150
lilo.linux.or.jpをbusterからbullseyeに上げた
znz
0
160
Other Decks in Programming
See All in Programming
FDEが実現するAI駆動経営の現在地
gonta
2
290
30年振りにコンパイラの定数整数除算を改善した
herumi
9
3.9k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
590
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
VibeCodingからAgenticWorkflowへ
starfish719
0
760
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
メールのエイリアス機能を履き違えない
isshinfunada
0
250
初めての模倣学習とVLA
natsutan
0
170
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
370
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
ラッコキーワード サービス紹介資料
rakko
1
4.5M
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Spectacular Lies of Maps
axbom
PRO
1
940
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
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