AWSのアップデートをSlackに通知する"What’s New Summary Notifier"を自分流にカスタマイズ
はじめに
AWSの最新情報はどのように収集していますか? AWSは、What’s New with AWS?やAWS News blogなど様々なコンテンツで最新情報を提供しています。更新頻度は日によってばらばらですが、多い日は一日で60件以上も更新があったそうです。
いくつものブログを巡回し最新情報を追いかけるのはなかなか大変な作業です。そこで、AWSソリューションアーキテクトの方々が、What’s New Summary Notifierという生成 AIを活用したソリューションを公開しました。このソリューションを使用し、自分流にカスタマイズしてみました。
What's New Summary Notifireとは?
What’s New Summary Notifierの紹介記事にあるとおり、RSSをもとに記事の取得、生成 AIによる翻訳・要約、SlackやTeamsなど受信Webhookに対応したツールへ投稿を行うアプリケーションです。
上記の紹介記事では触れられていませんが、コードをみると<main>タグ内の記事本文を処理対象としています。そのようなHTML構造をもつコンテンツであればAWSブログ以外も処理可能です。
カスタマイズ
紹介記事ではSlack有料プランのワークフローを使用してWebhookを受信する例が書かれています。フリープランのIncoming Webhooksを利用して受信する方法を紹介します。
もとのコードはこちらです。
Incoming Webhooks対応
diff --git a/lambda/notify-to-app/index.py b/lambda/notify-to-app/index.py
index 1d31ded..05dbc0a 100644
--- a/lambda/notify-to-app/index.py
+++ b/lambda/notify-to-app/index.py
@@ -7,10 +7,12 @@ import os
import time
import traceback
+import urllib.parse
import urllib.request
from typing import Optional
from botocore.config import Config
from bs4 import BeautifulSoup
from botocore.exceptions import ClientError
import re
@@ -239,7 +241,7 @@ def push_notification(item_list):
item["detail"] = item["detail"].replace("。\n", "。\r")
msg = create_teams_message(item)
else: # Slack
- msg = item
+ msg = create_slack_message(item)
encoded_msg = json.dumps(msg).encode("utf-8")
print("push_msg:{}".format(item))
@@ -277,6 +279,24 @@ def get_new_entries(blog_entries):
return res_list
+def create_slack_message(item):
+
+ # URL encode the RSS link separately
+ encoded_rss_link = urllib.parse.quote(item["rss_link"])
+
+ message = {
+ "text": f"{item['rss_time']}\n" \
+ f"<{item['rss_link']}|{item['rss_title']}>\n" \
+ f"{item['summary']}\n" \
+ f"{item['detail']}\n"
+ }
+
+ return message
+
+
def create_teams_message(item):
message = {
"type": "message",
さまざまなAWSブログのRSSを追加する
以下のサイトを参考にしました。
diff --git a/cdk.json b/cdk.json
index 4ff9742..7058721 100644
--- a/cdk.json
+++ b/cdk.json
@@ -35,7 +35,21 @@
"summarizerName": "AwsSolutionsArchitectJapanese",
"webhookUrlParameterName": "/WhatsNew/URL",
"rssUrl": {
- "What’s new": "https://aws.amazon.com/about-aws/whats-new/recent/feed/"
+ "What's new": "https://aws.amazon.com/about-aws/whats-new/recent/feed/",
+ "AWS News Blog": "https://aws.amazon.com/blogs/aws/feed",
+ "AWS News Security Blog": "https://aws.amazon.com/blogs/security/feed/",
+ "AWS News Machine Learning Blog": "https://aws.amazon.com/blogs/machine-learning/feed/",
+ "AWS Web Services Blog (JP)": "https://aws.amazon.com/jp/blogs/news/feed/",
+ "AWS Web Services Blog (JP) - Generative AI": "https://aws.amazon.com/jp/blogs/news/category/artificial-intelligence/generative-ai/feed/",
+ "AWS Web Services Blog - Generative AI": "https://aws.amazon.com/blogs/aws/category/artificial-intelligence/generative-ai/feed/",
+ "AWS Web Services Blog (JP) - Generative AI 2": "https://aws.amazon.com/jp/blogs/news/category/generative-ai-2/feed/"
+ },
+ "schedule": {
+ "minute": "45",
+ "hour": "*",
+ "day": "*",
+ "month": "*",
+ "year": "*"
}
}
},
その他のカスタマイズ
X (Twitter) シェア用リンクの追加やAWSブログ以外のRSSを登録する方法は、Qiitaに記事を書きました。
X (Twitter) シェア用リンクを追加すると、このようにハッシュタグ付きの内容をXでシェアできます。Xでシェアする投稿文の内容や長さ、ハッシュタグの付け方はプロンプトで指定しています。
まとめ
RSSフィードURLを追加したりコードを少し変更するだけで自分流の情報収集ツールを構築することができました。生成AIの力を借りて最新の英語記事を翻訳・要約することができるので、日々の情報収集が捗ります。要約文を読んでから元記事に触れることで英語記事の理解も深まるのではないでしょうか。ここで紹介したカスタマイズ以外に、基盤モデルや出力言語(英語、日本語、フランス語、etc…)、モデルに与える役割 (ペルソナ)など様々なパラメータを変更することができます。自分好みに変更して、Slackなどに送信してみるのも楽しいと思います。