yutu:基于Go的YouTube自动化工具,集成CLI、MCP与AI智能体
1. 项目概述与核心价值
如果你和我一样,运营着一个YouTube频道,那你一定对“内容创作”和“频道运营”这两座大山深有体会。从视频剪辑、渲染、上传,到标题优化、标签设置、缩略图设计,再到发布后的评论互动、数据分析……每一个环节都耗时耗力。更别提还要研究算法、追踪趋势、优化SEO,试图在激烈的竞争中让视频被更多人看到。很多时候,我们花在“运营”上的时间,甚至超过了“创作”本身。这让我一直在寻找一个能将这些繁琐工作自动化的工具,直到我遇到了 yutu 。
yutu 不是一个简单的上传脚本,它是一个用 Go 语言编写的、功能全面的 YouTube 自动化“瑞士军刀”。它集成了命令行工具(CLI)、模型上下文协议(MCP)服务器和 AI 智能体三种形态,目标只有一个:将你从重复、机械的 YouTube 工作流中解放出来。无论是个人创作者想要节省时间,还是团队希望建立标准化的发布流程,甚至是开发者想将 YouTube 操作集成到自己的应用中, yutu 都提供了一个强大而灵活的解决方案。它的核心价值在于,通过程序化和智能化的方式,帮你实现更高的点击率、更强的观众互动和更快的频道增长,而这一切,只需要你专注于最核心的内容创作。
2. 核心架构与设计思路拆解
yutu 的设计哲学非常清晰: 模块化、可扩展、智能化 。它不是一个大而全的“黑箱”,而是将 YouTube 庞杂的 API 功能进行了清晰的解构和封装,让用户可以根据需求灵活组合。
2.1 三层架构:CLI、MCP 与 AI 智能体
yutu 提供了三种使用模式,分别面向不同场景的用户:
-
命令行界面(CLI) :这是最基础、最直接的控制层。它提供了超过 20 个子命令,覆盖了 YouTube Data API v3 的绝大部分功能。从
yutu video upload上传视频,到yutu comment list管理评论,再到yutu channel update更新频道信息,每一个操作都有对应的命令。对于熟悉命令行、喜欢脚本化自动化的开发者或运维人员来说,这是最高效的方式。你可以将yutu命令写入 Shell 脚本、CI/CD 流水线(如 GitHub Actions),实现无人值守的自动化发布。 -
模型上下文协议服务器(MCP Server) :这是
yutu最具前瞻性的设计。MCP 是一种允许 AI 助手(如 Claude、Cursor 的内置 AI)安全、可控地调用外部工具和数据的协议。通过将yutu配置为 MCP 服务器,你可以在 VS Code、Cursor 或 Claude Desktop 中,直接用自然语言与 AI 助手对话来操作 YouTube。例如,你可以对 Claude 说:“帮我把~/Videos/final.mp4上传到我的频道,标题设为‘Go 语言入门教程’,并添加到‘编程教程’播放列表。” AI 助手会理解你的意图,并通过yutuMCP 服务器调用相应的 API 完成操作。这极大地降低了技术门槛,让不熟悉命令行的创作者也能享受自动化的便利。 -
AI 智能体模式(Agent) :这是自动化程度的最高形态。在此模式下,
yutu自身成为一个具备决策能力的 AI 系统。它采用多智能体架构,包含一个 协调器(Orchestrator) 和三个功能智能体: 检索器(Retrieval) 、 修改器(Modifier) 和 销毁器(Destroyer) 。协调器负责理解你的高级目标(如“优化我上周视频的 SEO”),并制定计划、分派任务。检索器只读地获取数据(如搜索关键词、分析竞品视频),修改器负责创建和更新内容(如上传视频、修改描述),销毁器则谨慎处理删除操作。这个模式适合执行复杂的、多步骤的频道运营策略。
设计思路解析 :这种三层架构确保了工具的普适性和先进性。CLI 满足了程序化集成的刚性需求;MCP 服务器紧跟 AI 原生应用的趋势,拥抱自然交互;AI 智能体则代表了自动化运维的未来方向。用户可以从 CLI 开始,逐步过渡到更智能的 MCP 和 Agent 模式,学习曲线平滑。
2.2 认证与安全机制
与 YouTube API 交互,安全是第一位的。 yutu 采用了标准的 OAuth 2.0 认证流程,这也是所有 Google 服务的标准做法。你需要先在 Google Cloud Platform 创建一个项目,启用 YouTube Data API,并配置 OAuth 同意屏幕和客户端密钥( client_secret.json )。首次运行 yutu auth 命令时,会在浏览器中打开 Google 授权页面,你登录并授权后, yutu 会获得一个访问令牌并缓存在本地的 youtube.token.json 中。这个令牌包含 refresh_token ,可以在过期后自动刷新,从而实现长期有效的访问。
实操心得 :很多人卡在第一步的 GCP 项目配置上。这里有个关键点:在创建 OAuth 客户端 ID 时,应用类型要选择“桌面应用”。生成的
client_secret.json文件必须妥善保管,不要提交到公开的代码仓库。yutu支持通过环境变量YUTU_CREDENTIAL直接传递 JSON 字符串或 Base64 编码的内容,这在 Docker 或服务器环境中特别有用,避免了管理密钥文件的麻烦。
3. 详细安装与配置指南
yutu 的安装方式非常多样,几乎覆盖了所有主流平台和包管理器,这体现了其作为开发者友好工具的诚意。
3.1 各平台安装方法详解
macOS (推荐使用 Homebrew) 对于 macOS 用户,最省心的方式是使用 Homebrew。只需打开终端,执行 brew install yutu 即可。Homebrew 会自动处理依赖、更新和卸载,管理起来非常方便。
Linux Linux 用户可以通过运行官方的一键安装脚本: curl -sSfL https://raw.githubusercontent.com/eat-pray-ai/yutu/main/scripts/install.sh | bash 。这个脚本会自动检测系统架构,下载对应的预编译二进制文件,并放置到系统的可执行路径下。
Windows Windows 用户迎来了福音,可以通过 Winget 包管理器直接安装: winget install yutu 。这可能是 Windows 上安装命令行工具最现代、最简洁的方式了。
Docker 对于喜欢容器化部署,或者希望在隔离环境中运行的用户,Docker 是最佳选择。你可以拉取官方镜像: docker pull ghcr.io/eat-pray-ai/yutu:latest 。运行容器时,需要将包含 client_secret.json 和 youtube.token.json 的目录挂载到容器内,并映射端口(如果使用 MCP 服务器)。
Node.js 与 Go 作为补充, yutu 也提供了 npm 包 ( npm i -g @eat-pray-ai/yutu ) 和 Go 模块 ( go install github.com/eat-pray-ai/yutu@latest ) 的安装方式。这对于已经拥有相应生态的用户来说,集成起来更顺手。
3.2 安装验证与完整性检查
安装完成后,强烈建议进行完整性验证。 yutu 项目为每个发布版本提供了密码学签名证明。你可以使用 GitHub CLI 的 gh attestation verify 命令来验证二进制文件的来源和完整性。例如,在 Linux/macOS 上验证: gh attestation verify $(which yutu) --repo eat-pray-ai/yutu 。这一步能确保你下载的正是官方发布的、未被篡改的程序,对于处理敏感频道数据的工具来说,这个安全环节至关重要。
3.3 环境变量配置详解
yutu 的行为可以通过环境变量进行精细控制,这是实现灵活部署的关键。
-
YUTU_CREDENTIAL: 指定 OAuth 客户端密钥。它不仅支持文件路径,还支持直接传入 JSON 字符串或 Base64 编码的字符串。这在云函数或 Kubernetes Secret 中配置时极其有用。 -
YUTU_CACHE_TOKEN: 指定缓存令牌的文件路径或内容。同上,支持多种传入方式。 -
YUTU_ROOT: 定义文件解析的根目录。当你在命令中使用相对路径时(如上传视频./my_video.mp4),会基于此目录进行查找。 -
YUTU_LOG_LEVEL: 控制日志输出级别,可选DEBUG,INFO,WARN,ERROR。在排查问题时,设置为DEBUG可以看到详细的 HTTP 请求和响应信息。
注意事项 :在 Docker 或 CI/CD 环境中,通常通过环境变量传递
YUTU_CREDENTIAL和YUTU_CACHE_TOKEN的 Base64 值是最佳实践。这样可以避免在容器镜像或构建日志中留下密钥文件。例如:docker run -e YUTU_CREDENTIAL=$(base64 -w0 client_secret.json) ...。
4. 核心功能实操与案例解析
了解了架构和安装后,我们进入最实用的部分:如何用 yutu 真正地自动化你的工作流。我将以几个典型场景为例,拆解操作步骤和背后的逻辑。
4.1 场景一:自动化视频上传与发布
这是最基础也是最常用的功能。假设你每周都要发布一个教程视频,流程是:渲染视频文件 -> 上传到 YouTube -> 设置标题、描述、标签 -> 设置为“私享”等待审核 -> 定时发布。
传统手动流程 :你需要打开浏览器,进入 YouTube Studio,点击上传,等待上传进度条,填写一堆表单,选择发布时间……整个过程至少需要 5-10 分钟,且无法批量处理。
使用 yutu CLI 自动化 : 你可以编写一个简单的 Shell 脚本 publish.sh :
#!/bin/bash
VIDEO_FILE=$1
TITLE="Go 教程: $(date +%Y%m%d)"
DESCRIPTION="这是本周的 Go 语言教程,涵盖了... #Go #编程"
TAGS="golang, tutorial, programming"
# 使用 yutu 上传视频,初始状态设为 private(私享)
yutu video upload \
--file "$VIDEO_FILE" \
--title "$TITLE" \
--description "$DESCRIPTION" \
--tags "$TAGS" \
--privacyStatus "private" \
--categoryId "28" \ # “科学与技术”类别
--playlistId "PLxxxxxx" \ # 你的“编程教程”播放列表 ID
--license "creativeCommon" \ # 使用知识共享许可
--embeddable true \ # 允许嵌入
--publicStatsViewable true # 公开观看数据
echo "视频上传成功,状态为私享。请在 YouTube Studio 中检查并安排发布时间。"
关键参数解析 :
--privacyStatus “private”:这是关键技巧。直接设置为private,上传后视频不会对任何人可见。你可以在脚本运行后,登录 YouTube Studio 进行最终检查(缩略图、卡片等),然后手动或通过另一个脚本调用yutu video update --status privatetoPublic来改为公开,或直接使用--schedule参数设置未来发布时间。--categoryId:YouTube 的视频分类 ID,28代表“科学与技术”。你可以通过yutu videoCategory list命令查看所有可用的分类 ID。--playlistId:上传后自动将视频添加到指定播放列表。你需要提前知道播放列表的 ID,可以通过yutu playlist list --mine获取。
进阶:集成到 GitHub Actions 实现 CI/CD 对于团队或追求极致自动化的个人,可以将此脚本集成到视频渲染后的自动化流程中。例如,当你使用 FFmpeg 渲染完视频后,自动触发一个 GitHub Actions 工作流,由 yutu 完成上传。
# .github/workflows/upload-video.yml
name: Upload to YouTube
on:
workflow_dispatch: # 手动触发
inputs:
video_path:
description: 'Path to video file'
required: true
jobs:
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download rendered video
run: curl -L -o video.mp4 ${{ github.event.inputs.video_path }}
- name: Upload to YouTube
uses: eat-pray-ai/youtube-uploader@v1 # 官方提供的 Action
with:
credential: ${{ secrets.YOUTUBE_CREDENTIAL }} # Base64 编码的 client_secret.json
token: ${{ secrets.YOUTUBE_TOKEN }} # Base64 编码的 youtube.token.json
file: video.mp4
title: "Automated Upload: ${{ github.sha }}"
privacyStatus: private
4.2 场景二:通过 MCP 与 AI 助手协同工作
如果你不喜欢写脚本,或者任务比较复杂、多变,那么 MCP 模式是你的绝佳选择。以在 VS Code + Claude 扩展中配置为例:
- 安装
yutu:确保已通过 Homebrew 或其它方式安装。 - 配置 MCP 设置 :在 VS Code 的设置中(或直接编辑
settings.json),添加 MCP 服务器配置。关键是要正确指向yutu二进制和你的认证文件 绝对路径 。 - 与 Claude 对话 :在 VS Code 中打开 Claude 侧边栏,你现在可以这样提问:
- “ 查看我频道的最新5个视频。 ” -> Claude 会调用
yutu的检索能力,列出视频。 - “ 为视频 [视频ID] 生成5个基于内容的关键词标签。 ” -> Claude 会分析视频标题和描述(通过
yutu获取),并调用其自身的语言模型生成建议。 - “ 将视频 [视频ID] 的标题从‘测试’改为‘正式发布:XXX 功能详解’。 ” -> Claude 会通过
yutu的修改器执行更新操作。
- “ 查看我频道的最新5个视频。 ” -> Claude 会调用
实操心得 :MCP 模式最大的优势是 动态工作流 。你无需预先知道所有命令和参数,可以用自然语言描述你的目标,AI 助手会帮你拆解步骤并执行。这对于探索性任务(如“分析我的频道和竞品频道在标题上的差异”)特别有效。但要注意,涉及删除或重要修改时,最好让 AI 助手先向你确认再执行。
4.3 场景三:使用 AI 智能体执行复杂策略
当你有一个明确的、多步骤的运营目标时,可以启动 yutu 的 Agent 模式。假设你的目标是“ 提高我最新科技评测视频的观看时长 ”。
-
设置环境变量 :你需要准备 Gemini API 密钥(目前 Agent 模式仅支持 Google Gemini 模型),并设置模型。
export YUTU_ADVANCED_MODEL=google:gemini-2.0-flash-exp export YUTU_LITE_MODEL=google:gemini-2.0-flash-exp export YUTU_LLM_API_KEY=your_actual_gemini_api_key_here -
启动 Agent 并下达指令 :
yutu agent --args “console” # 进入交互式控制台模式在控制台中,你可以输入自然语言指令:“分析我频道里最近一个关于‘手机X’的视频,与三个热门同类评测视频进行对比,给出优化标题、描述前200字和标签的建议,并直接应用这些优化。”
-
智能体工作流分解 :
- 协调器 理解指令,制定计划:1) 检索自己最近的视频;2) 搜索同类热门视频;3) 分析对比;4) 生成优化建议;5) 应用修改。
- 检索器 执行第1、2步,获取相关视频数据。
- 协调器 分析数据,生成优化文案。
- 修改器 执行第5步,调用
yutu video update命令更新视频元数据。
这个过程中,你只需要给出一个高级目标,剩下的分析、决策、执行都由智能体协作完成。 Destroyer 智能体在这个任务中不会被调用,因为它只负责删除操作。
注意事项 :Agent 模式目前处于积极开发阶段,对 Gemini API 的依赖和调用会产生费用。对于简单的、确定性的任务,使用 CLI 或 MCP 可能更直接、成本更低。但对于开放性的、需要分析和策略的任务,Agent 模式能发挥巨大价值。建议从简单的指令开始测试,逐步增加复杂度。
5. 高级功能与集成生态
yutu 的功能远不止上传和更新。它几乎封装了 YouTube Data API v3 的所有端点,这意味着你可以用它管理频道的方方面面。
5.1 全面资源管理
- 评论管理 :
yutu commentThread list可以列出视频下的所有评论线程,yutu comment insert可以以频道身份发布新评论或回复。你可以写一个脚本,自动回复包含特定关键词(如“谢谢”)的评论,或隐藏含不当语言的评论。 - 播放列表深度操作 :除了创建 (
playlist insert) 和列表 (playlist list),你还可以管理播放列表中的项目 (playlistItem),实现视频的自动排序、批量添加或移除。 - 频道品牌化 :
yutu channelBanner和yutu watermark命令允许你更新频道横幅图片和视频水印。你可以结合定时任务,在特定节日自动更换频道横幅。 - 数据分析基础 :通过
yutu activity和yutu channel的相关命令,可以获取频道的基本活动信息和统计数据,为更复杂的分析提供数据源。
5.2 “Skills”技能集成
yutu 项目还提供了一个 “Skill” 。在 AI 智能体领域,Skill 是一个预定义的、可重用的能力包。你可以通过 npx skills add 命令将 yutu 的 YouTube 技能添加到支持 OpenCode 标准的 AI 智能体平台(如某些自定义的 AI 工作流工具中)。这相当于为其他 AI 系统安装了一个“YouTube 操作插件”,让它们也具备了通过 yutu 操作 YouTube 的能力,极大地扩展了其应用生态。
5.3 与现有工具链集成
yutu 作为 CLI 工具,可以无缝嵌入到你已有的工具链中:
- 与 FFmpeg 结合 :先使用 FFmpeg 进行视频压缩、格式转换或片头片尾合成,然后用
yutu上传。 - 与图形工具结合 :使用 ImageMagick 或 Python PIL 库自动生成缩略图,然后用
yutu thumbnail set上传。 - 与监控脚本结合 :写一个 Cron 任务,定期执行
yutu commentThread list,监控最新评论,发现负面舆情时发送警报。
6. 常见问题、排查技巧与避坑指南
在实际使用中,你可能会遇到一些问题。以下是我在深度使用过程中总结的一些常见坑点和解决方案。
6.1 认证与权限问题
问题1:运行 yutu auth 时,浏览器授权后提示“此应用未经过验证”。
- 原因 :在 GCP 创建的 OAuth 同意屏幕,如果发布状态是“测试中”,且添加的测试用户列表中没有你当前登录的 Google 账号,就会出现此警告。
- 解决 :在 GCP 控制台的“OAuth 同意屏幕”中,将“发布状态”改为“生产环境”(需要提交验证,但个人使用通常可跳过),或者确保你的 Google 账号被添加到了“测试用户”列表中。
问题2:上传视频时提示“权限不足”或“禁止访问”。
- 原因 :OAuth 令牌 (
youtube.token.json) 中存储的授权范围可能不包含 YouTube 上传权限。或者令牌已过期且刷新失败。 - 解决 :删除本地的
youtube.token.json文件,重新运行yutu auth进行授权。在授权页面,请确保勾选了所有需要的 YouTube 权限(通常默认全选即可)。检查你的 GCP 项目是否已成功启用“YouTube Data API v3”。
6.2 网络与上传问题
问题3:上传大视频时超时或失败。
- 原因 :CLI 工具默认可能没有设置较长的超时时间,或者网络不稳定。YouTube 上传 API 对于大文件需要分块上传。
- 解决 :
yutu内部应该已经处理了分块上传。但如果遇到问题,可以尝试:- 检查网络连接。
- 在命令中显式设置
--timeout参数(如果命令支持)为一个更大的值(如30m表示30分钟)。 - 考虑在离目标 YouTube 数据中心较近的云服务器上运行上传任务。
问题4:使用 Docker 运行时,无法打开浏览器进行 OAuth 认证。
- 原因 :Docker 容器内没有图形界面和浏览器。
- 解决 :这是预期行为。你需要先在宿主机上完成一次
yutu auth认证,生成youtube.token.json文件。然后将这个令牌文件(以及client_secret.json)通过卷挂载 (-v) 的方式提供给 Docker 容器使用。或者,使用YUTU_CACHE_TOKEN环境变量直接传入令牌内容。
6.3 功能与使用问题
问题5:某些命令(如涉及 Analytics 或 Reporting)返回“API 未启用”。
- 原因 :
yutu的一些高级功能需要额外的 YouTube API。例如,获取详细分析数据需要启用 YouTube Analytics API 和 YouTube Reporting API 。 - 解决 :前往 GCP 控制台,在“启用 API 和服务”页面中,搜索并启用这两个 API。然后重新授权获取包含新权限的令牌。
问题6:Agent 模式不执行任务,或返回模型调用错误。
- 原因 :可能是 Gemini API 密钥未设置或无效,或者指定的模型名称不正确。
- 解决 :
- 确认
YUTU_LLM_API_KEY环境变量已设置且有效。 - 确认
YUTU_ADVANCED_MODEL和YUTU_LITE_MODEL的格式为provider:modelName(例如google:gemini-2.0-flash-exp)。可以通过查阅 Gemini API 文档获取最新的可用模型列表。 - 运行
yutu agent --args “help”查看 Agent 模式的内置帮助和示例。
- 确认
6.4 性能与最佳实践
避坑技巧1:善用环境变量而非文件 在服务器或自动化环境中,将 client_secret.json 和 youtube.token.json 的内容进行 Base64 编码,然后通过环境变量 YUTU_CREDENTIAL 和 YUTU_CACHE_TOKEN 传递,比管理物理文件更安全、更便捷。
避坑技巧2:对删除操作保持敬畏 yutu 提供了 destroyer 智能体和 delete 子命令。在执行任何删除操作(删除视频、评论、播放列表)前,务必双重确认。尤其是在脚本中,建议先使用 list 命令预览目标,或先尝试 --dry-run (如果支持)模拟运行。
避坑技巧3:从简单任务开始 如果你刚接触 yutu ,不要一开始就尝试复杂的 Agent 多步策略。建议从最基础的 CLI 命令开始,例如 yutu channel list --mine 来获取你的频道信息, yutu video list --mine 来列出视频。熟悉基本操作后,再尝试上传单个视频,最后再探索 MCP 和 Agent 模式。
避坑技巧4:关注速率限制 YouTube Data API 有严格的配额限制。虽然 yutu 本身不会绕过限制,但如果你在脚本中频繁调用(例如批量处理评论),可能会很快耗尽每日配额。建议在脚本中加入延迟(如 sleep 1 ),并监控 GCP 控制台中的配额使用情况。对于大规模操作,考虑申请更高的配额。
更多推荐



所有评论(0)