
generative-ai-for-beginners 第 08 课数据管道实战用 Azure OpenAI 与 Python 脚本批量制备 YouTube 转录语料【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners本篇指南围绕课程仓库中08-building-search-applications目录下的“转录数据制备”脚本集展开这些 Python 脚本负责从 YouTube 播放列表批量下载视频转录经过说话人识别、分钟级分桶、摘要生成与向量嵌入等多阶段富化最终产出可供 “Semantic Search with OpenAI Embeddings and Functions” 示例直接加载的语义检索索引。读完后你将掌握如何用 Azure CLI 一键搭建所需的 Azure OpenAI 资源、配置四个关键环境变量并逐阶段理解从transcript_download.py到transcript_enrich_lite.py的完整数据处理流水线从而能为自己的视频语料库构建可检索的向量索引。1. 脚本集的定位与适用环境08-building-search-applications/scripts/README.md原文说明该目录下的转录数据制备脚本用于下载 YouTube 视频转录并将其加工为语义搜索示例可用的语料。脚本集已在以下平台的最新版本上完成测试Windows 11macOS VenturaUbuntu 22.04 及更高版本整个目录的内容组织如下均位于08-building-search-applications/scripts/文件职责transcript_download.py按播放列表批量下载视频转录与元数据transcript_enrich_speaker.py用 OpenAI 函数调用提取说话人姓名transcript_enrich_bucket.py按分钟粒度把长转录切分为带重叠的片段transcript_enrich_summaries.py为每个片段生成 60 词左右的摘要transcript_enrich_embeddings.py为每个片段文本生成text-embedding-ada-002向量transcript_enrich_lite.py去除冗余文本字段生成精简版索引prepare_transcripts_ai_show.sh / .ps1 / .bat跨平台编排脚本按顺序执行上述六个阶段requirements.txtPython 依赖清单embedding_index_3m.json流水线最终产物示例3 分钟分桶的精简索引说明英文版原文档的“运行脚本”一节引用了外部示例仓库中的transcripts_prepare.ps1/transcripts_prepare.sh而当前仓库实际提供的是prepare_transcripts_ai_show.ps1、prepare_transcripts_ai_show.sh与prepare_transcripts_ai_show.bat三个编排脚本功能一致下文以仓库内实际文件为准。2. 创建所需的 Azure OpenAI 资源数据管道依赖 Azure OpenAI Service 提供两类模型嵌入模型与对话模型。原文档建议在操作前先把 Azure CLI 升级到最新版以确保与 OpenAI 相关命令的兼容性。2.1 创建资源组原文档以资源组semantic-video-search、位置eastus为例。你可以更改资源组名称但更换资源位置前务必核对 Azure 官方的模型可用性情况因为不同区域开放的具体模型不同az group create --name semantic-video-search --location eastus2.2 创建 Azure OpenAI Service 资源az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ --location eastus --kind OpenAI --sku s02.3 获取端点与密钥后续所有 Python 脚本都通过环境变量消费这两项信息az cognitiveservices account show --name semantic-video-openai \ --resource-group semantic-video-search | jq -r .properties.endpoint az cognitiveservices account keys list --name semantic-video-openai \ --resource-group semantic-video-search | jq -r .key12.4 部署模型需要准备text-embedding-ada-002版本2或更高部署名text-embedding-ada-002对话模型。需注意一个版本演进本仓库爱沙尼亚语翻译版文档translations/et/08-building-search-applications/scripts/README.md中写的是gpt-35-turbo版本0613而当前仓库英文版 README 与脚本默认值均已切换为gpt-4o-mini。以仓库现状为准推荐按以下方式部署az cognitiveservices account deployment create \ --name semantic-video-openai \ --resource-group semantic-video-search \ --deployment-name text-embedding-ada-002 \ --model-name text-embedding-ada-002 \ --model-version 2 \ --model-format OpenAI \ --scale-settings-scale-type Standard az cognitiveservices account deployment create \ --name semantic-video-openai \ --resource-group semantic-video-search \ --deployment-name gpt-4o-mini \ --model-name gpt-4o-mini \ --model-format OpenAI \ --sku-capacity 100 \ --sku-name Standard源码可以印证这一默认值transcript_enrich_speaker.py 与 transcript_enrich_summaries.py 都通过os.getenv(AZURE_OPENAI_MODEL_DEPLOYMENT_NAME, gpt-4o-mini)读取对话模型部署名缺省回退到gpt-4o-minitranscript_enrich_embeddings.py 则回退到text-embedding-ada-002。3. 软件要求与环境变量3.1 软件要求Python 3.9 或更高版本git 客户端用于克隆示例仓库3.2 必须配置的环境变量运行转录制备脚本需要以下四个环境变量分别对应 Azure OpenAI 的密钥、端点、模型部署名以及 YouTube Data API 的 Google 开发者密钥AZURE_OPENAI_API_KEY your Azure OpenAI Service API key AZURE_OPENAI_ENDPOINT your Azure OpenAI Service endpoint AZURE_OPENAI_MODEL_DEPLOYMENT_NAME your Azure OpenAI Service model deployment name GOOGLE_DEVELOPER_API_KEY your Google developer API keyWindows 下建议把变量添加到“用户”级别环境变量开始编辑系统环境变量环境变量[当前用户]的用户变量 新建。Linux 与 macOS 下建议把导出语句写入~/.bashrc或~/.zshrcexport AZURE_OPENAI_API_KEYyour Azure OpenAI Service API key export AZURE_OPENAI_ENDPOINTyour Azure OpenAI Service endpoint export AZURE_OPENAI_MODEL_DEPLOYMENT_NAMEyour Azure OpenAI Service model deployment name export GOOGLE_DEVELOPER_API_KEYyour Google developer API key从源码看各脚本对这些变量的依赖是“硬依赖”例如 transcript_download.py 直接以os.environ[GOOGLE_DEVELOPER_API_KEY]读取缺变量会立即抛错退出而富化类脚本如 transcript_enrich_speaker.py在读取AZURE_OPENAI_API_KEY与AZURE_OPENAI_ENDPOINT之前先调用dotenv.load_dotenv()因此也兼容.env文件方式。4. 安装 Python 依赖克隆本仓库数据制备脚本已包含在08-building-search-applications/scripts/目录中进入脚本目录cd 08-building-search-applications/scripts创建 Python 虚拟环境。Windowspython -m venv .venvmacOS 与 Linuxpython3 -m venv .venv激活虚拟环境。Windows.venv\Scripts\activatemacOS 与 Linuxsource .venv/bin/activate安装依赖库。Windowspip install -r requirements.txtmacOS 与 Linuxpip3 install -r requirements.txt当前 requirements.txt 锁定了关键依赖版本区间openai1.54.0,2.0.0、tiktoken0.8.0,1.0.0、google-api-python-client2.98.0,3.0.0、youtube-transcript-api0.6.1,1.0.0并附带pandas、matplotlib、plotly、scipy、scikit-learn可视化/分析用、rich进度条与tenacity重试机制。5. 一键运行编排脚本的执行流程三个平台编排脚本逻辑一致以 prepare_transcripts_ai_show.sh 为准它设定了两个关键参数export TRANSCRIPT_FOLDERtranscripts_the_ai_show export TRANSCRIPT_BUCKET_MINUTES3即语料存放目录为transcripts_the_ai_show分桶粒度为 3 分钟随后按顺序调用六个 Python 阶段脚本并下载播放列表PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1课程配套的 The AI Show 视频集的转录python3 transcript_download.py -f $TRANSCRIPT_FOLDER -p PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1 python3 transcript_enrich_speaker.py -f $TRANSCRIPT_FOLDER python3 transcript_enrich_bucket.py -f $TRANSCRIPT_FOLDER -m $TRANSCRIPT_BUCKET_MINUTES python3 transcript_enrich_summaries.py -f $TRANSCRIPT_FOLDER python3 transcript_enrich_embeddings.py -f $TRANSCRIPT_FOLDER python3 transcript_enrich_lite.py -f $TRANSCRIPT_FOLDER最后将中间产物重命名为带分桶粒度的最终索引output/master_enriched.json→output/embedding_index_full_3m.json含全文与向量的完整版output/master_enriched_lite.json→output/embedding_index_3m.json去除长文本的精简版即仓库中已提供的 embedding_index_3m.json 同型产物。Windows 用户运行prepare_transcripts_ai_show.ps1PowerShell或prepare_transcripts_ai_show.batcmdmacOS/Linux 用户运行./prepare_transcripts_ai_show.sh。6. 逐阶段解析数据管道6.1 阶段一下载转录transcript_download.py该阶段只依赖GOOGLE_DEVELOPER_API_KEY流程为通过 YouTube Data API v3 的playlistItems().list()分页拉取播放列表每页MAX_RESULTS 50条循环nextPageToken直到取完把每个视频条目放入线程队列由PROCESSING_THREADS 40个线程并发抓取转录转录来自youtube_transcript_api并做两处加工去掉文本中的换行符以 JSON 格式落盘为videoId.json.vtt同时为每个视频生成元数据文件videoId.json包含speaker初始为空串、title、videoId、description四个字段见 gen_metadata。两个实用细节脚本内置断点续传——若videoId.json.vtt已存在则直接跳过该视频get_transcript命令行支持-f/--folder指定输出目录、-p/--playlist指定播放列表 ID、--verbose打开 DEBUG 日志三个脚本以及后续各阶段脚本通用此参数约定。6.2 阶段二说话人识别transcript_enrich_speaker.py这是管道中唯一用到OpenAI Functions函数调用的阶段。脚本把「视频标题 描述 前 3 分钟转录文本」SEGMENT_MIN_LENGTH_MINUTES 3拼接为输入定义了一个名为get_speaker_name的工具定义见 L58-L75并以tool_choice强制模型调用该函数从文本中提取说话人姓名列表系统提示词要求模型优先从标题中识别、且姓名通常不超过 3 个单词。提取结果写回元数据文件的speaker字段。实现上有三个值得注意的工程点客户端以base_urlf{RESOURCE_ENDPOINT.rstrip(/)}/openai/v1/初始化 OpenAI SDKL41-L44从而把请求指向 Azure OpenAI 的兼容端点model参数实际传的是部署名由AZURE_OPENAI_MODEL_DEPLOYMENT_NAME控制调用使用 Responses APIclient.responses.createtemperature0.0保证提取结果的确定性max_output_tokens512用tenacity装饰器做重试随机指数退避6~10 秒、最多 4 次但BadRequestError不重试并发为 10 线程且错误累计超过 100 次时主动退出避免空转消耗配额。6.3 阶段三分钟级分桶transcript_enrich_bucket.py该阶段把整段长转录切分为检索单元。核心参数L19-L22SEGMENT_LENGTH_MINUTES片段目标时长命令行-m可覆盖未指定时默认 5 分钟编排脚本固定传 3PERCENTAGE_OVERLAP 0.05每个新片段的前 5% 文本会追加到上一片段末尾用于平滑跨片段的上下文衔接见 append_text_to_previous_segmentMAX_TOKENS 2048用tiktoken按gpt-4o-mini编码计算 token 数单个片段超过该上限即强制切分为下一步摘要请求预留空间。每个片段都会内嵌说话人与标题上下文如The speakers name is ...输出统一写入output/master_transcriptions.json。6.4 阶段四摘要生成transcript_enrich_summaries.py读取master_transcriptions.json为每个片段调用对话模型生成约 60 词的权威摘要。关键参数系统提示词限定“60 词摘要且不要以 ‘This video’ 开头”L88temperature0.7、top_p0.0、max_output_tokens512、超时 30 秒并发 10 线程tenacity重试最多 20 次10~45 秒随机退避若响应状态不是completed提示增大 max tokens 并退出最终按videoId与起始时间排序后写出output/master_enriched.json每个片段新增summary字段。这一步的产出决定了检索质量语义搜索示例中既会用summary做向量召回也会把完整片段文本交给模型做问答依据。6.5 阶段五向量嵌入transcript_enrich_embeddings.py该脚本使用AzureOpenAI客户端api_version2024-10-21L33-L37以text-embedding-ada-002部署对每个片段的text字段生成向量结果存到片段的ada_v2键。工程细节用cl100k_basetokenizer 预检超过 8191 token 的片段直接跳过ada-002 的输入上限为 8191 tokenL111-L112生成前先做文本归一化压缩多余空白、修正常见标点粘连幂等设计已含ada_v2键的片段直接复用不重复调用 APIL104-L106并发 6 线程、单请求超时 60 秒、每次调用后sleep(0.2)温和限速原地更新并保存output/master_enriched.json。6.6 阶段六精简索引transcript_enrich_lite.py最后一步非常轻量remove_text 把每个片段的text与description两个大字段剔除只保留videoId、title、speaker、start、seconds、summary、ada_v2等轻量字段写出output/master_enriched_lite.json。经编排脚本重命名后即为embedding_index_3m.json——仓库中保留的同名样例文件正是这一阶段的真实产物语义搜索示例应用会把它直接加载为内存向量库。7. 从源码结构看整体设计从源码结构可以推断出该管道的几条设计主线供读者在二次开发时参考文件即状态机每个阶段只消费上一阶段的固定文件名*.json→master_transcriptions.json→master_enriched.json→master_enriched_lite.json任何一步失败后可单独重跑对应脚本配合下载阶段的续传逻辑实现整体幂等并发与限流并重所有 API 密集阶段都采用「队列 固定线程数」模型下载 40 线程、摘要/说话人 10 线程、嵌入 6 线程并用tenacity统一处理瞬时故障token 预算前置分桶阶段就用tiktoken控制片段长度避免后续摘要与嵌入请求超限失败精简与完整双版本embedding_index_full_3m.json保留原文便于调试与问答embedding_index_3m.json去掉原文便于应用侧快速加载。8. 小结这套脚本集完整示范了「原始视频 → 可检索向量语料」的工业级数据制备范式Azure CLI 声明式创建资源、环境变量统一注入凭据、六阶段可断点重跑的富化管道以及函数调用、token 预算、重试退避等落地技巧。掌握它之后你可以把播放列表 ID、分桶分钟数、模型部署名替换为自己的语料与资源复用到任何「视频/会议转录语义检索」场景这也是第 08 课08-building-search-applications语义搜索示例能够开箱即用的数据基础。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考