このブログ投稿は「Japan AWS Ambassadors - Qiita Advent Calendar 2024 - Qiita」の9日目です。
皆様はre:Invent 2024に行かれましたでしょうか?残念ながら、私は 自宅待機組 です。しかしながら、re:InventはGameDayやWorkshopなどの参加型コンテンツ以外のセッションは速攻で動画がYouTubeに公開されるのが素晴らしいですね。
このセッション動画ですが、 何百本もの動画がアップロードされています。 気になる動画だけでも数十本ありました。これを全部視聴する? ... となると少なくとも 20時間前後 かかってしまうのではないでしょうか。
忙しい社会人には時間がない!Ambassadorならなおさらです!(←?)
そんな忙しい皆さんに、 re:Invent 2024の動画をてっとり早くインプットする方法をご紹介します。
※ 本手順はローカルマシンから手動で実行することを想定しております。自動化Botでは利用しないでください。YouTube側でBotと認識されると送信元IPのブロックや取得できるコンテンツの制限などが発生します。
まず最初に結論から
この動画を ...
このように要約します!
どうやっているのか
Pythonでスクリプトを実装しています。使っている主なpipライブラリはこちら。
ライブラリ名 | 説明 |
---|---|
youtube-transcript-api | Youtubeの字幕情報を取得します |
boto3 | Amazon BedrockにAPIアクセスして要約結果を取得します |
コード例
コード例をご紹介します。
Youtubeの字幕情報を取得する
youtube-transcript-api を利用してYouTubeの字幕情報を取得します。この字幕情報が重要なコンテキストになりますので、今のところ日本語ではなく英語の動画のほうが品質の高い字幕情報を取得できるのではないかと思います。以下のコード例ではURLから動画IDを取得し、動画IDを引数として英語の字幕を取得しています
def get_youtube_aws_events_transcribe(url): parsed_url = urlparse(url) query_params = parse_qs(parsed_url.query) transcript = YouTubeTranscriptApi.get_transcript(query_params.get('v', [None])[0], languages=["en"]) return transcript
Bedrockのプロンプト例
Claude 3.5 Sonnetを利用しています。以下のプロンプトを使っています。 なお、このプロンプトはBedrockのプロンプト最適化機能を利用して作成しました。プロンプトの草案をBedrockのプロンプト最適化機能を用いることで、適切なプロンプトに変換してくれます。とても便利ですね!
def prompt(article_body): return f"""<task> あなたの役割は、与えられた英語のトランスクリプトを要約し、その要約を日本語に翻訳することです。 </task> <context> {article_body} </context> <instructions> 1. 上記の英語のトランスクリプトを読み、内容を理解してください。 2. トランスクリプトを要約してください。要約しつつも技術的な重要な事柄をアウトプットするようにしてください。定量的な内容は盛り込むようにしてください。 3. その要約を日本語に翻訳してください。 </instructions> """
Bedrockの呼び出し例
最後に、上記のプロンプトとコンテキストを用いてBedrockに要約してもらいます。するとなんと、1時間程ある動画が5分程でインプットできる内容に仕上がってしまいました。素晴らしいですね。このサマリをきっかけに興味が湧いた動画をしっかり視聴することがよさそうです。コード例は以下の通りです。
def generate_prompt_config(url, model_id): article_body = get_youtube_aws_events_transcribe(url) message = prompt(article_body) prompt_config = { "anthropic_version": "bedrock-2023-05-31", "temperature": 0, "top_p": 0.9999, "top_k": 250, "max_tokens": 4096, "system": "", "messages": [ { "role": "user", "content": [ {"type": "text", "text": message}, ], } ], } body = json.dumps(prompt_config) response = bedrock_client.invoke_model( body=body, modelId=model_id, accept="application/json", contentType="application/json" ) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") print(results) return results, model_id
まとめ
本ブログ投稿では、忙しいエンジニアの皆様向けに、re:Invent 2024の動画をてっとり早くインプットする方法をご紹介しました。エンジニアリングの力で効率化していくのはとても楽しいですね!くれぐれも、YouTube側にBotとして認識されないよう、自動化では利用しないよう、用途に気をつけてご利用ください。
以上です。