• 検索結果がありません。

金岡プロジェクトテーマ

N/A
N/A
Protected

Academic year: 2021

シェア "金岡プロジェクトテーマ"

Copied!
62
0
0

読み込み中.... (全文を見る)

全文

(1)

プロジェクト(金岡グループ)

第 2 回

2017414日 金岡 晃

(2)

金岡プロジェクトテーマ

配布資料より

テーマC 独自チャットボット作成

コミュニケーションツールSlack上で動き回るチャットボットシステムを 作成する。シェルスクリプトやJavaScriptなどのスクリプト言語と、外 部APIやデータセットの活用により、チームごとに特色のあるチャット ボットの実現を試みる。

技術要素

なんらかの言語を使ったプログラミング 外部リソースの活用

HTTPによるアクセス

2017/4/14 プロジェクト

1

(3)

Slack とは

Slack(スラック)

コミュニケーションツール。グループでのチャットを中心として、ユー ザ間のダイレクトメッセージやトピックごとのチャットなどが可能な Webサービス

https://slack.com/

類似・近いサービス?

2017/4/14 プロジェクト

2

(4)

スケジュール

内容

1回(47日) プロジェクトの概要説明、基礎知識の学習(1)

2回(414日) 基礎知識の学習(2)、Botデザイン 第3回(421日) Botデザインまとめ、発表

4回(428日) 開発(1)

5回(512日) 開発(2)

6回(519日) 開発(3)

7回(526日) 成果発表会

2017/4/14 プロジェクト

3

(5)

チャットボット

2017/4/14 プロジェクト

4

ボット

チャット上でユーザとして参加してくるボット(プ ログラム)を作ることができる

プログラムのこと。特に人間に代わって作業を行うものを指すことが 多い。マルウェアの用語としての一面も持つ。

SiriやContanaもボットの一種

(6)

簡単なボットならすぐできる

2017/4/14 プロジェクト

5

Slackbotへの登録

(7)

簡単なボットならすぐできる

2017/4/14 プロジェクト

6

(8)

本格的にボットを作る前に

2017/4/14 プロジェクト

7

(9)

ボットプログラム実行用の環境

金岡研究室内のサーバを利用

各種環境での実行が可能なようにしてある

グループごとにアカウントを作成してあります

グループでアカウントを共有してください

初期パスワードを配ります

パスワードは変更してください

• ssh

でアクセス

– TeraTerm

を使う

コマンドの実行などはこれで

• scp

でアクセス

– WinSCP

を使う

ローカル(実習室で使っている

PC

や自宅

PC

など)で作ったファ イルをサーバに送る

2017/4/14 プロジェクト

8

(10)

サーバ用アカウント命名規則

2017/4/14 プロジェクト

9

g 2 0 1 7 1 1

年度

学期

1

:春学期前半

2

:春学期後半

3

:秋学期前半

4

:秋学期後半

グループ番号

(11)

チーム編成とアカウント名

学番 氏名

5515037 國上 寛規 5515051 坂井 大騎 5516076 中山 晃希 5516084 羽田 大弥

学番 氏名

5515038 倉本 奈々 5515045 古山 祐輝 5516062 高山 裕介 5516065 田中 亜実

学番 氏名

5515026 柏木 伸夫 5515041 桑名 健史 5516066 田辺 瑞貴 5516088 陳 沢広

学番 氏名

5515027 加瀬 貴士 5515055 佐藤 誠人 5516061 高安 真由 5516068 寉岡 昂佑 5516074 中田 美花

学番 氏名

5515025 笠原 康平 5515044 古山 貴大 5516071 戸沢 元紀 5516072 富山 麟太郎 5516077 中山 道裕

学番 氏名

5515035 北爪 みづほ 5515054 佐藤 弘毅 5516069 戸井 成美 5516070 都倉 5516078 長岡 亜理沙

学番 氏名

5515028 片岡 敬済 5515036 工藤 慶明 5516060 高松 晃希 5516079 長沼 慶弥 5516080 鍋谷 グループ1 グループ3 グループ5 グループ7

グループ2 グループ4 グループ6

2017/4/7 プロジェクト

