首页
开发技巧正文内容

如何用 Python 编写了一个 YouTube AI 助手

2024年10月30日
阅读时长 4 分钟
阅读量 7
如何用 Python 编写了一个 YouTube AI 助手

Step-by-Step 教程

你是否也曾为了学习或研究一个主题而花费大量时间在 YouTube 上浏览多个视频?长时间观看、做笔记,却还可能漏掉重要信息,这确实是一项挑战。

在本文中,我将展示如何构建一个利用大型语言模型(LLMs)回答视频内容问题的 Python 工具,让你轻松获取 YouTube 视频的关键信息。这不仅节省了我的时间,还显著提升了我的工作效率,让我有更多时间创作或放松。现在,就让我带你一起了解如何创建这个 YouTube AI 助手吧!

为什么要构建这个 YouTube AI 助手

在深入技术细节前,先聊聊为什么这个项目对我意义重大。

作为全职开发者倡导者、兼职 YouTuber(我的频道是 Data Professor),内容研究是我的核心任务之一。构建这个助手的主要优势有:

  1. 节省时间:不再需要通篇观看视频,只需提问即可找到视频中的关键信息。
  2. 高效学习:能以更短时间总结出视频的核心内容。
  3. 提升效率:以前需要数周的内容研究,现在几天内就能完成。

工作流程概览

YouTube AI 助手的工作流程可以分为以下 3 个主要步骤:

  1. 提取并下载音频:使用 YT-DLP Python 库 从 YouTube 下载音频文件。
  2. 将音频转录为文本:使用 AssemblyAI Python 库 将音频转录为文本。
  3. 回答问题:使用 AssemblyAI 的 LeMUR 模型 回答有关视频内容的问题。底层 LLM 为 Anthropic 的 Claude 3.5 Sonnet。

下图展示了整个流程:

YouTube 问答流程图

免责声明

请尊重版权法和使用条款,作者对因使用此工作流程产生的任何不当行为概不负责。

先决条件

首先,打开终端或命令行并输入以下命令安装所需的 Python 库:

pip install yt-dlp assemblyai

加载 API 密钥

要实现音频转录和 LeMUR 问答功能,首先从 AssemblyAI 获取 API 密钥,并将其保存在 Google Colab 的“秘密管理”中:

API 密钥在 Google Colab 的保存方法

from google.colab import userdata
import assemblyai as aai

aai.settings.api_key = userdata.get('AAI_KEY')

如果不是使用 Google Colab,可以相应调整代码。

下载音频

工作流程的第一步是用 yt_dlp Python 库从 YouTube 下载音频文件。

以下是 download_audio() 函数的代码:

import yt_dlp

def download_audio(url):
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'outtmpl': '%(title)s.%(ext)s',
        'verbose': True,
    }
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([url])

例如,我们可以下载我制作的一个名为 如果我不得不重新学习编程,我会怎么做 的视频音频:

URL = "https://www.youtube.com/watch?v=wB7IU0EFN68"
download_audio(URL)

在几分钟内,音频文件将以 <文件名>.mp3 格式保存。

转录音频

接下来,我们使用 AssemblyAI 将音频转录为文本。首先,创建一个 transcriber 对象,并调用 transcribe() 方法:

transcriber = aai.Transcriber()
transcript = transcriber.transcribe(audio_file)

回答问题

定义问题

首先定义我们想要的问题,例如:

prompt = "视频中提到的5条关键信息是什么?"

使用 LLM 生成答案

lemur.task() 方法应用于 transcript 对象,选择 Claude 3.5 Sonnet 作为 LLM 模型:

result = transcript.lemur.task(
    prompt,
    final_model=aai.LemurModel.claude3_5_sonnet
)

查看 LLM 生成的输出

print(result.response)

通过自动换行设置,我们可以更方便地阅读生成的响应:

from IPython.display import HTML, display

def set_css():
  display(HTML('''
  <style>
    pre {
        white-space: pre-wrap;
    }
  </style>
  '''))

