YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
在线人物筛选 Demo(YouTube + Tavily 文搜)
给定一个 YouTube 视频链接,自动:
- 用
yt-dlp抓取视频 + 顶层评论 + 元数据; - 跑“高颜值男女可抽取素材”筛选推理(多轮工具调用,
web_search走 Tavily 公网搜索); - 产出结构化判定(approve / reject / undecided)、HTML 轨迹、决策表 CSV 等。
本目录已自包含全部源码,可整目录拷贝到其他服务器部署。
一、目录结构
demo/
├── run_people_online_tavily.sh # 入口脚本(可迁移版,REPO_ROOT 自动取本目录)
├── requirements.txt # Python 依赖(已清理为本地可安装格式)
├── README.md # 本文件
├── inference/
│ ├── fetch_youtube_online.py # 第 1 步:yt-dlp 抓视频/评论 -> work_dir
│ ├── run_people_quality_inference.py # 第 2 步:单条筛选推理入口
│ ├── attractive_leads_prompt.py # system / user prompt 构造
│ ├── eval.py # 核心:五工具多轮推理 + Tavily/图搜 + HTML
│ └── video_dr_bridge.py # 桥接层:复用 video_dr_gen 的帧处理/工具逻辑
└── video_dr_gen/ # VideoDR SFT 构造代码(帧抽取、bbox、图搜/web搜实现)
├── assemble_sft_dataset.py # NEW_SYSTEM_PROMPT 等
├── config.py # MARS / gateway / 默认帧参数等常量
├── prompts.py # PHASE1/PHASE2/BASE system prompts
└── utils.py # normalize_bbox / crop_frame / image_search / mars_web_search ...
重要:
inference/与video_dr_gen/必须保持现在的相对位置(同在demo/下)。video_dr_bridge.py按本文件父目录的父目录 / video_dr_gen定位依赖;也可用环境变量VIDEO_DR_SOURCE_ROOT显式指定其它路径。本 demo 已把用到的 4 个
video_dr_gen文件打包进来并改成相对/可配置定位, 迁移后无需依赖旧机器共享盘路径。
二、运行流程(脚本做了什么)
run_people_online_tavily.sh <youtube_url>:
- 设置出网代理 +
no_proxy(内网模型直连、公网走代理),激活 conda 环境。 - 抓取:调用
inference/fetch_youtube_online.pyyt-dlp下载 mp4 +info.json(含评论),规范化后写出comments.json/metadata.json;- 以
---FETCH--- KEY=VALUE ---END---块把VIDEO_ID/VIDEO_PATH/COMMENTS_FILE/ TITLE/CHANNEL/DURATION/VIEW_COUNT/VIDEO_URL回传给 shell。
- 推理:shell 解析上述 KEY=VALUE,拼成单条参数喂给
inference/run_people_quality_inference.py(--web-search-backend tavily+ 一组--tavily-*),复用eval.py::evaluate_video_tool()的五工具多轮推理逻辑。 - 标准输出/错误
tee到日志文件。
产物
- 抓取缓存:
<work_dir>/<id>.mp4、<id>.info.json、comments.json、metadata.json(默认inference/online_runs/<id>_<ts>/,可用WORK_DIR复用避免重下)。 - 推理结果(默认
demo/lead_filter_runs/online_<id>_<ts>/):results.jsonl、results.html、summary.json、decision_table.csv、images/、frame_cache/。 - 日志:
<output_dir>.log。
三、用法
cd demo
./run_people_online_tavily.sh https://www.youtube.com/shorts/ZHI5IkRfXAM
# 或
VIDEO_URL=https://www.youtube.com/watch?v=XXXX ./run_people_online_tavily.sh
# 限制评论数
MAX_COMMENTS=50 ./run_people_online_tavily.sh <url>
-- 之后透传给推理脚本,例如调温度:
./run_people_online_tavily.sh <url> --temperature 0.6
四、部署到新服务器
1. 系统依赖
ffmpeg(yt-dlp 合并 mp4 必需,需在 PATH)。yt-dlp(pip 安装或系统包均可)。
2. Python 依赖
/home/tione/notebook/gaozhenkun/envs/sglang/bin/python -m pip install -r requirements.txt
# eval.py 顶层 import playwright,需要装浏览器内核:
PLAYWRIGHT_BROWSERS_PATH=$PWD/.playwright-browsers \
/home/tione/notebook/gaozhenkun/envs/sglang/bin/playwright install chromium
说明:当前默认使用本机
/home/tione/notebook/gaozhenkun/envs/sglang环境。google-*(Vertex/Gemini)仅在--model-client vertex时才需要,默认不装也能跑。
3. 必填环境变量 / 配置
| 变量 | 作用 | 默认值 | 迁移时是否要改 |
|---|---|---|---|
CONDA_ENV |
要激活的 conda 环境路径/名 | /home/tione/notebook/gaozhenkun/envs/sglang |
视情况 |
CONDA_BASE |
conda 安装根(取 conda shell.bash hook) |
/root/miniconda3 |
视情况 |
MODEL_BASE_URL |
VLM 推理服务(OpenAI 兼容 /v1) |
http://100.102.37.219:8008 |
是 |
MODEL_NAME |
模型名 | qwen3-vl-video-dr |
视情况 |
TAVILY_API_KEY_FILE |
Tavily key 列表文件(每行一个) | demo/secrets/tavily_api_keys.txt |
视情况 |
HTTP_PROXY_URL |
公网代理(yt-dlp/Tavily 出网);直连可设为空 "" |
http://127.0.0.1:17890 |
是 |
YT_DLP |
yt-dlp 可执行路径 | 自动探测 | 视情况 |
VIDEO_DR_SOURCE_ROOT |
VideoDR 依赖目录 | 默认用打包的 demo/video_dr_gen |
一般不用改 |
VIDEO_DEEP_RESEARCH_DATA_ROOT |
本地批量数据/评测数据根目录 | demo/local_data |
可选 |
VIDEO_DEEP_RESEARCH_SECRETS_DIR |
本地 secret 文件目录 | demo/secrets |
可选 |
PLAYWRIGHT_BROWSERS_PATH |
Playwright 浏览器内核目录 | demo/.playwright-browsers |
可选 |
Tavily key 也可不用文件,直接 export TAVILY_API_KEY=... 或 TAVILY_API_KEYS=k1,k2。
示例(新机直连公网):
export CONDA_ENV=/home/tione/notebook/gaozhenkun/envs/sglang
export CONDA_BASE=/root/miniconda3
export MODEL_BASE_URL=http://<your-vlm-host>:8000
export TAVILY_API_KEY=tvly-xxxxxxxx
export HTTP_PROXY_URL="" # 直连,不走代理
./run_people_online_tavily.sh <youtube_url>
4. 可选服务(默认不写死旧机器路径)
web_search 在本 demo 中走 Tavily。MARS_RETRIEVAL_ADDRESS / MARS_SUMMARIZER_ADDRESS
默认空字符串,只有显式 export 后才会探测内网 MARS/summarizer。
image_search 默认读取 GATEWAY_URL / GATEWAY_TOKEN / SERPER_API_KEY /
OSS_ACCESS_KEY_ID 等环境变量;未配置时工具会返回配置缺失错误,但不会依赖旧机器明文路径。
五、运行前自检
# 模型服务可达?
curl "$MODEL_BASE_URL/v1/models"
# 源码闭包可导入?(应输出 IMPORT_OK)
cd demo/inference && python -c "import fetch_youtube_online, run_people_quality_inference; print('IMPORT_OK')"