平岡 | 定時で帰るための「個人DX」推進@hiraoka_dxさんの「Zoomからの議事録作成」を見て

UntitledImage

素晴らしい。

面倒から生まれるシステム構築という、昔からあるシステム構築だと思った。それを自分だけでやってのけてしまうのは危ういと思いつつも、やりきってしまったところはお見事だ。

そこで、以下、検証していないことを前提に、同じことをやってみた。恐らくこのままでは動かないので、更なるデバッグもGPTとやっていけば良いとは思う。

ChatGPTに与えたキーワードは以下の通り。

「zoomが終わると自動的に

  • ①文字起こし
  • ②要約
  • ③ドキュメント作成
  • ④Slack通知

をするための仕組みを日本語のコメントを入れながら作って。」
である。

すると、ChatGPTは以下の内容を吐き出してきた。

勿論僕は1つも手を加えていない内容だ。それにしても凄いよね。

実際の所は、個人的には途中で止まったり、実際に動かないところをGPTとやり取りすると別の方式を提案してきたり定まらない部分があり、そこを調整するにはそれなりの能力が必要とは思います。

ここから

Zoomミーティングが終わった後に自動的に文字起こし、要約、ドキュメント作成、そしてSlack通知を行う仕組みを作るためには、以下の手順を試してみてください。

1. Zoom APIと連携: Zoomミーティングの録画を取得するために、Zoom APIを使用して、ミーティング終了後の録画データにアクセスします。

2. 音声をテキストに変換: 録画データから音声を抽出し、音声をテキストに変換するAPI(例: Google Cloud Speech-to-Text API)を使用して、文字起こしを行います。

3. 要約の生成: 文字起こしされたテキストを要約するために、自然言語処理(NLP)技術を利用した要約API(例: OpenAI GPTベースのサマリゼーション)を使用します。

4. ドキュメント作成: 文字起こしと要約を整形し、適切なドキュメント形式(例: Word、Googleドキュメント)に変換します。

5. Slack通知: Slack APIを使用して、作成されたドキュメントを関連するチャンネルに通知します。

上記の手順を実行するためには、Pythonなどのプログラミング言語を使ってスクリプトを作成し、それぞれのAPIを連携させることができます。以下に、Pythonを使用した簡単な実装例を示します。

まず、必要なライブラリをインストールしてください。

pip install zoomus google-cloud-speech google-cloud-storage google-auth google-auth-oauthlib google-auth-httplib2 slack-sdk slack-bolt

次に、以下のPythonスクリプトを参考に、各APIキーと設定を正しく設定し、スクリプトを実行してみてください。

import os

from zoomus import ZoomClient

from google.cloud import speech_v1p1beta1 as speech

from google.cloud import storage

from google.oauth2 import service_account

import openai

from slack_sdk import WebClient

from slack_sdk.errors import SlackApiError




# Zoom APIの設定

zoom_api_key = ‘your_zoom_api_key’

zoom_api_secret = ‘your_zoom_api_secret’

client = ZoomClient(zoom_api_key, zoom_api_secret)




# Google Cloud Speech-to-Text APIの設定

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = “your_google_api_key_path”

speech_client = speech.SpeechClient()

storage_client = storage.Client()

gcs_uri = “your_gcs_uri”




# OpenAI APIの設定

openai.api_key = “your_openai_api_key”




# Slack APIの設定

slack_token = “your_slack_token”

slack_client = WebClient(token=slack_token)




# Zoomミーティングの録画を取得