get_ipython().events.register('pre_run_cell', set_css)

删除任务(可选)

如果想要删除任务(例如出于隐私考虑),可以用以下代码:

deletion_response = aai.Lemur.purge_request_data(request_id=result.request_id)

我们问答任务的回顾

在视频 如果我不得不重新学习编程,我会怎么做 中提出的问题是:

"在这个视频中提到的5个关键信息是什么?"

LLM 生成的答案如下:

根据文本记录,以下是视频中提到的5个关键信息:

  1. 选择一个编程语言开始学习,如果不确定从哪里开始,建议使用Python。
  2. 找到并利用免费学习资源,如Freecodecamp、Kaggle Learn、Geeksforgeeks等。
  3. 从基础知识开始,并将所学应用到你感兴趣的实际项目中,以保持动力。
  4. 通过社交媒体分享学习旅程,巩固理解并建立学习网络。
  5. 参与编程挑战并帮助他人,以巩固知识和改进技能。

如果您有兴趣进一步了解,请观看此内容的伴随视频:

总结

通过构建 YouTube AI 助手,我显著加速了内容研究。这不仅是更大项目的一个良好起点,也适合更复杂的多视频研究、内容分析等需求。所有代码都可以在 GitHub 获取,欢迎根据自己的需求进行调整。希望您在使用该工具后能分享您的体验。

免责声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

相关文章

探索多种软件架构模式及其实用应用
2024年11月22日19:06
本文深入探讨了多种软件架构模式,包括有界上下文、边车模式、发布-订阅模式、应用网关、微服务、命令职责分离(CQRS)等,介绍了它们的优点、使用场景以及具体应用实例。文章强调根据具体项目需求和团队能力选择最合适的架构,以构建高效和可维护的解决方案,同时展示了各架构模式间的综合应用,提供了丰富的案例和技术细节。
15个高级Python快捷键助您更快编程
2024年11月21日07:02
本文分享了 15 个高级的 Python 编程快捷键,包括上下文管理器、行内字典合并、函数参数解包、链式比较、dataclasses、海象运算符、反转列表、备忘录缓存、splitlines、enumerate、字典推导、zip 用于并行迭代、itertools.chain 扁平化列表、functools.partial 部分函数和 os.path 文件路径管理等,帮助开发者提高编程效率和代码简洁性。
揭示网页开发的 11 个迷思:停止相信这些误区
2024年11月19日22:05
网页开发充满误解,这篇博文针对11个常见迷思进行揭秘。包括网站开发后不需更新、需掌握所有技术、AI会取代开发者等。强调持续学习、专业化、用户体验的重要性,澄清误区如多任务处理的必要性和最新技术的必需性。文章提醒开发者注重实用而非追求完美代码,以务实态度面对开发工作。
你知道 CSS 的四种 Focus 样式吗?
2024年11月18日21:41
本文介绍了四种 CSS focus 样式::focus、:focus-visible、:focus-within 以及自定义的 :focus-visible-within,帮助提升网站用户体验。:focus 样式应用于被选中元素;:focus-visible 仅在键盘导航时显示;:focus-within 用于父元素;自定义 :focus-visible-within 结合两者效果。合理运用这些样式能使网站更方便键盘用户导航。
利用 Python 实现自动化图像裁剪:简单高效的工作流程
2024年11月11日20:49
使用 Python 和 OpenCV 自动裁剪图像,轻松实现 16:9 的完美构图。这个指南介绍了如何通过代码进行灰度化、模糊处理和边缘检测,最终识别出最重要的部分进行裁剪。特别适合需要批量处理图像的情况,节省大量时间。
每位资深前端开发人员都应了解的 TypeScript 高级概念
2024年11月11日02:07
资深前端开发者应了解 TypeScript 的高级概念,如联合类型、交叉类型、类型保护、条件类型、映射类型、模板字面量类型和递归类型。这些特性可提升代码的可维护性和可扩展性,确保在开发复杂应用时实现更高的类型安全性和效率。