# Relink_MediaGenWorkFlow
**Repository Path**: liveyoung0101/rl-media-gen-work-flow
## Basic Information
- **Project Name**: Relink_MediaGenWorkFlow
- **Description**: Relink团队——新媒体内容生成工作台
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-02-04
- **Last Updated**: 2026-02-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 新媒体内容生成与分析工作台 (MVP)
> 基于 Claude API 的智能内容创作伙伴,帮助创作者快速生成、理解和优化新媒体文案
## 📝 项目简介
本项目是一个基于 AgentX 世界观的新媒体内容生成与解释工具,旨在帮助内容创作者(尤其是学生/普通用户)解决三大痛点:
1. **不知道文案是否"好"** → 提供质量评分和反馈
2. **不知道为什么"这条能火/那条不行"** → 给出专业解释和建议
3. **缺乏对传播效果的直觉判断** → 模拟不同人群的传播预期
### 核心特性
- ✅ **多风格内容生成** - 支持5种文案风格(专业权威、轻松生活、幽默风趣、严肃深度、感性走心)
- ✅ **智能标题生成** - 每个风格提供3个标题选项
- ✅ **内容质量评分** - AI评审并给出改进建议
- ✅ **封面设计建议** - 小红书平台专属功能
- ✅ **受众传播预测** - 模拟不同人群的传播效果
- ✅ **历史记录管理** - 保存和回顾所有生成记录
- ✅ **深色/浅色主题** - 自适应用户偏好
## 🚀 快速开始
### 前置要求
- **Python** 3.8+ (推荐 3.13)
- **Node.js** 16+ (包含 npm)
- **uv** - Python 包管理器 ([安装指南](https://github.com/astral-sh/uv))
- **Claude API Key** - 从 [Anthropic Console](https://console.anthropic.com/) 获取
### 一键启动(推荐)
#### macOS/Linux
```bash
# 1. 环境配置(仅首次运行)
./setup.sh
# 2. 启动所有服务
./start.sh
# 3. 停止所有服务
./stop.sh
```
#### Windows
```cmd
REM 1. 环境配置(仅首次运行)
setup.bat
REM 2. 启动所有服务
start.bat
REM 3. 停止所有服务
stop.bat
```
### 手动启动
展开查看手动启动步骤
#### 1. 安装依赖
**Backend (Python + Node):**
```bash
cd backend
# Python 依赖
uv venv # 创建虚拟环境
uv pip install -r requirements.txt # 安装 Python 包
# Node.js 依赖 (AgentX Wrapper)
npm install # 安装 @anthropic-ai/sdk
```
**Frontend (Node):**
```bash
cd frontend
npm install
```
#### 2. 启动服务
**终端 1 - Backend:**
```bash
cd backend
uv run python app.py
# 或使用虚拟环境
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
python app.py
```
**终端 2 - Frontend:**
```bash
cd frontend
npm run dev
```
## 📱 访问与配置
### 访问地址
启动成功后,访问以下地址:
- **前端应用**: http://localhost:3000
- **后端 API**: http://localhost:8000
- **API 文档**: http://localhost:8000/docs (FastAPI Swagger UI)
### 初次配置
1. 打开前端应用 http://localhost:3000
2. 点击导航栏的「设置」进入配置页面
3. 填写以下信息:
- **API Key**: 你的 Claude API 密钥
- **Base URL**: API 服务器地址
- 官方地址: `https://api.anthropic.com`
- 或使用代理/中转服务地址
- **Model**: 使用的模型(默认 `claude-sonnet-4-5-20250929`)
4. 点击「测试连接」确认配置正确
5. 点击「保存设置」
## 📦 项目结构
```
final_project/
├── backend/ # 后端服务
│ ├── app.py # FastAPI 应用入口
│ ├── database.py # SQLite 数据库操作
│ ├── llm_service.py # LLM 服务层(核心逻辑)
│ ├── agentx_wrapper.js # AgentX Minimal Runtime 包装器
│ ├── requirements.txt # Python 依赖
│ ├── package.json # Node.js 依赖
│ ├── api/ # API 路由模块
│ │ ├── project.py # 项目生成和管理
│ │ └── settings.py # 设置管理
│ ├── prompts/ # LLM 提示词模板
│ │ ├── generate_copy_v2.txt # 文案生成
│ │ ├── review_copy.txt # 内容评审
│ │ ├── cover_suggestion_xhs.txt # 封面建议
│ │ └── simulate_spread.txt # 传播模拟
│ └── data/ # 运行时数据
│ └── app.db # SQLite 数据库
│
├── frontend/ # 前端应用
│ ├── index.html # 入口 HTML
│ ├── package.json # 依赖配置
│ ├── vite.config.js # Vite 构建配置
│ └── src/
│ ├── main.js # 应用入口
│ ├── App.vue # 根组件
│ ├── style.css # 全局样式(含主题)
│ ├── api.js # API 客户端
│ ├── router.js # Vue Router 配置
│ ├── components/ # 通用组件
│ │ ├── Layout.vue # 布局组件
│ │ └── ThemeToggle.vue # 主题切换
│ └── views/ # 页面组件
│ ├── Home.vue # 首页(输入界面)
│ ├── MainFlow.vue # 生成流程页
│ ├── History.vue # 历史记录
│ └── Settings.vue # 设置页面
│
├── setup.sh / setup.bat # 环境配置脚本
├── start.sh / start.bat # 一键启动脚本
├── stop.sh / stop.bat # 停止服务脚本
├── clear_sensitive_data.sh/bat # 清除敏感数据脚本
├── README.md # 本文件
└── SECURITY.md # 安全指南
```
## 🏗️ 系统架构
### 技术栈
**Backend:**
- **FastAPI** - 高性能异步 Web 框架
- **SQLite** - 轻量级嵌入式数据库
- **Pydantic** - 数据验证和序列化
- **asyncio** - 异步并发执行
- **Node.js** - AgentX Wrapper 运行时
- **Anthropic Claude API** - 大语言模型服务
**Frontend:**
- **Vue 3** - 渐进式 JavaScript 框架
- **Composition API** - Vue 3 组合式 API
- **Vue Router** - 单页应用路由
- **Vite** - 极速开发构建工具
- **Native CSS** - 原生 CSS(含 CSS Variables 主题系统)
### 架构设计
```
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
│ ┌────────┐ ┌─────────┐ ┌────────┐ ┌──────────┐ │
│ │ 首页 │ │生成流程 │ │ 历史 │ │ 设置 │ │
│ └────────┘ └─────────┘ └────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
│ HTTP
▼
┌─────────────────────────────────────────────────────────────┐
│ 后端 API 层 │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ /api/project │ │ /api/settings │ │
│ │ - run │ │ - GET/POST │ │
│ │ - list │ │ - test │ │
│ │ - detail │ └──────────────────┘ │
│ │ - clear │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 业务逻辑层 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ llm_service.py (核心) │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ generate_multi_style_copies (并发生成) │ │ │
│ │ │ ├─ generate_structured_copy x 5 │ │ │
│ │ │ │ ├─ load_prompt (加载模板) │ │ │
│ │ │ │ └─ call_llm (调用 Claude) │ │ │
│ │ │ └─ asyncio.gather (并发执行) │ │ │
│ │ ├─────────────────────────────────────────────│ │ │
│ │ │ review_copy (内容评审) │ │ │
│ │ │ └─ call_llm │ │ │
│ │ ├─────────────────────────────────────────────│ │ │
│ │ │ simulate_spread (传播模拟) x N人群 │ │ │
│ │ │ └─ asyncio.gather │ │ │
│ │ └─────────────────────────────────────────────│ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AgentX Minimal Runtime │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ agentx_wrapper.js (Node.js) │ │
│ │ ┌────────────────────────────────────────────────┐ │ │
│ │ │ createMinimalRuntime() │ │ │
│ │ │ ├─ Anthropic Client 初始化 │ │ │
│ │ │ ├─ sendMessage(prompt) │ │ │
│ │ │ ├─ getMessages() - 获取对话历史 │ │ │
│ │ │ └─ dispose() - 清理资源 │ │ │
│ │ └────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Anthropic API │
│ (Claude Sonnet 4.5) │
└─────────────────────────────────────────────────────────────┘
```
### 数据流
1. **用户输入** → 前端收集(主题、平台、风格、人群)
2. **API 请求** → POST /api/project/run
3. **并发生成** → asyncio.gather 同时执行:
- 5种风格的文案生成(如果未指定风格)
- 或单一风格生成
4. **内容评审** → 对第一个生成结果进行评分
5. **传播模拟** → 针对每个目标人群并发模拟
6. **数据持久化** → 保存到 SQLite
7. **返回前端** → 结构化 JSON 响应
8. **前端渲染** → 多风格卡片、评分、传播预测
## 📜 脚本说明
### 1. 环境配置脚本 (`setup.sh` / `setup.bat`)
**功能:**
- 检测 Python 3 和 uv 是否安装
- 检测 Node.js 和 npm 是否安装
- 自动创建 Python 虚拟环境
- 自动安装所有依赖(Python + Node)
- 提示缺少的工具和安装方法
**使用:**
```bash
./setup.sh # macOS/Linux
setup.bat # Windows
```
**输出示例:**
```
📦 [1/4] 检查 Python 环境...
✓ Python3 已安装: 3.13.0
✓ uv 已安装: uv 0.5.0
→ 正在安装 Python 依赖...
✓ Python 依赖安装完成
📦 [2/4] 检查 Node.js 环境...
✓ Node.js 已安装: v20.10.0
✓ npm 已安装: 10.2.3
✅ 环境配置完成!所有依赖已安装
```
### 2. 一键启动脚本 (`start.sh` / `start.bat`)
**功能:**
- 检查环境是否配置完成
- 同时启动前后端服务
- 自动检测端口占用
- 输出访问地址和日志位置
- 支持 Ctrl+C 优雅关闭
**使用:**
```bash
./start.sh # macOS/Linux
start.bat # Windows
```
**输出示例:**
```
🚀 启动新媒体内容生成平台
========================================
📋 检查环境...
✓ 环境检查通过
🔧 启动后端服务...
→ Backend PID: 12345
→ 访问地址: http://localhost:8000
🎨 启动前端服务...
→ Frontend PID: 12346
→ 访问地址: http://localhost:3000
✅ 服务启动成功!
📱 访问地址:
前端: http://localhost:3000
后端: http://localhost:8000
API文档: http://localhost:8000/docs
```
### 3. 停止服务脚本 (`stop.sh` / `stop.bat`)
**功能:**
- 优雅关闭前后端服务
- 清理端口占用
- 移除 PID 文件
**使用:**
```bash
./stop.sh # macOS/Linux
stop.bat # Windows
```
### 4. 清除敏感数据脚本 (`clear_sensitive_data.sh` / `.bat`)
**功能:**
- 清除数据库中的 API Key
- 清除所有历史项目数据
- 保留数据库表结构
**使用场景:**
在推送代码到 Git 前运行,确保不泄露 API Key
**使用:**
```bash
./clear_sensitive_data.sh # macOS/Linux
clear_sensitive_data.bat # Windows
```
详见 [SECURITY.md](SECURITY.md)
## 🎯 使用指南
### 1. 创作新文案
1. 访问首页 http://localhost:3000
2. 在输入框中输入你的主题(如:"冬日护肤")
3. 选择平台(小红书/抖音/公众号/微博)
4. (可选)选择风格,留空则生成全部5种风格
5. (可选)选择目标人群(性别、年龄段)
6. 点击「开始生成」
### 2. 查看生成结果
生成完成后,页面会显示:
- **多风格变体卡片** - 并排展示不同风格的文案
- **标题选择** - 每个风格3个标题可选
- **正文内容** - 完整的文案正文
- **话题标签** - 可切换选择的标签
- **复制按钮** - 一键复制完整文案(按发布格式)
### 3. 查看历史记录
1. 点击导航栏「历史」
2. 浏览所有生成过的项目卡片
3. 点击任意卡片查看详细报告:
- 输入参数
- 生成的文案
- 质量评分
- 封面建议(小红书)
- 传播预测
### 4. 管理设置
在「设置」页面可以:
- 修改 API Key
- 切换 API 服务器地址
- 更换模型
- 测试连接
- 清除所有历史数据
## 🧪 开发指南
### 修改提示词模板
提示词模板位于 `backend/prompts/` 目录:
1. 创建或编辑 `.txt` 文件
2. 使用占位符:`{topic}`, `{platform}`, `{tone}`, `{audience}`
3. **重要**: JSON 示例必须使用双大括号 `{{}}` 转义
**示例:**
```
你是专业文案专家。主题:{topic}
输出 JSON 格式:
{{
"title": "标题",
"content": "内容"
}}
```
### 添加新的文案风格
在 `backend/llm_service.py` 中修改:
```python
tones_to_generate = ["专业权威", "轻松生活", "幽默风趣", "严肃深度", "感性走心", "新风格"]
```
在前端 `frontend/src/views/Home.vue` 中同步修改:
```javascript
tones: ['专业权威', '轻松生活', '幽默风趣', '严肃深度', '感性走心', '新风格']
```
### 修改主题样式
全局主题变量定义在 `frontend/src/style.css`:
```css
/* 深色主题 */
:root {
--bg-app: #121212;
--text-main: #E0E0E0;
--accent-color: #10B981; /* 主题色 */
}
/* 浅色主题 */
body.light {
--bg-app: #FFFFFF;
--text-main: #1F2937;
--accent-color: #10B981;
}
```
## 🐛 常见问题
Q: 提示端口被占用怎么办?
A: 运行停止脚本清理端口:
```bash
./stop.sh # macOS/Linux
stop.bat # Windows
```
或手动检查并终止进程:
```bash
# 查看占用 8000 端口的进程
lsof -ti:8000 # macOS/Linux
netstat -ano | findstr :8000 # Windows
# 终止进程
kill -9 # macOS/Linux
taskkill /F /PID # Windows
```
Q: 依赖安装失败怎么办?
A: 确保安装了所有必需工具:
**Python & uv:**
```bash
# macOS
brew install python3 uv
# Ubuntu/Debian
sudo apt install python3 python3-pip
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
# 从 python.org 安装 Python
# 然后: powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```
**Node.js & npm:**
```bash
# macOS
brew install node
# Ubuntu/Debian
sudo apt install nodejs npm
# Windows
# 从 nodejs.org 下载安装包
```
Q: API 调用失败怎么办?
A: 检查以下几点:
1. **API Key 是否正确**
- 在设置页面点击「测试连接」
- 确认 API Key 有效且有余额
2. **Base URL 是否可访问**
- 官方地址: `https://api.anthropic.com`
- 如使用代理,确认代理服务正常
3. **网络连接**
- 检查防火墙设置
- 确认可以访问 Anthropic API
4. **查看日志**
```bash
# 启动脚本会生成日志文件
tail -f logs/backend.log
```
Q: 前端无法连接后端怎么办?
A: 确认:
1. 后端服务正在运行(8000 端口)
2. 前端配置正确(`frontend/src/api.js` 中的 baseURL)
3. 没有 CORS 错误(检查浏览器控制台)
4. 防火墙未阻止本地连接
Q: 如何切换到不同的 Claude 模型?
A: 在设置页面修改 Model 字段,支持的模型包括:
- `claude-sonnet-4-5-20250929` (推荐,最新)
- `claude-3-5-sonnet-20241022`
- `claude-3-opus-20240229`
- `claude-3-haiku-20240307`
注意不同模型的定价和能力有所不同。
## 🔒 安全说明
- **API Key 存储**: 存储在 SQLite 数据库中,不要提交到 Git
- **推送前清理**: 运行 `./clear_sensitive_data.sh` 清除敏感数据
- **.gitignore**: 已配置忽略 `*.db`, `.env` 等敏感文件
- **生产部署**: 建议使用环境变量存储 API Key
详细安全指南请查看 [SECURITY.md](SECURITY.md)
## 📄 许可证
MIT License - 详见 [LICENSE](LICENSE) 文件
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
在提交 PR 前请确保:
- 代码风格一致
- 通过所有测试
- 更新相关文档
## 📧 联系方式
如有问题或建议,请通过以下方式联系:
- 邮箱: hikamous@outlook.com
---
**Built with ❤️ using Claude API, Vue 3, and FastAPI**
## 🙏 致谢与归属 / Acknowledgments & Attribution
本项目使用了以下优秀的开源软件和设计模式:
### AgentX Minimal Runtime(裁剪实现)
本项目基于 [AgentX](https://github.com/deepractice/agentx) 架构思想,并在此基础上裁剪并实现了一个轻量化的 **Minimal Runtime**,用于支撑单 Agent、单 Turn 的确定性内容生成流程。
该 Minimal Runtime 为本项目的核心运行时组件,由本项目作者基于 AgentX 的整体设计理念进行功能裁剪与工程重构,目标是:
- **降低 Agent 系统的使用与理解成本**
- **聚焦单次生成、可解释、可落地的业务场景**
- **提供稳定、可复用的 LLM 调用最小接口集**
**核心接口包括:**
- `createMinimalRuntime()` - 创建轻量级运行时实例
- `sendMessage()` - 向 LLM 发送单次生成请求
- `getMessages()` - 获取结构化生成与分析结果
- `dispose()` - 释放运行时资源
**实现位置:**
- `backend/agentx_wrapper.js` - 基于 AgentX 裁剪的 Minimal Runtime 实现
**致谢:**
感谢 [Deepractice](https://deepractice.ai) 团队开源 AgentX 项目,其在 Agent 架构抽象与工程边界划分上的设计,对本项目 Runtime 的裁剪与实现提供了重要思想参考。
### 其他依赖
- **[FastAPI](https://fastapi.tiangolo.com/)** - 高性能异步 Web 框架
- **[Vue 3](https://vuejs.org/)** - 渐进式 JavaScript 框架
- **[Vite](https://vitejs.dev/)** - 下一代前端构建工具
- **[Anthropic Claude API](https://www.anthropic.com/)** - 大语言模型服务
完整的依赖列表和许可证信息请查看:
- [LICENSE](LICENSE) - 项目许可证(含第三方许可证)
- [NOTICE](NOTICE) - 第三方软件归属声明
- `backend/package.json` - Node.js 依赖
- `backend/pyproject.toml` - Python 依赖
- `frontend/package.json` - 前端依赖