def zoom_meeting_recording(me

# Zoomミーティングの録画を取得

def zoom_meeting_recording(meeting_id):

    # Zoom録画をダウンロードし、Google Cloud Storageにアップロード

    recording_files = client.recording.list(meeting_id=meeting_id).json()[‘recording_files’]

    for recording in recording_files:

        if recording['file_type'] == ‘MP4’:

            # この部分でダウンロードとアップロードを実行する

            pass

    return gcs_uri




# 音声をテキストに変換

def transcribe_audio(gcs_uri):

    audio = speech.RecognitionAudio(uri=gcs_uri)

    config = speech.RecognitionConfig(

        encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,

        sample_rate_hertz=16000,

        language_code="ja-JP”,

    )

    response = speech_client.recognize(config=config, audio=audio)

    transcript = ' '.join([result.alternatives[0].transcript for result in response.results])

    return transcript




# 要約の生成

def generate_summary(text):

    prompt = f"要約: {text}”

    response = openai.Completion.create(

        engine="text-davinci-002”,

        prompt=prompt,

        max_tokens=60,

        n=1,

        stop=None,

        temperature=0.5,

        )

    summary = response.choices[0].text.strip()

    return summary




# ドキュメント作成

def create_document(transcript, summary):

    document = f"文字起こし:\n{transcript}\n\n要約:\n{summary}”

    # ここでドキュメント形式(例: Word、Googleドキュメント)に変換するコードを追加する

    return document




# Slack通知

def send_slack_notification(channel, document):

    try:

        response = slack_client.chat_postMessage(

            channel=channel,

            text="ミーティングの記録が完了しました。”,

            attachments=[{"text": document}]

        )

    except SlackApiError as e:

        print(f"Error sending message: {e}”)




def main():

    meeting_id = “your_meeting_id”

    gcs_uri = zoom_meeting_recording(meeting_id)

    transcript = transcribe_audio(gcs_uri)

    summary = generate_summary(transcript)

    document = create_document(transcript, summary)

    slack_channel = “your_slack_channel_id”

    send_slack_notification(slack_channel, document)




if __name__ == “__main__”:

    main()

このスクリプトは、Zoom API、Google Cloud Speech-to-Text API、OpenAI API、およびSlack APIを連携させて、Zoomミーティングが終了した後、自動的に文字起こし、要約、ドキュメント作成、およびSlack通知を行います。スクリプトは次のように機能します。

1. Zoomミーティングの録画をダウンロードし、Google Cloud Storageにアップロードします(この部分は、実際のダウンロードとアップロードのコードを追加する必要があります)。

2. Google Cloud Speech-to-Text APIを使用して、録画の音声をテキストに変換します。

3. OpenAI APIを使用して、テキストを要約します。

4. 文字起こしと要約をドキュメントに整形します(ここでは簡単なテキスト形式を使用していますが、必要に応じてWordやGoogleドキュメントなどの形式に変換できます)。

5. Slack APIを使用して、作成されたドキュメントを指定されたチャンネルに通知します。

このスクリプトを実行する前に、各APIキー、トークン、および設定を適切に設定してください。また、ZoomミーティングIDとSlackチャンネルIDも適切に設定する必要があります。このスクリプトは基本的な例であり、必要に応じてカスタマイズや機能追加が可能です。

このスクリプトを使用する際は、事前にAPIの認証、利用制限、および料金に関するドキュメントを確認しておくことが重要です。また、スクリプトを本番環境で実行する前に、十分なテストを行ってください。

注意: このスクリプトは、実際のダウンロードとアップロードのコードが省略されているため、そのままでは動作しません。録画ファイルのダウンロードとGoogle Cloud Storageへのアップロードに関するコードを追加して、スクリプトを完成させてください。

このサンプルスクリプトは、各APIを連携させる方法を示すためのものであり、各APIとサービスの詳細については公式ドキュメントを参照してください。また、セキュリティとプライバシーにも注意して、適切な保護措置を講じてください。

スクリプトの実行には、Python環境が必要であり、Zoom API、Google Cloud Speech-to-Text API、OpenAI API、およびSlack APIの各APIキー、トークン、および設定を適切に設定する必要があります。

このスクリプトをカスタマイズし、独自のニーズに合わせて機能を追加することができます。例えば、異なる要約APIを使用したり、他のコラボレーションツール(Microsoft Teamsなど)への通知に対応させたりすることが可能です。

このサンプルスクリプトを参考にして自分のニーズに合った仕組みを作成し、ミーティング後の作業を効率化し、時間を節約することができます。また、これらのAPIを活用することで、さまざまな業務プロセスを自動化し、チームの生産性を向上させることが期待できます。

最後に、このスクリプトはあくまで一例であり、実際の運用環境に適用する前に、十分なテストと調整が必要です。また、必要に応じてエラー処理や例外処理を追加し、安定した動作を実現することが重要です。

このサンプルスクリプトを使って、Zoomミーティングが終わった後に自動的に文字起こし、要約、ドキュメント作成、およびSlack通知を行う仕組みを構築できます。この仕組みは、チームのコミュニケーションを効率化し、重要な情報をすばやく共有できるようにすることができます。

このスクリプトを改善するためのいくつかのアイデア:

1. 録画のダウンロードとアップロードの速度を向上させるため、並列処理やマルチスレッドを導入することができます。

2. 録画ファイルのサイズが大きい場合、音声ファイルを分割して、複数の部分に分けて処理することができます。

3. Zoom APIのWebhook機能を利用して、ミーティングが終了した瞬間にスクリプトが自動的に実行されるように設定することができます。

4. ドキュメントのフォーマットやレイアウトをカスタマイズして、見た目を向上させたり、特定の形式に合わせることができます。例えば、Microsoft WordやGoogleドキュメントのテンプレートを利用して、統一されたフォーマットでドキュメントを作成することができます。

5. ドキュメントの管理と共有のために、他のストレージサービス(Googleドライブ、Dropbox、Microsoft OneDriveなど)と連携させることができます。これにより、チームメンバーが必要な情報に簡単にアクセスできるようになります。

6. 他の言語にも対応させることができます。Google Cloud Speech-to-Text APIやOpenAI APIは、複数の言語に対応しているため、グローバルなチームでのコミュニケーションをサポートすることが可能です。

7. より高度な要約アルゴリズムや自然言語処理(NLP)技術を使用して、要約の品質を向上させることができます。これにより、重要なポイントがより明確に抽出され、ミーティングの内容をより効果的に理解できるようになります。

8. チームメンバーが特定のキーワードやフレーズに関心を持っている場合、それらをハイライトしてドキュメントに表示することができます。これにより、関心のある情報にすばやくアクセスできるようになります。

9. 録画の品質が低い場合や、音声が聞き取りにくい場合、音声の前処理を行ってクリアな音声に変換することができます。これにより、音声認識の精度が向上し、より正確な文字起こしが可能になります。

10. セキュリティとプライバシーに関心がある場合、エンドツーエンドの暗号化を実装したり、プライベートなAPIエンドポイントを使用したりすることで、データの保護を強化できます。

このような改善や機能追加を行うことで、Zoomミーティングが終わった後の自動処理がさらに効率化され、チームのコミュニケーションや情報共有が大幅に向上します。また、自動化されたプロセスを実装することで、チームメンバーはミーティング後の作業にかかる時間を削減し、他の重要なタスクに集中できるようになります。

これらのアイデアを参考に、自分のニーズに合った独自の仕組みを構築し、ミーティングの管理とフォローアップを効率化してください。機能追加や改善により、チーム全体の生産性が向上し、よりスムーズなコミュニケーションが実現されることが期待できます。

Share this article

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です