10

g201711

g201712

g201713

g201714

g201715 g201717

g201716

(12)

アクセスしてみよう

2017/4/14 プロジェクト

11

avocado.klab.is.sci.toho-u.ac.jp

teratermWinSCPの両方で

(13)

TereTerm

2017/4/14 プロジェクト

12

(14)

TereTerm

2017/4/14 プロジェクト

13

(15)

TereTerm

2017/4/14 プロジェクト

14

(16)

WinSCP

2017/4/14 プロジェクト

15

(17)

WinSCP

2017/4/14 プロジェクト

16

左側が自分のマシン 右側がサーバ

(18)

本格的にボットを作る

2017/4/14 プロジェクト

17

(19)

ボットの開発

2017/4/14 プロジェクト

18

JavaScript

による開発

Botkitフレームワークの利用

Python

による開発

slackbotライブラリの利用

CoffeeScript

による開発

Hubotフレームワークの利用

Java

による開発

JBotフレームワークの利用

(20)

共通する事項

2017/4/14 プロジェクト

19

slack

への登録

slackにBotを登録し、APIトークンを取得する

複数のBotを作る場合、複数のAPIトークンを取得する

(21)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

20

このマークをクリック

(22)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

21

(23)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

22

Apps & integrations”を クリック

(24)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

23

Manage”をクリック

(25)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

24

Custom Integrations”を クリック

(26)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

25

Bots”をクリック

(27)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

26

Bots”をクリック

(28)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

27

Add Configuration”を クリック

(29)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

28

Bots”をクリック

ここで「Bots」が出ない人は https://my.slack.com/services/new/bot

をクリック

(30)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

29

Slackチーム内で表示さ

れるユーザ名

(31)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

30

Add bot integration”を クリック

(32)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

31

(33)

ボットの登録、 API トークンの取得

2017/4/7 プロジェクト

32

これがAPIトークン。

これを別のファイル(テキ ストなど)に保管しておく。

(34)

JavaScript による開発

2017/4/14 プロジェクト

33

Botkit

フレームワーク

ボットが実行されるフォルダの設定を行う

teratermによるサーバ上の作業)

実施コマンド

mkdir <フォルダ名>

cd <フォルダ名>

npm init

npm install botkit --save

mkdirでフォルダを新規

に作成して、cdでその フォルダに移動

botkitを使うための初期化

(35)

JavaScript による開発

2017/4/14 プロジェクト

34

Botkit

フレームワーク

ボット本体の作成

(ローカル<実習室PC、自宅PC>での作業)

ファイル名はかならず”index.js”とすること

JavaScript言語

(36)

JavaScript による開発

2017/4/14 プロジェクト

35

Botkit

フレームワーク

ボット本体のサーバへのアップロード

(ローカル<実習室PC、自宅PC>での作業)

WinSCPを立ち上げてサーバ(avocado)に接続

さきほど作成したフォルダにindex.jsをアップロード

(37)

JavaScript による開発

2017/4/14 プロジェクト

36

Botkit

フレームワーク

ボットの実行

teratermによるサーバ上の作業)

実施コマンド

token=<APIトークン> node index.js

(38)

JavaScript による開発:簡単な例

2017/4/14 プロジェクト

37

ボットが実行されるフォルダの設定を行う

teratermによるサーバ上の作業)

実施コマンド

mkdir testbot01

cd testbot01

npm init

npm install botkit --save

(39)

JavaScript による開発:簡単な例

2017/4/14 プロジェクト

38

ボット本体の作成(ローカル<実習室PC、自宅PC>での作業)

const Botkit = require('botkit');

if (!process.env.token) {

console.log('Error: Specify token in environment');

process.exit(1);

}

const controller = Botkit.slackbot({

debug: false });

controller.spawn({

token: process.env.token }).startRTM(function(err){

if (err) {

throw new Error(err);

} });

// say hi

controller.hears('hi',['direct_message','direct_mention','mention'],function(bot,message) { bot.reply(message,'hi');

});

(40)

JavaScript による開発:簡単な例

2017/4/14 プロジェクト

39

