yt-fts
是一个命令行程序,它使用 yt-dlp 抓取所有 YouTube 频道字幕并将其加载到可从命令行搜索的 sqlite 数据库中。它允许您查询特定关键字或短语的频道,并将生成包含该关键字的视频的带时间戳的 YouTube 网址。
它还支持使用 chromadb 通过 OpenAI 嵌入 API 进行语义搜索。
点
pip install yt-fts
download
下载频道的字幕。
将频道 url 作为参数。使用--jobs
标志指定并行下载的作业数。使用--cookies-from-browser
在请求中使用来自浏览器的 cookie,如果您收到要求您登录的错误,将会有所帮助。您还可以多次运行update
命令,以逐渐将更多视频添加到数据库。
yt-fts download --jobs 5 " https://www.youtube.com/@3blue1brown "
yt-fts download --cookies-from-browser firefox " https://www.youtube.com/@3blue1brown "
list
列出已保存的频道。
频道名称旁边的 (ss) 表示该频道启用了语义搜索。
yt-fts list
┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ID ┃ Name ┃ Count ┃ Channel ID ┃
┡━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 1 │ ChessPage1 (ss) │ 19 │ UCO2QPmnJFjdvJ6ch-pe27dQ │
│ 2 │ 3Blue1Brown │ 127 │ UCYO_jab_esuFRV4b17AJtAw │
│ 3 │ george hotz archive │ 410 │ UCwgKmJM4ZJQRJ-U5NjvR2dg │
│ 4 │ The Tim Dillon Show │ 288 │ UC4woSp8ITBoYDmjkukhEhxg │
│ 5 │ Academy of Ideas (ss) │ 190 │ UCiRiQGCHGjDLT9FQXFW0I3A │
└────┴───────────────────────┴───────┴──────────────────────────┘
search
(全文搜索)在保存的频道中全文搜索字符串。
# search in all channels
yt-fts search " [search query] "
# search in channel
yt-fts search " [search query] " --channel " [channel name or id] "
# search in specific video
yt-fts search " [search query] " --video-id " [video id] "
# limit results
yt-fts search " [search query] " --limit " [number of results] " --channel " [channel name or id] "
# export results to csv
yt-fts search " [search query] " --export --channel " [channel name or id] "
高级搜索语法:
搜索字符串支持 sqlite 增强查询语法。其中包括前缀查询之类的内容,您可以使用它们来匹配单词的各个部分。
# AND search
yt-fts search " knife AND Malibu " --channel " The Tim Dillon Show "
# OR SEARCH
yt-fts search " knife OR Malibu " --channel " The Tim Dillon Show "
# wild cards
yt-fts search " rea* kni* Mali* " --channel " The Tim Dillon Show "
您可以使用mbeddings
命令启用通道的语义搜索。这需要在环境变量OPENAI_API_KEY
中设置 OpenAI API 密钥,或者您可以使用--openai-api-key
标志传递密钥。
embeddings
获取指定通道的 OpenAI 嵌入
# make sure openAI key is set
# export OPENAI_API_KEY="[yourOpenAIKey]"
yt-fts embeddings --channel " 3Blue1Brown "
# specify time interval in seconds to split text by default is 30
# the larger the interval the more accurate the llm response
# but semantic search will have more text for you to read.
yt-fts embeddings --interval 60 --channel " 3Blue1Brown "
保存嵌入后,当您列出频道时,您将在频道名称旁边看到一个(ss)
,并且您将能够对该频道使用vsearch
命令。
llm
(聊天机器人)使用初始提示的语义搜索结果作为回答问题的上下文,启动与gpt-4o
OpenAI 模型的交互式聊天会话。如果它无法回答您的问题,它有一种机制可以通过基于对话运行目标查询来更新上下文。该频道必须启用语义搜索。
yt-fts llm --channel " 3Blue1Brown " " How does back propagation work? "
summarize
总结 YouTube 视频脚本,提供带时间戳的 URL。需要有效的 YouTube 视频 URL 或视频 ID 作为参数。如果成绩单不在数据库中,它将尝试抓取它。
yt-fts summarize " https://www.youtube.com/watch?v=9-Jl0dxWQs8 "
# or
yt-fts summarize " 9-Jl0dxWQs8 "
输出:
In this video, 3Blue1Brown explores how large language models (LLMs) like GPT-3
might store facts within their vast...
1 Introduction to Fact Storage in LLMs:
• The video starts by questioning how LLMs store specific facts and
introduces the idea that these facts might be stored in a particular part of the
network known as multi-layer perceptrons (MLPs).
• 0:00
2 Overview of Transformers and MLPs:
• Provides a refresher on transformers and explains that the video will focus
vsearch
(语义搜索) vsearch
代表“矢量搜索”。这要求您为具有embeddings
的通道启用语义搜索。它具有与search
相同的选项,但输出将按与搜索字符串的相似度排序,默认返回限制为 10。
# search by channel name
yt-fts vsearch " [search query] " --channel " [channel name or id] "
# search in specific video
yt-fts vsearch " [search query] " --video-id " [video id] "
# limit results
yt-fts vsearch " [search query] " --limit " [number of results] " --channel " [channel name or id] "
# export results to csv
yt-fts vsearch " [search query] " --export --channel " [channel name or id] "
导出搜索结果:
对于search
和vsearch
命令,您可以使用--export
标志将结果导出到 csv 文件。并将结果保存到当前目录中的 csv 文件中。
yt-fts search " life in the big city " --export
yt-fts vsearch " existing in large metropolaten center " --export
删除频道:您可以使用delete
命令删除频道。
yt-fts delete --channel " 3Blue1Brown "
更新频道:更新命令目前仅适用于全文搜索,不会更新语义搜索嵌入。
yt-fts update --channel " 3Blue1Brown "
导出频道的所有记录:
此命令将在当前工作目录中创建一个目录,其中包含指定频道的 YouTube 频道 ID。
# Export to vtt
yt-fts export --channel " [id/name] " --format " [vtt/txt] "