免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

summarize 冒烟测试实战指南:20 组合输入与模型矩阵的执行、记录与判定标准

summarize 冒烟测试实战指南:20 组合输入与模型矩阵的执行、记录与判定标准 summarize 冒烟测试实战指南20 组合输入与模型矩阵的执行、记录与判定标准【免费下载链接】summarizePoint at any URL/YouTube/Podcast or file. Get the gist. CLI and Chrome Extension.项目地址: https://gitcode.com/GitHub_Trending/summarize/summarize本篇指南围绕开源仓库 GitHub_Trending/summarize/summarize 的官方冒烟测试计划docs/smoketest.md展开系统讲解如何用 20 组 URL 文件输入、双模型组合对summarizeCLI 的「提取 → LLM 总结」全链路做快速回归验证。读完你将掌握测试前置条件的准备方法、20 用例矩阵的逐项执行命令模板、运行结果的记录要点提取路径、错误类型、退出码以及判断一次冒烟测试是否通过的 Bug bar 判定标准。冒烟测试的目标与定位冒烟测试Smoke Test是在不追求全量覆盖的前提下用最少用例快速确认核心链路没有断裂。本仓库的冒烟测试计划明确定义其目标Goal: exercise URL file inputs, extraction LLM summary paths, multiple models.即验证三条主干输入类型URL网页 / YouTube / 远程文件与本地文件路径处理链路内容提取extraction与 LLM 总结summary两条路径模型多样性至少覆盖 OpenAI 与 Gemini 两家提供方。这与仓库的实际架构一一对应summarize [input] [flags]接受 URL、本地文件路径或-stdin作为输入先做内容提取再调用 LLM 生成总结参见 docs/commands/summarize.md。从 package.json 可以看到pnpm summarize脚本映射到pnpm dev:cli即node --import ./scripts/register-typescript.mjs src/cli.ts冒烟测试中统一使用pnpm summarize -- ...形式即可在开发环境下直接执行。前置条件准备 API Key冒烟测试至少需要两个提供方的 API Key环境变量用途必要性OPENAI_API_KEY调用openai/gpt-5-mini必填GEMINI_API_KEY调用google/gemini-3-flash-preview必填FIRECRAWL_API_KEY验证 JS 重页面 / 被拦截页面的 Firecrawl 兜底路径可选配置方式为直接导出环境变量例如export OPENAI_API_KEYsk-... export GEMINI_API_KEY... export FIRECRAWL_API_KEYfc-... # 可选关于 Firecrawl 的兜底机制docs/firecrawl.md 明确--firecrawl auto默认仅在本地 HTML 提取看起来被拦截或内容过薄时启用 Firecrawl--firecrawl always则对非 YouTube URL 优先走 Firecrawl。冒烟测试中遇到 JS 重度页面如https://vercel.com时可结合该模式观察兜底是否生效。建议在执行前先验证 key 是否被正确识别加上--verbose观察模型尝试记录。从源码看--model参数会经 model-spec.ts 的parseRequestedModelId解析openai/gpt-5-mini、google/gemini-3-flash-preview这类带/的 id 会被识别为固定模型kind: fixed对应requiredEnv校验会检查OPENAI_API_KEY/GEMINI_API_KEY是否就绪。冒烟测试选用模型cheap / fast计划指定两个「便宜且快」的模型交替使用避免冒烟测试本身消耗过多成本与时间openai/gpt-5-minigoogle/gemini-3-flash-preview选择这两个模型并非随意。从 src/model-auto-rules.ts 的DEFAULT_RULES可以看出仓库默认的自动选型规则里google/gemini-3-flash与openai/gpt-5-mini正是网站、YouTube、文本、文件等各类输入的候选模型——冒烟测试显式指定它们本质上是把「自动选型大概率选中的模型」固定下来做确定性验证。同时要注意冒烟测试用的是固定模型--model这与默认的auto自动选型是两个不同路径。若想顺带验证自动选型可参考 docs/manual-tests.md 中的做法不传--model观察 spinner 中显示的选中模型。20 用例矩阵总览冒烟测试矩阵由 4 大类 20 个用例组成网站 10 个、YouTube 2 个、远程文件 4 个、本地文件 4 个。整体结构如下类别数量覆盖点WebsitesLLM summary10静态页、维基、技术文档、新闻站、GitHub、博客平台、JS 重页面、404YouTubeLLM summary2有字幕视频、无字幕视频Remote filesLLM summary4PDF、PNG、MP3、CSV 远程文件 URLLocal filesLLM summary4本地 txt / md / json / png合计20URL 文件 × 提取 总结 × 多模型下面逐类给出执行命令与预期观察点。网站类用例10 个HTML 提取与 Firecrawl 兜底网站用例覆盖从最朴素的静态 HTML 到 JS 重度渲染页面再到必然出错的 404 页面#目标 URL指定模型1https://example.com静态 HTMLgoogle/gemini-3-flash-preview2https://en.wikipedia.org/wiki/Swift_(programming_language)维基百科openai/gpt-5-mini3https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200MDN 文档google/gemini-3-flash-preview4https://www.reuters.com/world/路透社文章openai/gpt-5-mini5https://www.bbc.com/newsBBC 新闻google/gemini-3-flash-preview6https://github.com/vitejs/viteGitHub READMEopenai/gpt-5-mini7任意公开 Substack 文章google/gemini-3-flash-preview8任意公开 Medium 文章openai/gpt-5-mini9https://vercel.comJS 重度页面google/gemini-3-flash-preview10https://example.com/does-not-exist404 页面openai/gpt-5-mini命令模板pnpm summarize -- url --model model --length short例如用例 1pnpm summarize -- https://example.com --model google/gemini-3-flash-preview --length short执行要点与预期**静态 HTML用例 1**应直接走本地 HTML 提取无需 Firecrawl。**技术文档用例 3**考验页面正文提取对导航、侧栏等非正文内容的剔除能力。**新闻站用例 4、5**往往带有大量脚本与动态内容是提取器稳定性的常见考验。**JS 重度页面用例 9**本地提取可能得到过薄内容此时--firecrawl auto应自动触发兜底若配置了FIRECRAWL_API_KEY可进一步用--firecrawl always验证强制走 Firecrawl 的路径注意YouTube URL 会拒绝--firecrawl always见 docs/firecrawl.md。**404 页面用例 10**是典型的「预期出错但错误要友好」用例不应崩溃或挂起而应给出明确的非零退出与可读错误信息。从源码角度提取路径会在结束行finish line中体现。查看 src/run/finish-line-labels.ts 可以看到提取策略strategy可取值包括bird、xurl、twitter-syndication、nitter、firecrawl、html当走字幕/转录路径时会显示via transcript/provider。因此冒烟测试中通过观察结束行标签即可快速判断用例走的是html还是firecrawl。YouTube 用例2 个有字幕与无字幕两条路径#输入指定模型附加参数11有字幕的公开演讲/访谈视频google/gemini-3-flash-preview--youtube auto12无字幕的频道上传视频openai/gpt-5-mini--youtube auto命令模板pnpm summarize -- youtube-url --model model --youtube auto为什么用--youtube auto这是 YouTube 模式的默认值其兜底链在 docs/youtube.md 中有完整描述——auto依次尝试youtubei内部转录端点→captionTracks播放器响应中的字幕轨→yt-dlp若配置→ Apify若存在APIFY_API_TOKEN。冒烟测试正是要验证这条链路的端到端可用性用例 11有字幕应优先命中youtubei或captionTracks拿到结构化字幕段无需下载音频。用例 12无字幕字幕路径应失败后自动进入yt-dlp下载音频 转录Groq 优先其次本地 ONNX /whisper.cpp再退到 AssemblyAI / Gemini / OpenAI / FAL / Deepgram 云转录。这是最容易暴露「模式误判」问题的用例——如果无字幕视频被当作普通 URL 处理就属于 Bug bar 中的「Incorrect mode selection」。从 URL 路由实现看src/application/input-acquisition.ts 的resolveUrlAssetRoute在isYoutubeUrl为真时直接返回none即走 YouTube 专属流程而非通用资源路由从源码结构可以推断 YouTube URL 与普通 URL 在入口处即被分流冒烟测试正是要确认这条分流没有回归。远程文件用例4 个类型检测与下载上限#目标 URL指定模型13任意公开 PDF 报告 URLgoogle/gemini-3-flash-preview14https://upload.wikimedia.org/wikipedia/commons/7/70/Example.pngPNGopenai/gpt-5-mini15任意公开 MP3 样例 URLgoogle/gemini-3-flash-preview16任意公开 CSV 样例 URLopenai/gpt-5-mini命令模板pnpm summarize -- file-url --model model执行要点与预期PDF用例 13远程 PDF 会被下载后经 markitdown 等预处理转换为 Markdown 再喂给模型若 PDF 为纯图片型还可能在配置了OPENAI_API_KEY时触发 OCR 重试路径参见 docs/commands/summarize.md 中--preprocess的说明。PNG用例 14验证图片输入走视觉模型路径。MP3用例 15验证音频 URL 走「下载 → 转录 → 总结」链路。CSV用例 16验证普通二进制/文本文件类型被正确识别并以文本方式提取。这些用例对应的底层实现有两个值得在记录时留意的硬限制均可在源码中确认文件大小上限src/content/asset.ts中定义MAX_ASSET_BYTES_DEFAULT 50 * 1024 * 102450 MB下载远程文件时先检查content-length、下载后再核对实际字节数超限会抛出Remote file too large (... bytes). Limit is ... bytes.的错误见 src/content/asset.ts。类型支持检查下载完成后会调用assertAssetMediaTypeSupported校验媒体类型不支持的格式会以Unsupported file type明确报错见 src/run/flows/asset/extract.ts。本地文件用例4 个自建 fixture 的注意事项#输入路径指定模型备注17tests/fixtures/sample.txtgoogle/gemini-3-flash-preview不存在则创建18tests/fixtures/sample.mdopenai/gpt-5-mini不存在则创建19tests/fixtures/sample.jsongoogle/gemini-3-flash-preview不存在则创建20tests/fixtures/sample.pngopenai/gpt-5-mini不存在则创建必须是真实 PNG不要用 1×1 像素图命令模板pnpm summarize -- local-path --model model执行要点与预期计划明确要求「create if missing」。当前仓库的 tests/fixtures 目录中实际只包含image-only.pdf与xiaoyuzhou-episode.html两个文件因此执行前需要自行补齐sample.txt、sample.md、sample.json、sample.png四个 fixture。对sample.png特别强调「use a real PNG, not 1x1」1×1 像素图无法提供有效的视觉信息无法真正验证图片理解路径属于测试有效性而非功能正确性问题。本地文件的加载走loadLocalAsset见 src/content/asset.ts先做stat校验是否为普通文件、检查大小上限再按字节内容检测媒体类型。本地文件超过 50 MB 同样会报File too large错误。本地文本类文件txt / md / json应直接读取文本内容若本地文件是不受支持的二进制类型会收到Unsupported file type并提示先转换为文本或启用--preprocess auto走 markitdown。命令模板速查表冒烟测试计划给出了四类输入的统一命令模板整理如下输入类型命令模板网站 URLpnpm summarize -- url --model model --length shortYouTube URLpnpm summarize -- url --model model --youtube auto远程文件 URLpnpm summarize -- url --model model本地文件路径pnpm summarize -- path --model model几点模板细节模板中的--用于将 URL 与命令参数分隔开避免以-开头的参数被误解析。网站用例固定加--length short以缩短总结长度、加快测试YouTube 用例固定加--youtube auto以显式指定视频处理模式。若想放大成本/时间预算做更完整的验证可参考summarize命令的其余参数见 docs/commands/summarize.md--length支持short/medium/long/xl/xxl或字符数上限如20k--max-output-tokens可硬性限制输出 token--timeout可整体限制流水线时长默认2m。运行结果记录Capture要点冒烟测试的价值建立在可对比的记录之上。计划要求对每个用例记录以下信息1. 基础运行信息stdout stderr 完整日志退出码exit code——退出码为 0 表示成功非零表示失败。从 src/cli-main.ts 的退出码处理逻辑可以看出错误会被转换为非零exitCode默认 1耗时行timing line——用于对比不同输入类型的性能量级。2. 提取路径extraction path记录本用例实际走的是哪条提取路径HTML普通网页本地提取Firecrawl走了 Firecrawl 兜底YouTube transcript走 YouTube 字幕/转录路径。识别方法有两个一是结合--verbose观察进度输出二是看结束行finish line中显示的策略标签——html、firecrawl、via transcript/provider等见 src/run/finish-line-labels.ts。3. 文件类错误记录计划特别要求关注三类文件错误均可在仓库源码中找到对应实现错误类别源码依据触发条件媒体类型拒绝media type rejectionUnsupported file type: name (mediaType)见 src/run/flows/asset/extract.ts、src/run/attachments.ts输入文件类型不在支持列表内大小限制size limitsFile too large/Remote file too large上限 50 MB见 src/content/asset.ts本地或远程文件超过 50 MBToken 预检token preflightInput token count (...) exceeds model input limit (...)见 src/engine/model-executor.ts输入 token 数超出所选模型的输入上限记录这些错误时应同时记录错误信息原文便于后续回归对比是否出现措辞回归。Bug bar判定冒烟测试是否通过冒烟测试计划定义了四条明确的失败判定标准任一命中即为 Bug崩溃、挂起或非零退出Crash, hang, or non-zero exit输入非空却输出空总结Empty summary with non-empty input模式选择错误——例如 YouTube 视频被当作普通 URL 处理Incorrect mode selection兜底行为错误或错误信息误导Wrong fallback behavior or misleading error text。需要注意第 4 条包含两层一是行为层该兜底时没兜底或兜底顺序错误二是信息层错误文本是否准确可读。冒烟测试的「记录」环节正是为了给这两层判定提供原始证据。其中「空总结」的判定在仓库测试中也有对应关注LLM 可能因各种原因返回空内容仓库为此存在专门的测试如cli.empty-summary.test.ts与兜底重试逻辑冒烟测试中出现空总结时应优先排查是模型输出问题还是提取内容本身为空可先用--extract单独验证提取结果。与自动化测试、手动测试的配合20 组合冒烟测试属于手动冒烟仓库中还存在与之互补的两类验证手段自动化测试仓库在tests/下维护了数百个 vitest 用例其中 tests/live/models-live.test.ts 以LIVE环境变量开关控制「真实模型冒烟」用例默认跳过设置 LIVE 后才运行与本文的手动矩阵形成互补。另有 tests/firefox-smoke.test.ts 覆盖扩展侧的 Firefox 冒烟生命周期。手动端到端清单docs/manual-tests.md 提供了面向发布验证的手动测试清单重点覆盖自动选型auto与预设presets并给出--verbose观察模型尝试记录、--max-output-tokens控制成本、--metrics detailed查看转录提供方等技巧与 20 用例矩阵搭配使用即可构成「固定模型冒烟 自动选型冒烟」的完整回归组合。常见故障排查速查基于矩阵中容易出问题的用例整理典型故障与排查方向现象可能原因排查手段所有用例都报模型 key 错误OPENAI_API_KEY/GEMINI_API_KEY未设置确认环境变量已导出用--verbose查看模型尝试记录JS 重页面提取内容为空/过薄本地 HTML 提取受限配置FIRECRAWL_API_KEY后改用--firecrawl always复测无字幕 YouTube 视频失败yt-dlp未配置或转录 key 缺失确认yt-dlp在PATH或设置YT_DLP_PATH并至少配置一个转录提供方 keyGroq / AssemblyAI / Gemini / OpenAI / FAL / Deepgram 之一远程/本地文件报File too large文件超过 50 MB 上限换用更小的样例文件非文本文件报Unsupported file type文件类型不在支持列表参考 docs/media.md 确认支持的类型范围404 页面用例崩溃或挂起错误处理回归确认 CLI 应在规定超时内默认2m给出非零退出与可读错误总结20 用例冒烟测试矩阵通过「网站 10 YouTube 2 远程文件 4 本地文件 4」的精心配比以最小的成本覆盖了 summarize 最核心的输入类型 × 提取路径 × 模型组合空间。执行时牢记三条主线按模板逐条执行并记录日志、退出码、耗时、提取路径、错误类型对照 Bug bar 四条标准判定将结果留档以便回归对比。配合仓库已有的自动化测试与 docs/manual-tests.md 手动清单即可在每次变更后快速确认「URL/文件 → 提取 → LLM 总结」这条主链路没有回归。【免费下载链接】summarizePoint at any URL/YouTube/Podcast or file. Get the gist. CLI and Chrome Extension.项目地址: https://gitcode.com/GitHub_Trending/summarize/summarize创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表