feat: 创作工作台统一 + AI味检测/白标 + 移动端补全 + 合规发布闭环

- 新增创作工作台 studio.html:合并选题/内容工厂/文章管理为单一 tab 入口(iframe embed 模式)
- 新增 AI味检测模块(ai_slop API + 页面,合规软硬问题分级)
- 新增白标品牌配置(branding API + 页面 + deploy 私有化交付包)
- 发布闭环:publishing 放宽至 editor + records/mark-published 接口
- 移动端响应式补全(admin/calendar/ai-slop 表格卡片兜底)
- 修复菜单幂等播种缺陷(按 path 对齐,避免功能页孤立)
- 新增短视频脚本 shortvideo.py 与 2026 市场调研简报
This commit is contained in:
yuzhiran
2026-07-11 12:36:01 +08:00
parent 3d596275d5
commit 7e953afbd2
39 changed files with 2418 additions and 311 deletions
+39
View File
@@ -0,0 +1,39 @@
# ===== 数据库 =====
# 默认 SQLiteUSE_POSTGRES=false);生产设 true 并填 DATABASE_URL
USE_POSTGRES=false
# PG_HOST=db
# PG_PORT=5432
# PG_DATABASE=yzr_nr
# PG_USER=yzr
# PG_PASSWORD=change_me_strong
# DATABASE_URL=postgresql://yzr:yzr_password@db:5432/yzr_nr
# ===== 安全 =====
# 务必修改为随机长字符串
SECRET_KEY=change_this_to_a_long_random_secret_key
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_DAYS=7
# ===== 初始管理员 =====
DEFAULT_ADMIN_USERNAME=admin
DEFAULT_ADMIN_PASSWORD=admin123
# ===== 项目根(容器内固定为 /app =====
PROJECT_ROOT=/app
# ===== 主 LLM(按 provider 填写对应 Key =====
# provider 可选:nvidia / opencode-go / sensenova
LLM_PROVIDER=opencode-go
LLM_API_KEY=your_main_llm_key
LLM_MODEL=deepseek-v4-flash
LLM_BASE_URL=https://opencode.ai/zen/go/v1
# ===== 备用推理通道(opencode-go =====
OPENCODE_API_KEY=your_opencode_key
OPENCODE_BASE_URL=https://opencode.ai/zen/go/v1
OPENCODE_MODEL=deepseek-v4-flash
# ===== 配图生成(sensenova,可选) =====
SENSENOVA_API_KEY=
SENSENOVA_BASE_URL=https://token.sensenova.cn/v1
SENSENOVA_IMAGE_MODEL=sensenova-6.7-flash-lite
+20
View File
@@ -0,0 +1,20 @@
FROM python:3.11-slim
WORKDIR /app
# 安装依赖(先拷 requirements 享受层缓存)
COPY platform/backend/requirements.txt /app/platform/backend/requirements.txt
RUN pip install --no-cache-dir -r /app/platform/backend/requirements.txt
# 拷贝整个项目(保持 automation/ scripts/ 等相对路径)
COPY . /app
# 关键:让 initial_data.py 的 PROJECT_ROOT 指向 /app(与运行时一致)
ENV PROJECT_ROOT=/app
ENV USE_POSTGRES=false
ENV PYTHONUNBUFFERED=1
EXPOSE 8001
# 若使用 venv 可改为 ./start-platform.sh 8001
CMD ["sh", "-c", "cd /app/platform/backend && uvicorn app.main:app --host 0.0.0.0 --port 8001"]
+68
View File
@@ -0,0 +1,68 @@
# 宇之然内容创作平台 — 私有化 / 白标部署包
# YuZhiRan Content Platform — Private / White-label Deployment Package
本目录用于把「宇之然内容创作平台」作为**可私有化部署的 AI 内容中台**交付给客户(MCN、企业市场部、行业自媒体团队),
或作为白标产品转售。平台已内置白标能力:部署后管理员在「白标设置」页即可改平台名称 / Logo / 主色 / 支持邮箱。
## 交付形态
- 单容器即可运行(默认 SQLite,零外部依赖);生产建议挂 PostgreSQL(见下方 docker-compose 注释)。
- 全部为静态前端 + FastAPI 后端,无第三方 SaaS 依赖,可跑在内网 / 离线环境。
- 符合《AI 生成合成内容标识办法》:AI 稿默认注入显式 + 隐式声明,发布前必须由真人校验(系统不代发)。
## 一分钟启动(SQLite,零依赖)
```bash
# 1. 准备后端环境变量(含管理员密码、LLM Key)
cp .env.example ../platform/backend/.env
vim ../platform/backend/.env # 至少填 LLM_API_KEY / DEFAULT_ADMIN_PASSWORD
# 2. 构建并启动
docker compose up -d --build
# 3. 访问
# 前台: http://<服务器IP>:8001/
# 后台: http://<服务器IP>:8001/admin.html (默认 admin / 见 .env 中 DEFAULT_ADMIN_PASSWORD
```
## 生产部署(PostgreSQL
编辑 `docker-compose.yml`,取消 `db` 服务与 `web``USE_POSTGRES=true` / `DATABASE_URL` 的注释,
并删掉 `web``USE_POSTGRES=false` 那一行。数据库数据持久化在命名卷 `yzr_pgdata`
## 白标(转售 / 客户内网)
1. 用管理员登录后台 → 左侧「白标设置」。
2. 填入客户的平台名称、Logo URL、主色、支持邮箱 → 保存。
3. 前台导航与品牌色即时生效。无需改代码、无需重新构建镜像。
(底层读取 `system_configs` 表中 `brand_name / brand_logo / brand_primary_color / brand_support_email`
亦可直接 `UPDATE system_configs SET value='...' WHERE key='brand_name';` 批量初始化多客户。)
## 数据目录
容器内:
- 代码:`/app`
- SQLite 数据:`/app/platform/backend/yu_zhi_ran.db`
- 生成内容/图片:`/app/automation`(建议挂载卷持久化)
## 环境变量说明(platform/backend/.env
| 变量 | 说明 |
| --- | --- |
| USE_POSTGRES | true 用 PostgreSQLfalse 用 SQLite |
| PG_HOST/PG_PORT/PG_DATABASE/PG_USER/PG_PASSWORD | PostgreSQL 连接(USE_POSTGRES=true 时) |
| SECRET_KEY | JWT 签名密钥(**务必修改**) |
| DEFAULT_ADMIN_USERNAME / DEFAULT_ADMIN_PASSWORD | 初始管理员(首次启动创建) |
| LLM_API_KEY / LLM_MODEL / LLM_PROVIDER | 主 LLMnvidia / opencode-go / sensenova 等) |
| OPENCODE_API_KEY / OPENCODE_BASE_URL / OPENCODE_MODEL | 备用推理通道 |
| SENSENOVA_API_KEY | 配图生成(可选) |
## 目录结构(源码)
```
yu-zhi-ran/
├── platform/backend/ # FastAPI + SQLAlchemy 后端
├── platform/frontend/ # Vue3 CDN 前端(无需构建)
├── automation/ # 选题/案例/生成内容数据
├── scripts/ # 采集 / 创作 / 发布 脚本
├── tests/ # 集成测试
└── deploy/ # 本部署包
```
## 许可与交付建议
- 本包以「私有化实例」方式交付,每个客户一套独立部署(数据隔离)。
- 建议定价:私有化买断 + 年运维/更新订阅;或按实例数授权。
- AI 内容合规责任在内容发布方(客户),平台仅提供声明注入与发布前人工校验闸门。
+39
View File
@@ -0,0 +1,39 @@
services:
web:
build:
context: ..
dockerfile: deploy/Dockerfile
container_name: yzr-platform
ports:
- "8001:8001"
environment:
# 默认 SQLite(零依赖)。生产请改用下方 PostgreSQL 配置:
- USE_POSTGRES=false
# - USE_POSTGRES=true
# - DATABASE_URL=postgresql://yzr:yzr_password@db:5432/yzr_nr
- PROJECT_ROOT=/app
- PYTHONUNBUFFERED=1
volumes:
# 持久化生成内容与数据
- app_automation:/app/automation
- app_content:/app/content
# 挂载后端 .env(含管理员密码、LLM Key
- ./backend.env:/app/platform/backend/.env:ro
restart: unless-stopped
# 生产用 PostgreSQL(取消注释并启用上方 USE_POSTGRES=true / DATABASE_URL
# db:
# image: postgres:16-alpine
# container_name: yzr-db
# environment:
# - POSTGRES_USER=yzr
# - POSTGRES_PASSWORD=yzr_password
# - POSTGRES_DB=yzr_nr
# volumes:
# - yzr_pgdata:/var/lib/postgresql/data
# restart: unless-stopped
volumes:
app_automation:
app_content:
yzr_pgdata: