Files
CIBank/backend

餐智库后端服务

餐饮行业知识库后端,提供采集管道、结构化引擎和 RAG 问答 API。

目录结构

backend/
├── app.py              # Flask API 服务(端口 8788
├── crawler.py          # 采集管道:公众号文章抓取 + 视频号 ASR
├── video_downloader.py # 视频号批量下载管理器(调用 wx_channels_download API
├── structurer.py       # 结构化引擎:LLM 打标签/摘要/要点/品牌识别
├── daily_pipeline.py   # 每日增量流水线:备份/采集/分析/向量/行业信号
├── rag.py              # RAG 问答:向量检索 + LLM 生成
├── schema.sql          # SQLite 数据库 schema
├── requirements.txt    # Python 依赖
├── .env.example        # 环境变量模板
├── video_config.json   # 视频源配置(账号、finder、下载目录)
├── video_sources.json  # 旧格式视频源(兼容)
├── run.sh              # 一键启动脚本
└── data/               # SQLite 数据库目录(自动创建)

快速开始

1. 安装依赖

cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install chromium

2. 配置环境变量

cp .env.example .env
# 编辑 .env,填入你的 DASHSCOPE_API_KEY

3. 启动服务

# 方式一:一键启动前后端
./run.sh

# 方式二:仅启动后端
python app.py

4. 数据采集与分析流程

# 步骤1:采集公众号文章
python crawler.py --source-type 公众号

# 步骤2:视频号批量下载(需要先启动 wx_channels_download 工具)
#   2a. 启动下载工具(另开终端)
#       sudo networksetup -setv6off Wi-Fi          # 禁用 IPv6(关键!)
#       sudo <工具路径>/wx_video_download           # 以管理员启动
#       # 然后重启微信,打开视频号
#
#   2b. 自动检测新视频并下载
python video_downloader.py
#       # 下载完成后自动触发 ASR 转写入库
#
#   2c. 仅下载不转写
python video_downloader.py --no-transcribe
#
#   2d. 仅检查工具是否运行
python video_downloader.py --check

# 步骤3:采集视频号内容(本地视频 → FFmpeg 提取音频 → FunASR 转写)
# 如果已通过 video_downloader.py 自动转写,可跳过此步
# 需要先配置 video_config.json 指定视频文件所在目录
# 需要本地安装 FFmpeg 和 FunASR
python crawler.py --source-type 视频号

# 步骤4:批量结构化分析
python structurer.py analyze

# 步骤5:提取跨文章行业信号
python structurer.py signals --days 30

# 步骤6:生成向量嵌入(用于 RAG 检索)
python structurer.py embed

5. 每日自动流水线

python3 daily_pipeline.py status
python3 daily_pipeline.py daily
python3 daily_pipeline.py full --skip-crawl

daily 仅处理新增或变化内容;full 强制重新分析和重建向量。任务包含数据库备份、运行锁、步骤日志和最近14份备份保留。运行前必须在 .env 配置 DASHSCOPE_API_KEY

macOS 定时任务模板为 com.cibank.daily-pipeline.plist,默认每天 02:00 运行。安装后可用以下命令检查:

launchctl print gui/$(id -u)/com.cibank.daily-pipeline

6. 视频号下载工具配置

视频号内容获取使用 wx_channels_download 工具, 详细配置指南参考 微信视频号批量下载工具配置指南.md

关键步骤

  1. 下载工具预编译版本(macOS arm64)
  2. xattr -d com.apple.quarantine wx_video_download 去除隔离标记
  3. 禁用 IPv6sudo networksetup -setv6off Wi-FimacOS 必做!)
  4. 关闭 VPN / 代理软件
  5. sudo wx_video_download 以管理员启动
  6. 重启微信,打开视频号
  7. 配置 video_config.json 指定视频号账号和下载目录
  8. 运行 python video_downloader.py 自动检测并下载新视频

使用完毕后恢复

sudo networksetup -setv6automatic Wi-Fi   # 恢复 IPv6

API 接口

方法 路径 说明
GET /api/health 健康检查
GET /api/stats 概览统计
GET /api/dashboard 仪表盘数据
GET /api/intel 情报流列表(支持 type/category/q 筛选)
GET /api/intel/<id> 情报详情
GET /api/brands 品牌库列表
GET /api/brands/<id> 品牌详情
GET /api/analysis 赛道分析数据
GET /api/reports 报告列表
POST /api/qa/ask RAG 问答
POST /api/crawl/run 触发采集
POST /api/analyze/run 触发结构化分析
GET /api/crawl/runs 采集运行记录
GET /api/sources?type= 信源列表(支持按类型筛选)
POST /api/sources 添加信源
PUT /api/sources/<id> 编辑信源
DELETE /api/sources/<id> 删除信源
POST /api/sources/<id>/toggle 启用/停用信源

环境变量

变量 说明 默认值
DASHSCOPE_API_KEY 阿里云通义千问 API Key 必填
QWEN_MODEL 使用的千问模型 qwen-plus
EMBEDDING_MODEL 文本向量模型 text-embedding-v3
PORT Flask 服务端口 8765
CRAWL_ARTICLE_PAUSE 文章采集间隔(秒) 2.0
CRAWL_LIST_PAUSE 列表页滚动间隔(秒) 1.5
CRAWL_MAX_SCROLLS 列表页最大滚动次数 15
CRAWL_LOOKBACK_DAYS 回溯天数 7
FFMPEG_PATH FFmpeg 可执行文件路径 /usr/local/bin/ffmpeg
FFPROBE_PATH ffprobe 可执行文件路径 /usr/local/bin/ffprobe
FUNASR_PATH FunASR 可执行文件路径 /usr/local/bin/funasr
ASR_MODEL ASR 模型名称 sensevoice
ASR_HOTWORDS ASR 热词(提升餐饮术语识别率) 餐饮行业热词
VIDEO_AUDIO_ROOT 提取的音频文件存储目录 backend/data/audio
WX_VIDEO_API wx_channels_download 工具 API 地址 http://127.0.0.1:2022

前端集成

前端通过 Vite 代理将 /api 请求转发到后端 http://127.0.0.1:8788。后端不可用时,前端显示加载失败或空状态。