ボット本体の作成(ローカル<実習室PC、自宅PC>での作業)

const Botkit = require('botkit');

if (!process.env.token) {

console.log('Error: Specify token in environment');

process.exit(1);

}

const controller = Botkit.slackbot({

debug: false });

controller.spawn({

token: process.env.token }).startRTM(function(err){

if (err) {

throw new Error(err);

} });

// say hi

controller.hears('hi',['direct_message','direct_mention','mention'],function(bot,message) {

bot.reply(message,'hi');

});

DMや言及(@ユーザ名 を付けてつぶや く)したときに、そのつぶやきが

hi」だったら、「hi」と返す

(41)

JavaScript による開発:簡単な例

2017/4/14 プロジェクト

40

Botkit

フレームワーク

ボットの実行

teratermによるサーバ上の作業)

実施コマンド

token=xoxb-169493700566-7ev2Ze5xZJPeqHe0GbevIUJ6 node index.js

(42)

JavaScript による開発:簡単な例

2017/4/14 プロジェクト

41

(43)

JavaScript による開発:軽い応用

2017/4/14 プロジェクト

42

何か

Bot

あてにつぶやかれたら、登録してある複数の文言から ランダムに選択して返信する

やること

複数文言を登録してあるテキストファイル(1行に1文言)

を用意

テキストファイルの行数を読み込み、何行目を呼び出すか をランダムに決める

決められた行の文言をメッセージとして返す

(44)

JavaScript による開発:軽い応用

2017/4/14 プロジェクト

43

const Botkit = require('botkit');

if (!process.env.token) {

console.log('Error: Specify token in environment');

process.exit(1);

}

const controller = Botkit.slackbot({

debug: false });

controller.spawn({

token: process.env.token }).startRTM(function(err){

if (err) {

throw new Error(err);

} });

index.js(前半)

さっきのと同じ

(45)

JavaScript による開発:軽い応用

2017/4/14 プロジェクト

44

// say hi

controller.hears('',['direct_message','direct_mention','mention'],function(bot,mess age) {

var fs = require('fs');

var contents = fs.readFileSync('comments.txt');

var lines = contents.toString().split('¥n').length -1;

var num = Math.floor(Math.random()*lines);

var dat = '';

var lnum = 0;

fs.readFileSync('comments.txt').toString().split('¥n').forEach(function (line){

if(lnum==num)dat=line;

lnum++;

});

bot.reply(message,dat);

});

index.js(後半)

どのメッセージでも反応する

文言ファイル

comments.txt)を開く 行数をカウント

レスする文言をランダムに 選ぶ

その行をレスする

(46)

2017/4/14 プロジェクト 45

(47)

Python による開発

2017/4/14 プロジェクト

46

slackbot

ライブラリ

ボットが実行されるフォルダの設定を行う

teratermによるサーバ上の作業)

実施コマンド

mkdir <フォルダ名>

cd <フォルダ名>

touch slackbot_settings.py

touch run.py

mkdir plugins

touch plugins/__init__.py botkitを使うための初期化

(48)

Python による開発

2017/4/14 プロジェクト

47

slackbot

ライブラリ

slackbot_settings.pyの編集

API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

default_reply = “I could not understand that...“

PLUGINS = [

‘plugins’, ]

APIトークン

デフォルトのリプライ

teratermで作業

ローカルで作成してWinSCP でアップロード

ボットが実行される フォルダ

(49)

Python による開発

2017/4/14 プロジェクト

48

slackbot

ライブラリ

run.pyの編集

from slackbot.bot import Bot def main():

bot = Bot() bot.run()

if __name__ == "__main__":

main()

teratermで作業

ローカルで作成してWinSCP でアップロード

ボットが実行される フォルダ

(50)

Python による開発

2017/4/14 プロジェクト

49

slackbot

ライブラリ

好きなファイル(***.py)の編集

teratermで作業

ローカルで作成してWinSCP でアップロード

ボットが実行される フォルダの下のplugin フォルダ

(51)

Python による開発

2017/4/14 プロジェクト

50

slackbot

ライブラリ

ボットの実行

teratermによるサーバ上の作業)

