- 新增 charts/news_reports.php 报告查询导航页(列表+详情一体,fetch API 渲染) - 新增 js/newsReports.js:AI 摘要/新闻联播/财经新闻/公告调研/数据总览固定模块,stats 归一化兼容多种格式 - index-2.php 研究报告卡片改为导航链接,移除 PHP 目录下拉框 - 更新 AGENTS.md/CLAUDE.md(路径、页面清单、数据模式等核实修正) - 同步服务器拉取的文档:quant 使用手册、podcast-docs - 生成 continuation.md 会话检查点
182 lines
7.0 KiB
HTML
182 lines
7.0 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>播客处理流水线 — 使用说明</title>
|
||
<style>
|
||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; line-height: 1.6; color: #333; }
|
||
h1 { border-bottom: 2px solid #2563eb; padding-bottom: 8px; }
|
||
h2 { margin-top: 32px; border-bottom: 1px solid #e5e7eb; padding-bottom: 4px; }
|
||
pre { background: #f3f4f6; padding: 12px; border-radius: 8px; overflow-x: auto; font-size: 14px; }
|
||
code { background: #f3f4f6; padding: 2px 6px; border-radius: 4px; font-size: 14px; }
|
||
table { border-collapse: collapse; width: 100%; margin: 12px 0; }
|
||
th, td { border: 1px solid #e5e7eb; padding: 8px 12px; text-align: left; }
|
||
th { background: #f9fafb; }
|
||
.tip { background: #eff6ff; border-left: 4px solid #2563eb; padding: 12px; margin: 16px 0; border-radius: 4px; }
|
||
.warn { background: #fef3c7; border-left: 4px solid #f59e0b; padding: 12px; margin: 16px 0; border-radius: 4px; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>播客处理流水线 · 使用说明</h1>
|
||
<p>从 Apple Podcast URL 自动获取播客 → 语音转文字 → 中文翻译 → AI 要点分析</p>
|
||
|
||
<h2>一、地址总览</h2>
|
||
<table>
|
||
<tr><th>用途</th><th>地址</th></tr>
|
||
<tr><td>前端首页(时间线)</td><td><a href="https://doorcome.cn/podcast/">https://doorcome.cn/podcast/</a></td></tr>
|
||
<tr><td>添加播客</td><td><a href="https://doorcome.cn/podcast/new">https://doorcome.cn/podcast/new</a></td></tr>
|
||
<tr><td>播客管理</td><td><a href="https://doorcome.cn/podcast/podcasts">https://doorcome.cn/podcast/podcasts</a></td></tr>
|
||
<tr><td>API 文档 (Swagger)</td><td><a href="https://doorcome.cn/api/docs/">https://doorcome.cn/api/docs/</a></td></tr>
|
||
<tr><td>管理后台</td><td><a href="https://doorcome.cn/admin/">https://doorcome.cn/admin/</a></td></tr>
|
||
</table>
|
||
|
||
<h2>二、前端使用</h2>
|
||
|
||
<h3>2.1 添加播客</h3>
|
||
<ol>
|
||
<li>打开「添加」页面</li>
|
||
<li>粘贴 Apple Podcast 链接,格式如:<br>
|
||
<code>https://podcasts.apple.com/cn/podcast/lex-fridman-podcast/id1434243584</code></li>
|
||
<li>点击「添加」按钮</li>
|
||
<li>系统自动获取播客信息、节目列表,后台 AI 开始处理</li>
|
||
</ol>
|
||
|
||
<div class="tip">
|
||
✅ 支持所有 Apple Podcast URL。系统会通过 iTunes API 获取元数据,
|
||
然后解析 RSS Feed 获取所有节目。
|
||
</div>
|
||
|
||
<h3>2.2 查看要点</h3>
|
||
<ul>
|
||
<li>首页按日期分组展示已处理的要点卡片</li>
|
||
<li>可按播客来源或日期过滤</li>
|
||
<li>卡片包含:封面、标题、一句话摘要、标签</li>
|
||
<li>点击「详情」查看完整内容</li>
|
||
<li>点击「播放」在线听音频</li>
|
||
</ul>
|
||
|
||
<h3>2.3 单集详情</h3>
|
||
<ul>
|
||
<li>音频播放器(顶部)</li>
|
||
<li>要点导航(点击展开/收起各话题)</li>
|
||
<li>全文展示:原文 / 中文翻译一键切换</li>
|
||
</ul>
|
||
|
||
<h3>2.4 播客管理</h3>
|
||
<ul>
|
||
<li>查看已添加的所有播客</li>
|
||
<li>删除播客及其所有节目</li>
|
||
</ul>
|
||
|
||
<h2>三、后台管理</h2>
|
||
|
||
<p>访问 <code>/admin/</code> 使用管理员账号登录。</p>
|
||
|
||
<table>
|
||
<tr><th>模型</th><th>功能</th></tr>
|
||
<tr><td>Podcast(播客)</td><td>查看、搜索所有播客</td></tr>
|
||
<tr><td>Episode(节目)</td><td>查看处理进度、过滤状态、重试失败节目</td></tr>
|
||
<tr><td>Transcript(转写)</td><td>查看 ASR 结果和翻译内容</td></tr>
|
||
<tr><td>Highlight(要点)</td><td>查看 AI 分析结果</td></tr>
|
||
</table>
|
||
|
||
<div class="tip">
|
||
处理状态说明:
|
||
<code>pending</code> → <code>downloading</code> → <code>downloaded</code> →
|
||
<code>transcribing</code> → <code>transcribed</code> →
|
||
<code>translating</code> → <code>translated</code> →
|
||
<code>analyzing</code> → <code>completed</code><br>
|
||
任意步骤失败 → <code>failed</code>(Admin 可选重试)
|
||
</div>
|
||
|
||
<h2>四、AI 处理流程</h2>
|
||
|
||
<p>添加播客后,Celery Worker 自动处理每个节目:</p>
|
||
|
||
<pre>
|
||
Step 1: 下载音频文件到服务器
|
||
Step 2: 千问 DashScope ASR → 语音转文字(带时间戳分段)
|
||
Step 3: 检测语种:
|
||
· 非中文 → DeepSeek 翻译成中文
|
||
· 中文 → 跳过翻译
|
||
Step 4: DeepSeek 要点分析 → JSON 结构化结果
|
||
· 一句话摘要
|
||
· 详细摘要(3-5段)
|
||
· 要点列表(话题 + 观点 + 时间戳)
|
||
· 标签
|
||
|
||
最终状态 → completed。
|
||
失败自动重试 3 次,每次间隔 60 秒。
|
||
</pre>
|
||
|
||
<h2>五、命令行操作</h2>
|
||
|
||
<p>SSH 到服务器后使用:</p>
|
||
|
||
<pre>
|
||
# 添加播客
|
||
cd /home/simon/myquant/django/podcast
|
||
source venv/bin/activate
|
||
python manage.py init_podcast "https://podcasts.apple.com/cn/podcast/.../idXXXXXX"
|
||
|
||
# 添加并触发 AI 处理
|
||
python manage.py init_podcast "https://..." --trigger-tasks
|
||
|
||
# 查看服务状态
|
||
sudo systemctl status podcast-gunicorn # Django API
|
||
sudo systemctl status podcast-celery # AI 处理 Worker
|
||
sudo systemctl status podcast-frontend # 前端
|
||
|
||
# 查看日志
|
||
sudo journalctl -u podcast-celery -n 50 -f
|
||
|
||
# 重启某个服务
|
||
sudo systemctl restart podcast-celery
|
||
</pre>
|
||
|
||
<h2>六、API 参考</h2>
|
||
|
||
<p>完整 API 文档在 <a href="https://doorcome.cn/api/docs/">Swagger UI</a>。</p>
|
||
|
||
<table>
|
||
<tr><th>方法</th><th>路径</th><th>说明</th></tr>
|
||
<tr><td>POST</td><td>/api/podcasts/add/</td><td>通过 Apple URL 添加播客</td></tr>
|
||
<tr><td>GET</td><td>/api/podcasts/</td><td>播客列表</td></tr>
|
||
<tr><td>GET</td><td>/api/podcasts/{id}/</td><td>播客详情(含节目列表)</td></tr>
|
||
<tr><td>DELETE</td><td>/api/podcasts/{id}/</td><td>删除播客</td></tr>
|
||
<tr><td>GET</td><td>/api/episodes/</td><td>节目列表(支持 status/podcast_id 过滤)</td></tr>
|
||
<tr><td>GET</td><td>/api/episodes/{id}/</td><td>单集详情(含转写+要点)</td></tr>
|
||
<tr><td>POST</td><td>/api/episodes/{id}/retry/</td><td>重试失败的节目</td></tr>
|
||
<tr><td>GET</td><td>/api/highlights/</td><td>要点列表(支持 date/podcast_id 过滤)</td></tr>
|
||
<tr><td>GET</td><td>/api/highlights/today/</td><td>今日要点</td></tr>
|
||
</table>
|
||
|
||
<h2>七、管理员账号</h2>
|
||
|
||
<table>
|
||
<tr><th>地址</th><th>用户名</th><th>密码</th></tr>
|
||
<tr><td><a href="https://doorcome.cn/admin/">https://doorcome.cn/admin/</a></td><td>admin</td><td>admin123</td></tr>
|
||
</table>
|
||
|
||
<div class="warn">
|
||
⚠️ 首次使用建议修改默认密码。
|
||
</div>
|
||
|
||
<h2>八、配置说明</h2>
|
||
|
||
<p>服务器配置文件:<code>/home/simon/myquant/django/podcast/.env</code></p>
|
||
|
||
<table>
|
||
<tr><th>配置项</th><th>说明</th></tr>
|
||
<tr><td>DASHSCOPE_API_KEY</td><td>千问 DashScope API Key(ASR 语音转文字)</td></tr>
|
||
<tr><td>DEEPSEEK_API_KEY</td><td>DeepSeek API Key(翻译 + 要点分析)</td></tr>
|
||
<tr><td>DASHSCOPE_ASR_MODEL</td><td>ASR 模型名(默认 paraformer-realtime-v2)</td></tr>
|
||
<tr><td>DEEPSEEK_MODEL</td><td>DeepSeek 模型名(默认 deepseek-chat)</td></tr>
|
||
<tr><td>DEV_MOCK_ASR</td><td>开发模式:1=跳过真实 ASR,0=调用真实 API</td></tr>
|
||
</table>
|
||
|
||
</body>
|
||
</html>
|