#0.はじめに
はじめまして、少し傾斜の傾いた安普請のアパートの17平米に潜む3年目SEです。
UiPathにはじめて関わったのは2017年の12月で、1年目のころ。
Orchestrator(以下OC)導入プロジェクトで、バージョンはたしかUiPath2016.4~2017.1でした。
当時は詳細な導入手順、ステップバイステップ導入ガイドのようなものはなく、公式ガイドとフォーラムでAWSのEC2上にOCを構築する方法について試行錯誤していました。
其の後、プロジェクトを離脱しましたが
OCとElasticsearch/Kibanaの連携などさわる機会に恵まれました。
最近は、新人のOR黎明期にナレッジを書き溜めなかったことをすこし惜しんだり、
久しぶりにさわるUiPathの機能の変革に衝撃を受けたり、
コグニティブ・オートメーションアクティビティを触ったりするのが、UiPathとの接点です。
Ai.Computer Vision Activityのセットアップでつまづいた時の図(UiPathのバージョンが古かった)
なお本記事の類似に以下の記事が有ります。
https://qiita.com/tyoko/items/5ac66dd903b6cc8ae773
RPAに限らずAI、つまりはML領域でできることをさがすと
「①所感を感情分析して、ニュートラル~ネガティブであれば検知してアラートあげてくれると良いよね」
「②自分の選好にあうニュースをセレクトして、流してくれたら良いよね」
と普段の会話から、ニーズを発見することがあります。
RPAの利点で、マクロと異なるのはシンプルなUIゆえの引継ぎやすさと作成の容易さで、一度作成するとマクロと比べて保守もしやすい。
よって上述の要求に対してRPAはシーズになります。
全体的に、あるいは部分的にそれらを実現する方法を探る(Tipsレベルで書き留める)のが本記事の趣旨です。
ところで先日、Fintechのカンファレンスに参加したところ、2020を占う8つのトレンドのうち、
"行き過ぎたAIの是正"が2020年のトレンド候補として取り上げられていました
最近ではAI採用によるモラル低下が取り沙汰されていますが、ハイパーパーソナライゼーションによる表裏が、来年も続きそうです。
個人的には個のニーズに対応できるのがAIの美点と考えていて、
私生活でもSELFというアプリで新宿二丁目のデータを学習したユキオという人工知能エンジンとやりとりしても、ツッコミが個別具体的な様をみるとそう思います。
AIは学習次第でevilになるケースもありますが、モラルを学習できるのであればAI上司に期待できるところです。
#2.実装
##2.1. 環境準備
###2.1.1 インスタンス作成
※端末のライセンスが切れてしまったので、AWSのEC2上でCommunity版を稼働させます。
Win10の任意のAMIを選択しています。
・AMI:Microsoft Windows Server 2019 Base-2019-11-13-AutogenByAWSMP
・Instance Size:t2.micro
・total memory:1GB
・UiPath Community Edition 2019.5
作成したEC2に接続してUiPathを起動。[Activate]します。
また[Machine]接続の為、hostnameを確認します。
###2.1.2 ロボット接続
OCのデモサイトでOC側の設定をします。[MACHINES]ではさきほど確認したhostnameで設定します。
※デモサイトの新規登録の方法は⇒他の方のサイトをご参照ください。
Robotの登録についても画面上でできるのですが
Orchestrator APIに慣れるため、APIを叩いて登録します。
※その前に、[Environment]が必要とorchetrator API referenceに載っているため、[Environment]を追加します。
PostWomanを使用して、OrchestratorのAPIを叩きます。
※このときPostWomanのProxy設定をenabledにします。disableではPOST送信できないようです。
[12/25現在]robotの作成確認ができず、手動で追加しました。
クライアント側にもどります。
OC側ロボット作成時に発行された[Machine Key]をUiPath Robotに入力。
接続準備は完了です。
##2.2ネガティブな文体を検知し、slackに送る
アウトラインは以下です。 以下、ⅳ:に焦点を当てます。
ⅰ: 未読メールで日報が件名に入ってるものを検出
ⅱ: [所感]の文字列をアンカーに、所感の内容を取得
ⅲ: 自然言語処理解析にかけて、極性 ポジ(+) ネガ(-) ニュートラル(±)のスコアを算出
ⅳ: 基準値以上のネガ(-)スコアであれば、slackに通知
ii):は社内ポリシーの関係で、UiPathでさくっと実現するには厳しく。GASで雰囲気だけ参考に。
※Googleアカウントの2段階認証の設定が外れていると、アプリパスワードが発行できず、
gmailのアクティビティが使用できない。
代替として、GASでGSSに文章を溜めることを考えましたが、(12/25現在)未試行。
function Function(){
// 件名のマッチング
var regBiz = new RegExp('*日報' + '.*?')
// 最大スレッド数
var MAX_THREADS = 30;//
var cnt = 0;
// 受信トレイのメッセージを取得する
var threads = GmailApp.getInboxThreads(0, MAX_THREADS);
Logger.log("len="+threads.length);
for (var i = 0; i < threads.length; i++)
{ var thread = threads[i];
var subject = thread.getFirstMessageSubject();
if (!subject.match(regBiz))
continue;
// スレッド内のメッセージを取得する
var messages = thread.getMessages();
var msg = messages[messages.length - 1];
// 未読のメッセージのみ処理する
if (!msg.isUnread()) continue;
msg.markRead(); // 既読にする
// ネットから情報を取得する
try { // JSONデータを受信
var text = UrlFetchApp.fetch(apiURI).getContentText();
var obj = JSON.parse(text);
// 値を取り出す
var title = obj["title"];
var desc = obj["description"]["text"];
あるいはSatnfordのNLPアクティビティが使えるので、
以下のコードを書かなくとも実装が可能です。
package test;
import java.util.List;
import java.util.Properties;
import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
/**
* ner sammple
*
*/
public class NERSample {
public static void main(String[] args) {
String text = "I ask everyone to not rush to judgment and allow the investigation to be completed,"
+ " Orange County Sheriff Jerry Demings said at a news conference in Orlando.";
Properties properties = new Properties();
properties.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner");
StanfordCoreNLP coreNLP = new StanfordCoreNLP(properties);
Annotation annotation = new Annotation(text);
coreNLP.annotate(annotation);
List<CoreLabel> labels = annotation.get(TokensAnnotation.class);
for (CoreLabel label : labels) {
System.out.println(label.get(TextAnnotation.class) + "\t"
+ label.get(NamedEntityTagAnnotation.class));
}
}
}
ⅳ:slackに通知の準備として、下記の[Bot User OAuth Access Token]を控えます。[Client ID]やその他もろもろのTokenが載っている画面ではないので注意します。
https://docs.uipath.com/studio/lang-ja/docs/enabling-gmail-for-email-activities
UiPath⇒Slackの通知に、Paul SealさんのSlackBotMessagesを使用します。
Send Slack messageアクティビティのパラメータは最低限Token([Bot User OAuth Access Token]持たせる)とchannel or mailaddress & Messageの入力が必要のようです。
slackからRobotを起動するには、
POST https://platform.uipath.com/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs
を改良すればよさそうで、outgoingwebhookを使用し、
slack⇒OC⇒slackの流れが実現できそうですが、今回はここまでにします。
#あとがき
UiPathの機能は驚くほど柔軟なので、
slackからOrchestratorを呼ぶ手順が充実することで、チャットアプリとRPAとの連携のように、個人の用途にあったRobotがより浸透するというのが本記事試みての実感でした。
#参考
[1]https://www.cresco.co.jp/blog/entry/11387/
[2]https://qiita.com/hiroeis/items/c48c23f09010467b8b90
[3]https://dev.classmethod.jp/cloud/aws/analysis-sentiment-using-analysis-jobs-on-amazon-comprehend/
[4]http://arakilab.media.eng.hokudai.ac.jp/~ptaszynski/data/2011.02.24_HRC-Symposium.pdf
[5]https://gallery.uipath.com/packages/UiPathTeam.SendSlackMessage.Activities/
[6]https://docs.uipath.com/activities/lang-ja/docs/google-vision-text-detection
[https://gendai.ismedia.jp/articles/-/65769?page=4]
[7]https://www.businessinsider.jp/post-200122
[8]https://stories.mlh.io/make-robots-automate-your-life-or-at-least-your-email-d728342257e4
[9]https://docs.uipath.com/studio/lang-ja/docs/enabling-gmail-for-email-activities
[10]https://qiita.com/toshiyuki_tsutsui/items/604f92dbe6e20a18a17e
[11]https://uipath-ai-expo.jp/
[12]https://qiita.com/miriwo/items/11b717dfc501b5b4e286