1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPT が Teams で 記事を要約してくれる BOT を作ってみた

Last updated at Posted at 2024-05-07

はじめに

作ったものは記事のタイトル通り、Microsoft Teams に記事の URL を貼ったら、その内容を要約して投稿してくれる仕組みです。

Teams で情報共有している現場は多くあると思いますが、共有してもらった記事を全部読むのは意外に大変です。そんなとき短文で要約して、サッと中身がどんな内容なのか分かると便利だなと思い作ってみました。

image.png

image.png

英語の記事もそこそこいい感じに日本語で要約してくれます。↓↓

image.png

処理の流れ

Azure の Logic Apps でフローを組んでいます。
※PowerAutomate でも実装可能ですが、今回は HTTP コネクタを無料で使いたいので、Azure Logic Apps を使います。

Teams のコネクタをトリガーにし、Azure Functions と Azure OpenAI API を入れて、最後に要約結果を Teams に投げています。

①Teams に新たな投稿があるかチェック(5 分おき)

②Azure Functions で投稿された URL 内のテキストをスクレイピング
下の「HTTP - Get Content 」の部分です。
(Python の BeautifulSoup で実装しています)

③要約結果を Azure OpenAI の API に投げて、GPT-4 なりで要約
下の「HTTP - Summarize」の部分です。

④要約結果を Teams コネクタでチャットに投げる :tada:

image.png

実際のコード

上記 ② で使用している Azure Functions のコードのみ紹介します。

import azure.functions as func
import requests
import json
from bs4 import BeautifulSoup
from extractcontent3 import ExtractContent

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

@app.route(route="TextExtraction")
def TextExtraction(req: func.HttpRequest) -> func.HttpResponse:

    # Teams に投稿された情報を取得
    tag = req.get_json().get('tag')
    req_soup = BeautifulSoup(tag, 'html.parser')
    link = req_soup.find('a', href=True)
    url = link['href']

    # URL からウェブページを取得
    response = requests.get(url)
    response.raise_for_status()  # エラーならここで例外を発生させる

    # URLからタイトルと中身のテキストを抽出する
    html = response.text
    extractor = ExtractContent()
    opt = {"threshold": 0}
    extractor.set_option(opt)
    extractor.analyse(html)
    text, _ = extractor.as_text()
    soup = BeautifulSoup(html, "html.parser")
    title = soup.find("title").text

    # 記事のタイトルと中身のテキストを返す
    result = json.dumps({"title": f"{title}", "content": f"{text}"})
    return func.HttpResponse(result, mimetype="application/json")

Azure OpenAI の API の利用方法などはドキュメントなどに詳しく書かれているので今回は省略します。以下に参考リンクを置いておきます。

さいごに

おそらく以下のケースには対応できないので、対応するためには改良が必要と思います。

  • 貼られた記事が複数ページで構成されている(ページングで構成されている)場合、すべてのページを参照した要約できない(1ページ目だけをもとに要約する)
  • 複数の URL を Teams に投稿した場合
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?