DeepSeek与NAS结合下载影片
以下是实现通过 DeepSeek 控制 NAS 工具链的完整方案,实现自然语言指令触发影视下载、刮削并同步至 Jellyfin 的自动化流程:
1. 架构设计
graph LR
A[用户指令] --> B(DeepSeek NLP解析)
B --> C{指令类型}
C -->|影视下载| D[生成下载任务]
C -->|状态查询| E[查询系统状态]
D --> F[调用NAS Tools API]
F --> G[触发qBittorrent下载]
G --> H[自动刮削重命名]
H --> I[Jellyfin媒体库更新]
2. DeepSeek 服务部署
2.1 创建专用 Docker 容器
在现有 docker-compose.yml 中添加:
deepseek:
image: deepseek-image:latest # 需自定义或使用开源NLP镜像
volumes:
- ./deepseek/config:/app/config
- /var/run/docker.sock:/var/run/docker.sock # 谨慎授权
environment:
- NASTOOLS_API=http://nastools:3000
- JELLYFIN_API=http://jellyfin:8096
networks:
- internal_net
restart: unless-stopped
2.2 权限控制
# 创建低权限用户
sudo useradd -r -s /bin/false deepseek
# 允许执行特定命令
echo "deepseek ALL=(root) NOPASSWD: /usr/bin/docker exec nastools" >> /etc/sudoers
3. 指令解析与任务生成
3.1 自然语言处理模块(Python示例)
# nlp_processor.py
import re
from spacy import load
nlp = load("zh_core_web_sm")
def parse_command(text):
doc = nlp(text)
action = None
target = None
# 识别动作关键词
action_keywords = {'下载', '查找', '播放', '删除'}
for token in doc:
if token.text in action_keywords:
action = token.text
if token.ent_type_ == "WORK_OF_ART": # 识别作品名称
target = token.text
return {"action": action, "target": target}
# 示例:解析 "帮我下载星际穿越"
# 输出 {'action': '下载', 'target': '星际穿越'}
3.2 任务队列实现
使用 Redis 作为任务队列:
# docker-compose.yml 新增
redis:
image: redis:alpine
volumes:
- redis_data:/data
networks:
- internal_net
volumes:
redis_data:
4. NAS Tools 接口调用
4.1 模拟人工操作(浏览器自动化)
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
def trigger_download(movie_name):
opts = Options()
opts.headless = True
driver = Firefox(options=opts)
try:
driver.get("http://nastools:3000/")
# 登录操作
driver.find_element("id", "username").send_keys("admin")
driver.find_element("id", "password").send_keys("your_password")
driver.find_element("id", "login-btn").click()
# 添加下载任务
driver.find_element("xpath", "//button[contains(text(),'手动添加')]").click()
driver.find_element("name", "title").send_keys(movie_name)
driver.find_element("xpath", "//input[@value='电影']").click()
driver.find_element("id", "confirm-btn").click()
finally:
driver.quit()
4.2 直接数据库操作(备用方案)
import psycopg2
def add_download_task(movie_name):
conn = psycopg2.connect(
host="postgres",
database="main_db",
user="admin",
password="your_strong_password"
)
cur = conn.cursor()
# 插入下载任务记录(需根据NAS Tools实际表结构调整)
cur.execute("""
INSERT INTO download_tasks
(title, type, status)
VALUES (%s, 'movie', 'pending')
""", (movie_name,))
conn.commit()
cur.close()
conn.close()
5. 安全通信机制
5.1 JWT 身份验证
# DeepSeek API 服务端
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.post("/command")
async def handle_command(
command: str,
token: str = Depends(oauth2_scheme)
):
# 验证令牌有效性
if not validate_token(token):
raise HTTPException(status_code=403)
# 处理指令逻辑
return process_command(command)
5.2 访问控制列表(ACL)
# 使用 iptables 限制访问
sudo iptables -A INPUT -p tcp --dport 8000 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8000 -j DROP
6. 完整工作流程示例
-
用户发送指令:
curl -X POST http://deepseek:8000/command \ -H "Authorization: Bearer YOUR_TOKEN" \ -d "请下载《奥本海默》并更新到影视库" -
DeepSeek 处理流程:
def process_command(command): # 自然语言解析 parsed = parse_command(command) # 生成下载任务 if parsed["action"] == "下载": add_download_task(parsed["target"]) # 监控任务状态 while True: status = check_download_status(parsed["target"]) if status == "completed": trigger_jellyfin_refresh() return {"status": "success"} elif status == "failed": return {"status": "failed"} time.sleep(60) -
Jellyfin 媒体库刷新:
import requests def trigger_jellyfin_refresh(): headers = {"X-Emby-Token": "YOUR_JELLYFIN_API_KEY"} response = requests.post( "http://jellyfin:8096/Library/Refresh", headers=headers ) return response.status_code == 204
7. 监控与日志
7.1 可视化监控(Grafana)
# docker-compose.yml 新增
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
volumes:
- grafana_data:/var/lib/grafana
networks:
- internal_net
7.2 日志聚合
# 使用 Loki + Promtail
docker run -d --name loki -p 3100:3100 grafana/loki
docker run -d --name promtail --link loki -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml
8. 高级功能扩展
8.1 语音指令支持
import speech_recognition as sr
def speech_to_text(audio_file):
r = sr.Recognizer()
with sr.AudioFile(audio_file) as source:
audio = r.record(source)
return r.recognize_google(audio, language="zh-CN")
8.2 自动字幕下载
def download_subtitle(movie_path):
from subprocess import run
run([
"subliminal", "download",
"-l", "zh",
"--providers", "opensubtitles",
movie_path
])
关键安全配置
-
容器隔离:
# 在 docker-compose.yml 中限制权限 security_opt: - no-new-privileges:true cap_drop: - ALL -
定期凭证轮换:
# 使用 Vault 管理密钥 docker run -d --name vault -p 8200:8200 vault server -dev -
网络分段:
networks: media_net: driver: bridge internal: true public_net: driver: bridge
通过以上方案,您可以通过自然语言指令实现:
- 影视资源自动搜索下载(
下载《流浪地球2》) - 智能重命名与元数据刮削
- 自动触发 Jellyfin 媒体库更新
- 实时任务状态查询(
《奥本海默》下载进度如何?)
建议配合硬件加速(如 Intel QuickSync)提升媒体处理效率,并通过 Telegram/Discord 机器人接口扩展指令输入渠道。

浙公网安备 33010602011771号