実施コマンド

python run.py

(52)

Python による開発:簡単な例

2017/4/14 プロジェクト

51

slackbot

ライブラリ

mention.pyの編集

from slackbot.bot import respond_to

@respond_to('tired')

@respond_to('zzz') def cheer(message):

message.reply('You can make it!')

teratermで作業

ローカルで作成してWinSCP でアップロード

ボットが実行されるフォル ダの下のpluginフォルダ

“tired””zzz”をボット 宛につぶやくと反応す る

“You can make it!”と レスする

(53)

Python による開発:簡単な例

2017/4/14 プロジェクト

52

slackbot

ライブラリ

mention.pyの編集

from slackbot.bot import respond_to

@respond_to('tired')

@respond_to('zzz') def cheer(message):

message.reply('You can make it!')

teratermで作業

ローカルで作成してWinSCP でアップロード

ボットが実行されるフォル ダの下のpluginフォルダ

“tired””zzz”をボット 宛につぶやくと反応す る

“You can make it!”と レスする

(54)

2017/4/14 プロジェクト 53

(55)

Python による開発:軽い応用

2017/4/14 プロジェクト

54

何か

Bot

あてにつぶやかれたら、登録してある複数の文言から ランダムに選択して返信する

やること

複数文言を登録してあるテキストファイル(1行に1文言)

を用意

テキストファイルの行数を読み込み、何行目を呼び出すか をランダムに決める

決められた行の文言をメッセージとして返す

(56)

Python による開発:軽い応用

2017/4/14 プロジェクト

55

from slackbot.bot import respond_to

@respond_to('wei')

def getrandcomment(message):

import random

f = open('comments.txt','r') list = f.readlines()

num = len(list)

randnum = random.randint(0,num-1) message.reply(list[randnum])

randomcom.py

wei”というメッセージに反応 する

文言ファイル

comments.txt)を開く 行数をカウント

レスする文言をランダムに 選んで、その行をレスする

(57)

2017/4/14 プロジェクト 56

(58)

そのほか: Hubot 、 JBot

2017/4/14 プロジェクト

57

環境としては準備できてるけど 資料準備間に合わず

あとでアップロードします

(59)

Bot デザイン:考える点

2017/4/14 プロジェクト

58

どんな目的で、どんな機能を持たせるか

目的

機能

こういう入力があったらこう返す

「こう」に特徴がある場合はそう返す

**時**分になったらこう返す

その他のトリガ

機能はどういう技術要素で持たせるか

DB(MySQL)を使って…

クラウドサービスを使って画像なんかを取得して…

Wikipediaからその項目を検索して…

得られたデータから**を**して…

(60)

Bot デザイン:考える点

2017/4/14 プロジェクト

59

完成イメージ

ボット名称

動作イメージ

作業項目とメンバー割り当て、線表

(61)

次回のプレゼンについて

2017/4/14 プロジェクト

60

Bot

デザインで検討した項目を解説

目的、実装する機能

機能実現のための技術要素

完成イメージ

作業項目、割り当て、線表

グループあたりの持ち時間

10分

(62)

ポイントとなりそうな要素技術

外部のリソースの利用

外部

API

の利用

外部データベースの利用

他のライブラリの利用

正規表現

2017/4/14 プロジェクト

61

参照

関連したドキュメント

ときには幾分活性の低下を逞延させ得る点から 酵素活性の落下と菌体成分の細胞外への流出と

 仙骨の右側,ほぼ岬角の高さの所で右内外腸骨静脈

(使用回数が増える)。現代であれば、中央銀行 券以外に貸付を通じた預金通貨の発行がある

Windows スタートメニュー &gt; よく使うアプリ(すべてのプログラム)の HARUKA フォルダの中.

“Microsoft Outlook を起動できません。Outlook ウィンドウを開けません。このフォルダ ーのセットを開けません。Microsoft Exchange

チューリング機械の原論文 [14]

2022 年9月 30 日(金)~10 月 31 日(月)の期間で東京・下北沢で開催される「下北沢カレーフェステ ィバル 2022」とのコラボ企画「MANKAI

解約することができるものとします。 6