Slackチャットから、flask+ TF-IDF の応答を出力する。自然言語処理(4)
index:
概要
前回の、自然言語処理の関連となります。
slackチャットからの、入力文章を webhook経由で
AI/機械学習サーバからの応答を出力する例となります。
webhookは、aws EC2 ubuntu16です。
slack app設定は、トリガー単語を検出する。
カンタンな手法で、AI側を起動しています。
・構成の概要は、
Slack入力(質問)
=> Skack appトリガー検出
=> webhook (aws EC2)呼ぶ
=> nginx+ uWSGI 経由で flask 接続
=> 入力文章から、TF-IDFで、学習済みの入力文章
の類似文章を探す
=> 出力された、入力文章のindex番号から
応答文章を、引き当てる
=> Slackへ、結果送信
みたいな、流れですね
参考
https://www.sejuku.net/blog/74469
slack appの、追加方法など
・slack appで、
「Outgoing WebHooks」を追加
(発信Webフック )
・webhook の登録
=>EC2 のエンドポイントを指定。
・トリガー誤の登録( 例は、Bot: にしています。)
処理など
__init__.py
class VectBase: # def __init__(self): from flaskr.include.nlp_predict import NlpPredict self.pred=NlpPredict() #ans=self.pred.answers #print("ans-len=", len(ans)) tokens=self.pred.get_data() #print(tokens ) ret= self.pred.train(tokens ) self.vectorize= self.pred.get_vectorize() print("#end-load-vectorize") # def predict(self, text ): text=self.pred.predict(text ) #print(text ) return text # app = Flask(__name__) app.config['JSON_AS_ASCII'] = False vect=VectBase()
起動時に、学習処理して。
API応答速度は、高速にできるような形にしています。
( 文章の、件数が多い場合は。遅くなるかもしれませんが )
・webhook
views.py
@app.route('/test2', methods=['GET', 'POST']) def test2(): print("test2") # print(len(request.form )) ret="sorry, nothing response." if(len(request.form ) > 0): text=request.form['text'] print(text ) ret=vect.predict(text ) #print(ret ) dic = {"text" : ret } return jsonify(dic)
slackから、入力文を受信。
ML評価処理、結果の出力