見出し画像

AWSのアップデートをSlackに通知する"What’s New Summary Notifier"を自分流にカスタマイズ


はじめに

AWSの最新情報はどのように収集していますか? AWSは、What’s New with AWS?AWS News blogなど様々なコンテンツで最新情報を提供しています。更新頻度は日によってばらばらですが、多い日は一日で60件以上も更新があったそうです。

AWS の最新情報は What’s New with AWS? に日々投稿されています。2023 年の実績 をみると、1 年間で 2,705 件ものアップデートが行われています。毎年 11 月末から行われる AWS における世界最大の学習型カンファレンス re:invent 2023 の直前には、なんと 1 日で 60 件を超えるアップデートが行われた日もありました ! このような、時に大量の AWS サービスアップデートを日々キャッチアップし続けるのは大変ではないでしょうか。

https://aws.amazon.com/jp/builders-flash/202406/catch-up-genai-update/

いくつものブログを巡回し最新情報を追いかけるのはなかなか大変な作業です。そこで、AWSソリューションアーキテクトの方々が、What’s New Summary Notifierという生成 AIを活用したソリューションを公開しました。このソリューションを使用し、自分流にカスタマイズしてみました。

What's New Summary Notifireとは?

What’s New Summary Notifierの紹介記事にあるとおり、RSSをもとに記事の取得、生成 AIによる翻訳・要約、SlackやTeamsなど受信Webhookに対応したツールへ投稿を行うアプリケーションです。

What’s New Summary Notifier は、ウェブ上の最新情報の RSS を定期的に取得し、テキスト生成モデルにより要約と箇条書き形式の詳細説明を作成して、受信 Webhook 対応コラボレーションツールに投稿を行う生成 AI アプリケーションのサンプル実装です。AWS のソリューションアーキテクトによりオープンソースで開発が行われており、2024 年 6 月現在では What's New with AWS? の RSS から生成した要約を、Slack および Microsoft Teams に投稿する機能を実装しています。

 https://aws.amazon.com/jp/builders-flash/202406/catch-up-genai-update/
Slackへ投稿されたメッセージの例。AWSブログの要約と記事のURLが含まれる。
Slack への投稿例

上記の紹介記事では触れられていませんが、コードをみると<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でシェアする投稿文の内容や長さ、ハッシュタグの付け方はプロンプトで指定しています。

Slackへ投稿されたメッセージの例。AWSブログの要約と記事のURLが含まれる。
Slackに投稿された内容
Share on Xリンクから開いたXの投稿画面。短い投稿文と、ハッシュタグ、記事へのリンクがある。
Share on Xリンクから開いたXの投稿画面

まとめ

RSSフィードURLを追加したりコードを少し変更するだけで自分流の情報収集ツールを構築することができました。生成AIの力を借りて最新の英語記事を翻訳・要約することができるので、日々の情報収集が捗ります。要約文を読んでから元記事に触れることで英語記事の理解も深まるのではないでしょうか。ここで紹介したカスタマイズ以外に、基盤モデルや出力言語(英語、日本語、フランス語、etc…)、モデルに与える役割 (ペルソナ)など様々なパラメータを変更することができます。自分好みに変更して、Slackなどに送信してみるのも楽しいと思います。


この記事が気に入ったらサポートをしてみませんか?