Skip to content

xiaodouzi666/hunyuan-broadcast

Repository files navigation

AI播客生成系统

基于Hunyuan-7B-Instruct微调的智能播客对话生成系统,支持主题生成和文档RAG检索,可生成高质量的中文播客对话内容并合成音频。

演示视频

https://www.bilibili.com/video/BV1V9kXBLEw6/

功能特点

  • 双模式生成:支持纯主题生成和基于文档的RAG增强生成
  • 结构化输出:3段式播客结构,主持人与嘉宾深度对话
  • 文档理解:支持PDF、PPTX、DOCX、MD、TXT等多种格式
  • TTS合成:集成腾讯云TTS,一键生成播客音频
  • 高质量输出:平均2200+字的深度内容

快速开始

环境准备

# 创建conda环境
conda create -n broadcast python=3.10 -y
conda activate broadcast

# 安装依赖
pip install -r requirements.txt

# RAG功能额外依赖(可选)
pip install faiss-cpu sentence-transformers pymupdf python-pptx python-docx jieba

确认模型文件

models/Hunyuan-7B-Instruct/     # 基础模型
train/output/hunyuan_lora/       # LoRA权重

使用方法

方法一:基础生成(generate_podcast.py)

适用于纯主题生成,不需要参考文档。

# 基本用法
python generate_podcast.py "你的播客主题"

# 示例
python generate_podcast.py "人工智能在医疗诊断中的应用"
python generate_podcast.py "区块链技术的未来发展"
python generate_podcast.py "元宇宙的商业前景"

输出文件out/podcast_<主题>.json

特点

  • 快速生成,无需额外文档
  • 基于模型知识创作内容
  • 适合通用主题讨论

方法二:RAG增强生成(podcast_gen_rag.py)

支持文档检索,基于提供的资料生成更准确的播客内容。

1. 仅主题生成

python podcast_gen_rag.py --topic "人工智能的未来"

2. 仅文档生成(自动理解文档内容)

python podcast_gen_rag.py --files paper.pdf slides.pptx notes.md

3. 主题+文档(推荐)

python podcast_gen_rag.py \
    --topic "AI在医疗领域的应用" \
    --files research.pdf data.docx slides.pptx

4. 生成并合成音频

python podcast_gen_rag.py \
    --topic "大模型技术发展" \
    --files llm_paper.pdf \
    --audio

5. 指定输出路径

python podcast_gen_rag.py \
    --topic "量子计算" \
    --files quantum.pdf \
    --out out/quantum_podcast.json \
    --audio

参数说明

  • --topic:播客主题(可选)
  • --files:输入文档,支持多个文件
  • --audio:自动生成TTS音频
  • --out:指定输出路径
  • --index-dir:FAISS索引缓存目录
  • --rebuild:强制重建文档索引
  • --skip-rag:跳过文档检索,仅用主题

输出文件

  • JSON:out/podcast_<主题或标题>.json
  • 音频:tts/audio/<播客标题>.mp3

特点

  • 基于文档内容生成,更准确
  • 自动提取文档要点
  • 支持多文档融合
  • 避免信息杜撰

TTS音频合成

配置腾讯云密钥

# 方法1:环境变量
export TENCENTCLOUD_SECRET_ID="你的SecretId"
export TENCENTCLOUD_SECRET_KEY="你的SecretKey"

# 方法2:配置文件 tts/config.json
{
  "SECRET_ID": "你的SecretId",
  "SECRET_KEY": "你的SecretKey"
}

手动合成音频

# 从已有JSON生成音频
python tts/tts_synthesis.py out/你的播客.json

音色配置

  • 主持人(女):专业梓欣 (602005)
  • 嘉宾(男):知心大林 (603005)
  • 语速:标准1.0x
  • 采样率:24kHz

输出格式

JSON结构

{
  "podcastTitle": "播客节目名",
  "episodeTitle": "本期主题",
  "host": "主持人姓名",
  "guests": ["嘉宾姓名"],
  "topic_summary": "内容概述",
  "segments": [
    {
      "segmentIndex": 1,
      "segmentTitle": "第一幕:标题",
      "summary": "段落概述",
      "transcript": [
        {"speaker": "host", "line": "对话内容"},
        {"speaker": "guest", "line": "对话内容"}
      ]
    }
  ]
}

模型训练(可选)

1. 准备训练数据

# 生成训练数据(需要API密钥)
export YOUR_API_KEY="your-api-key"
python gen_claude.py --limit 202

# 转换为训练格式
python prepare_training_data.py

2. 开始训练

python train_claude_lora.py 2>&1 | tee training.log

训练配置

  • 模型:Hunyuan-7B-Instruct
  • 方法:LoRA (rank=16, alpha=32)
  • 轮数:6 epochs
  • 时长:~35分钟 (3090Ti)
  • 显存:~23GB

3. 训练结果

  • Final loss: 1.17
  • Eval loss: 1.278
  • 可训练参数:41.9M (0.56%)

项目结构

hunyuan-broadcast/
├── generate_podcast.py       # 基础播客生成
├── podcast_gen_rag.py        # RAG增强版生成
├── prepare_training_data.py  # 数据预处理
├── train_claude_lora.py      # LoRA训练脚本
├── gen_claude.py             # 训练数据生成
├── tts/
│   └── tts_synthesis.py     # TTS音频合成
├── train/output/
│   └── hunyuan_lora/         # LoRA权重文件
├── data/                     # 训练数据
├── out/                      # 生成的JSON文件
└── rag_index/                # FAISS索引缓存

常见问题

1. 生成的内容太短?

  • 检查max_new_tokens参数,建议设置为4000
  • 确保prompt中明确要求2200+字

2. RAG检索效果不好?

  • 尝试调整chunk_size(默认700字)
  • 增加retrieve_k参数获取更多相关片段
  • 使用--rebuild强制重建索引

3. TTS合成失败?

  • 检查腾讯云密钥配置
  • 确认有足够的TTS资源包配额
  • 验证音色ID是否正确(603xxx系列)

4. 内存不足?

  • 使用量化版本模型
  • 减少batch size
  • 使用CPU offloading

效果示例

生成主题:"人工智能的未来发展"

  • 字数:3752字
  • 时长:6分钟音频
  • 结构:3段完整对话
  • 质量:包含具体数据、案例和深度讨论

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors