OpenViking vikingbot summarize 技能实战:URL、本地文件与 YouTube 的一键摘要与转写指南 OpenViking vikingbot summarize 技能实战URL、本地文件与 YouTube 的一键摘要与转写指南【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVikingsummarize是 OpenViking 仓库内 vikingbot 内置工作区技能Skill之一其定义位于 bot/workspace/skills/summarize/SKILL.md。它以summarize.shCLI 为核心让 Agent 能够在对话中直接对网页 URL、本地文件PDF 等以及 YouTube 视频执行摘要或最佳努力转写best-effort transcript无需依赖yt-dlp等额外工具。读完本文你将掌握该技能的触发方式、命令行用法、模型与 API Key 配置、常用 flag、配置文件结构以及它在 vikingbot 技能加载体系中的底层工作机制。技能是什么一段给 Agent 的指令而不是一段普通脚本在 vikingbot 中Skill 是一份 Markdown 指令文件SKILL.md用来教会 Agent“如何完成某一类任务”区别于代表“具体操作”的 ToolJSON Schema 函数。二者关系与运行机制在 bot/docs/en/concepts/02-agent-capabilities.md 中有明确说明Skill告诉 Agent 如何完成一类任务形式是SKILL.md指令与资源Tool让 Agent 执行一次具体操作形式是注册给模型的 JSON Schema 函数。summarize技能位于仓库 bot/workspace/skills 目录下与其他内置技能github、weather、tmux、skill-creator等并列总览见 bot/workspace/skills/README.md。SKILL.md 的结构与 frontmatter每个技能目录下的SKILL.md由两部分组成YAML frontmatter元数据与面向 Agent 的 Markdown 指令正文。summarize技能的 frontmatter 如下--- name: summarize description: Summarize or extract text/transcripts from URLs, podcasts, and local files (great fallback for transcribe this YouTube/video). homepage: https://summarize.sh metadata: {vikingbot:{emoji:,requires:{bins:[summarize]},install:[{id:brew,kind:brew,formula:steipete/tap/summarize,bins:[summarize],label:Install summarize (brew)}]}} ---这段元数据承载了 vikingbot 技能系统识别与过滤该技能所需的全部关键信息name技能名与目录名一致summarizedescription技能用途描述会被加载器展示给模型帮助模型在合适的场景选中该技能homepage上游工具summarize.sh的官方主页metadata.vikingbotvikingbot 专有元数据包含emoji展示用图标requires.bins该技能运行所依赖的可执行命令这里是summarizeinstall安装指引macOS 下可通过brew安装steipete/tap/summarize。注意metadata是一个 JSON 字符串。在 bot/vikingbot/agent/skills.py 中_parse_vikingbot_metadata专门处理这种“scoped or plain”的元数据先尝试当作 dict否则用json.loads解析字符串最终从vikingbot作用域中取出配置。依赖检查summarize 未安装时技能会被标记为不可用requires.bins不是摆设。在 bot/vikingbot/agent/skills.py 的_check_requirements中加载器会遍历requires.bins并通过shutil.which检查对应命令是否存在同时对requires.env中的环境变量做os.environ.get检查任一依赖不满足该技能就会被判定为不可用。这意味着如果用户机器上没有安装summarize命令Agent 看到的就是availablefalse的技能。此时构建 skills 摘要时加载器会通过_get_missing_requirementsskills.py输出缺失项例如CLI: summarize子代理 prompt 中也会提示“可以尝试用 apt/brew 安装依赖”。因此第一步通常是安装 CLIbrew install steipete/tap/summarize这一“依赖检查 缺失提示 允许 Agent 自行安装”的行为由 bot/tests/test_skills_metadata.py 中的test_skill_requirements_support_nested_yaml用例做了回归验证。何时使用触发短语SKILL.md明确列出了 Agent 应立即使用该技能的触发场景用户说“use summarize.sh”用户问“what’s this link/video about?”这个链接/视频讲什么用户要求“summarize this URL/article”摘要这个 URL/文章用户要求“transcribe this YouTube/video”转写这个 YouTube 视频——技能会做最佳努力转写无需yt-dlp。也就是说无论用户想要“网页摘要”“本地文件摘要”还是“视频转写/摘要”Agent 都应优先调用summarize技能完成任务。快速上手三条核心命令技能文档给出的 Quick start 示例summarize https://example.com --model google/gemini-3-flash-preview summarize /path/to/file.pdf --model google/gemini-3-flash-preview summarize https://youtu.be/dQw4w9WgXcQ --youtube auto第一个参数是目标URL 或本地文件路径--model显式指定用于摘要的模型处理 YouTube 链接时需要--youtube auto让工具决定最佳处理方式。summarize的模型标识采用provider/model形式例如google/gemini-3-flash-preview、openai/gpt-5.2便于在不同厂商之间切换。YouTube摘要与转写的区别对 YouTube 视频技能区分两种产出最佳努力转写仅对 URL 有效summarize https://youtu.be/dQw4w9WgXcQ --youtube auto --extract-only--extract-only表示只抽取文本/字幕内容而不生成摘要相当于“把视频内容变成文字”。处理超大转写结果的策略技能文档特别叮嘱 Agent——如果用户要的是转写、但结果非常庞大应先返回一个紧凑的摘要再询问用户希望展开哪个段落/时间范围。这是一条重要的交互规范避免一次性输出海量文本淹没对话同时保留按需深挖的能力。模型与 API Key 配置summarize支持多家大模型厂商对应 API Key 环境变量如下厂商环境变量OpenAIOPENAI_API_KEYAnthropicANTHROPIC_API_KEYxAIXAI_API_KEYGoogleGEMINI_API_KEY别名GOOGLE_GENERATIVE_AI_API_KEY、GOOGLE_API_KEY默认模型若未通过--model指定默认使用google/gemini-3-flash-preview。使用前只需为所选厂商设置对应的环境变量即可例如export GEMINI_API_KEYyour-key summarize https://example.com # 使用默认模型 google/gemini-3-flash-preview常用 flag 一览技能文档列出的实用参数Flag作用--length short\|medium\|long\|xl\|xxl\|chars控制摘要长度可选预置档位或直接指定字符数--max-output-tokens count限制输出 token 上限--extract-only仅抽取文本/转写不生成摘要仅 URL 有效--json输出机器可读的 JSON 格式--firecrawl auto\|off\|always使用 Firecrawl 作为兜底抽取方案用于被拦截的站点--youtube autoYouTube 处理模式设置APIFY_API_TOKEN时可用 Apify 作为兜底组合使用示例# 生成 JSON 格式、长度 medium 的摘要 summarize https://example.com --length medium --json # 对被反爬拦截的站点启用 Firecrawl 兜底 summarize https://blocked-site.com --firecrawl auto配置文件~/.summarize/config.json可选配置文件为~/.summarize/config.json可在不修改命令行的情况下固化默认参数。技能文档给出的最小示例{ model: openai/gpt-5.2 }即在配置文件中设置默认模型为openai/gpt-5.2此后不带--model调用时将优先使用配置中的模型命令行显式传入的参数仍可覆盖配置。可选服务FIRECRAWL_API_KEY用于被封锁/反爬站点的兜底抽取对应--firecrawlAPIFY_API_TOKEN用于 YouTube 处理的 Apify 兜底对应--youtube auto。两个都是可选增强项不设置时普通 URL 与 YouTube 链接的基本处理依然可用设置后能提升对复杂站点的成功率。技能在 vikingbot 中如何被加载与使用理解了 CLI 用法之后再看仓库源码能完整还原该技能在 Agent 运行时中的生命周期。渐进式加载先摘要、按需读全文vikingbot 的技能采用**渐进式加载progressive loading**策略见 bot/docs/en/concepts/02-agent-capabilities.md每一轮对话都会携带 Always Skills 的完整内容其他技能只贡献 name、description 和 path直到 Agent 用read_file读取完整内容。落实到代码上SkillsLoader.build_skills_summaryskills.py会为每个可用技能生成如下形式的 XML 摘要块塞进系统提示skills skill availabletrue namesummarize/name descriptionSummarize or extract text/transcripts from URLs, podcasts, and local files .../description locationskills/summarize/SKILL.md/location /skill /skillssummarize技能没有always: true标记因此它属于“按需加载”类模型先看到名称与描述判断任务匹配后才调用read_file读取 skills/summarize/SKILL.md 的完整指令包括上面提到的各条命令与触发规范再执行exec调用summarizeCLI。工作区技能 vs 内置技能同名时工作区优先SkillsLoader.load_skillskills.py的查找顺序是先查当前工作区的skills/name/SKILL.md找不到再查内置目录BUILTIN_SKILLS_DIR即仓库中的bot/workspace/skills。因此用户可以放置同名技能到自己的工作区来覆盖内置行为。主 Agent 与子代理都能使用技能该技能体系同样适用于后台子代理SubagentManager._build_subagent_skills_contextbot/vikingbot/agent/subagent.py会为主 Agent 和子代理构造一致的技能上下文——先注入always技能的完整内容再注入所有可用技能的摘要清单并提示“Skill 的可用性为 false 时需要先安装依赖可尝试 apt/brew 安装”。这与技能 frontmatter 中的installbrew install steipete/tap/summarize形成了闭环依赖缺失 → 技能标记不可用 → Agent 依据安装指引自行安装 → 技能变为可用。技能的边界不自动获得额外权限需要强调的是技能只提供“做法的指导”不自动授予额外能力。正如 bot/docs/en/concepts/02-agent-capabilities.md 所述一个 Skill 可以编排多个 Tool但它不会自动获得额外权限工具可见性仍取决于运行时模式、渠道设置、请求参数与沙箱策略。也就是说即使summarize技能要求调用 CLIAgent 仍需要拥有exec工具权限受沙箱后端约束才能真正执行summarize命令。完整实战流程从“用户提问”到“返回摘要”综合以上所有机制一次典型的 summarize 调用在 vikingbot 中的完整链路如下用户在任意接入渠道提问“这个链接讲了什么”vikingbot 构建上下文时通过SkillsLoader.build_skills_summary将summarize的名称、描述注入系统提示模型判断任务匹配summarize技能description 中的触发语义命中用read_file读取 bot/workspace/skills/summarize/SKILL.md 获取完整指令模型按指令通过exec执行summarize url [--model ...] [--length ...]若目标为 YouTube 且用户要转写则追加--youtube auto --extract-only结果过大时先给紧凑摘要再询问展开范围工具返回结果Agent 将摘要以自然语言回复给用户。对于需要长时间运行的批量摘要还可以利用spawn将任务交给后台子代理执行子代理同样具备技能上下文见 subagent.py完成后通过消息总线向主会话汇报结果。小结summarize技能把summarize.sh这个轻量 CLI 无缝接入了 vikingbot 的技能体系通过标准化的SKILL.mdfrontmatter 声明依赖与安装方式借助渐进式加载让 Agent 按需读取指令并依赖exec沙箱完成真实调用。无论是网页文章、本地 PDF还是 YouTube 视频的摘要与转写用户都只需在对话中自然表达Agent 即可自行完成工具选择、命令拼接与结果组织是一条开箱即用的 Agent 内容理解能力。如需进一步了解技能机制的底层实现可继续阅读 bot/vikingbot/agent/skills.py、bot/vikingbot/agent/subagent.py 以及相关回归测试 bot/tests/test_skills_metadata.py、bot/tests/test_subagent_skills_context.py。【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考