好的,以下是根据优化建议对文章进行改写的版本,采用第二人称叙述:


目录

  • 一、前言:当内容创作遇上AI技术
  • 二、摘要
  • 三、场景需求分析
  • 四、技术价值分析
  • 五、技术架构设计
  • 六、核心代码实现
  • 环境准备
  • 步骤1:动态提示词引擎实现
  • 步骤2:DeepSeek API服务封装
  • 步骤3:异步任务处理器
  • 步骤4:内容查重机制(Python实现)
  • 步骤5:控制器整合完整流程
  • 步骤6:路由配置
  • 步骤7:前端调用示例(Vue.js)
  • 系统工作流程
  • 关键技术解析
  • 七、项目实现策略
  • 八、部署方案
  • 九、常见问题解决方案详解
  • 问题1:生成内容重复率高
  • 问题2:API响应超时
  • 问题3:内容风格不符合小红书调性
  • 问题4:突发流量导致服务不可用
  • 问题排查流程图
  • 十、总结
  • 十一、下期预告
  • 往前精彩系列文章

你是否曾在深夜为小红书的选题绞尽脑汁?是否在内容创作的道路上既想保持高频率更新,又不想牺牲质量?本文将带你探索如何将AI技术融入内容创作流程,用PHP与DeepSeek构建智能内容生成系统,开启高效创作之旅。


一、前言:当内容创作遇上AI技术

小红书作为国内领先的社交电商平台,内容创作是其核心竞争力之一。随着用户数量的不断增长,内容创作的需求也日益增加。然而,传统的内容创作方式面临着诸多挑战,如创作效率低、内容质量参差不齐等。AI技术的出现为内容创作带来了新的机遇。你是否想过,通过技术手段解放双手,让创作变得更加轻松高效?本文将为你揭晓如何利用PHP和DeepSeek技术实现小红书内容的自动化生成。


二、摘要

你将看到如何利用DeepSeek文本大模型与PHP后端系统开发小红书内容辅助工具。这个系统的主要功能包括自动化标题生成、智能文案创作、多账号内容管理以及话题趋势分析。通过Python脚本处理AI任务,PHP实现业务流程,方案适用于多种内容创作场景,且提供完整可运行代码供开发者学习参考。


三、场景需求分析

在开始之前,让我们先了解一下不同用户类型的需求。根据市场调研数据,个人博主(占比45%)希望优化创作流程;电商运营(占比30%)需要商品文案辅助生成;内容机构(占比25%)则侧重于多账号协同管理。以某美妆团队为例,他们需要产出多角度的产品内容,传统方式耗时较长,而AI辅助系统能够显著提升工作效率。


四、技术价值分析

接下来,我们来看看这个系统的核心功能模块设计。通过以下流程图,你可以清晰地了解各个模块之间的关系:

PHP接单涨薪系列(三十一):提升小红书创作效率,PHP+DeepSeek自动化内容生成实战_php

技术实现的价值在于:

  • 动态提示词引擎能够提升内容多样性,让生成的文案不再千篇一律。
  • 内容查重机制可以保障原创性,避免因重复内容而影响账号权重。
  • 异步任务处理则优化了系统性能,使创作过程更加流畅。

五、技术架构设计

为了实现上述功能,我们采用了以下技术栈:

// 系统架构核心组件
$techStack = ['前端' => 'Vue3 + ElementPlus','网关' => 'Nginx','后端' => 'PHP8.2 + Laravel11','AI处理' => 'DeepSeek-V2 API + Python脚本','存储' => 'Redis + MySQL','部署' => 'Docker容器化'
];

关键技术点包括:

  1. PHP异步任务处理:Laravel Queue管理AI生成队列,确保任务高效执行。
  2. 动态提示词引擎:根据话题热度调整AI参数,让生成内容紧跟热点。
  3. 内容查重机制:通过相似度算法过滤重复内容,保障文案质量。

六、核心代码实现

接下来,咱们一步步把技术架构里提到的关键模块实现出来,还会提供完整可运行的代码示例哦。咱们要搭建的是一个完整的小红书内容生成系统,包含动态提示词引擎、异步任务处理和内容查重机制,听起来是不是很酷?


环境准备

# 创建项目目录
mkdir xhs-generator && cd xhs-generator# 初始化Laravel项目
composer create-project laravel/laravel backend
cd backend# 安装Python环境(推荐3.8+)
sudo apt install python3-venv
python3 -m venv .venv
source .venv/bin/activate
pip install requests numpy

步骤1:动态提示词引擎实现

文件路径:backend/app/Services/PromptEngine.php

<?phpnamespace App\Services;class PromptEngine
{// 行业关键词权重配置const INDUSTRY_WEIGHTS = ['美妆' => ['成分', '评测', '教程'],'数码' => ['参数', '对比', '体验'],'美食' => ['配方', '口感', '教程']];// 动态生成提示词public function generate(string $keyword, string $industry = '通用'): string{$emoji = $this->getEmoji($industry);$weightStr = $this->getWeights($industry);return "你是一个{$industry}领域的小红书内容专家,请为关键词'{$keyword}'生成3条标题。". "要求:1) 以{$emoji}开头 2) 包含悬念 3) {$weightStr} 4) 不超过20字";}// 获取行业相关emojiprivate function getEmoji(string $industry): string{$emojis = ['美妆' => '💄','数码' => '📱','美食' => '🍰','通用' => '✨'];return $emojis[$industry] ?? '✨';}// 获取权重关键词private function getWeights(string $industry): string{if (!isset(self::INDUSTRY_WEIGHTS[$industry])) {return "突出实用价值";}$weights = implode('、', self::INDUSTRY_WEIGHTS[$industry]);return "重点包含{$weights}等关键词";}
}

步骤2:DeepSeek API服务封装

文件路径:backend/app/Services/AIContentService.php

<?phpnamespace App\Services;use Illuminate\Support\Facades\Http;
use App\Jobs\ProcessContentGeneration;class AIContentService
{// 调用DeepSeek生成内容public function generateContent(string $prompt): array{$response = Http::withHeaders(['Authorization' => 'Bearer ' . env('DEEPSEEK_API_KEY'),'Content-Type' => 'application/json'])->timeout(30)->post('https://api.deepseek.com/v1/chat', ['model' => 'deepseek-chat','messages' => [['role' => 'system', 'content' => '你是一个专业的小红书内容创作助手'],['role' => 'user', 'content' => $prompt]],'temperature' => 0.7,'max_tokens' => 300]);if ($response->failed()) {throw new \Exception("API请求失败: " . $response->body());}$data = $response->json();return array_map('trim', explode("\n", $data['choices'][0]['message']['content']));}// 异步生成方法(入队)public function asyncGenerate(string $prompt, int $userId): void{ProcessContentGeneration::dispatch($prompt, $userId)->onQueue('content_generation');}
}

步骤3:异步任务处理器

文件路径:backend/app/Jobs/ProcessContentGeneration.php

<?phpnamespace App\Jobs;use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Services\AIContentService;
use App\Services\ContentSimilarity;class ProcessContentGeneration implements ShouldQueue
{use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;public function __construct(protected string $prompt,protected int $userId) {}public function handle(AIContentService $aiService,ContentSimilarity $similarity): void {// 1. 生成内容$contents = $aiService->generateContent($this->prompt);// 2. 查重处理$uniqueContents = [];foreach ($contents as $content) {if (!$similarity->isDuplicate($content, $this->userId)) {$uniqueContents[] = $content;}}// 3. 保存到数据库if (!empty($uniqueContents)) {\App\Models\GeneratedContent::create(['user_id' => $this->userId,'contents' => json_encode($uniqueContents),'prompt' => $this->prompt]);}}
}

步骤4:内容查重机制(Python实现)

文件路径:backend/py_services/similarity_check.py

import numpy as np
import re
from sklearn.feature_extraction.text import TfidfVectorizer
import json
import osclass ContentSimilarity:def __init__(self, user_id):self.user_id = user_idself.vectorizer = TfidfVectorizer(stop_words=['的', '了', '在', '是', '我'],ngram_range=(1, 2))self.load_user_history()def load_user_history(self):"""加载用户历史内容"""self.history = []history_file = f'user_history_{self.user_id}.json'if os.path.exists(history_file):with open(history_file, 'r', encoding='utf-8') as f:self.history = json.load(f)def save_user_history(self, content):"""保存新内容到历史记录"""self.history.append(content)history_file = f'user_history_{self.user_id}.json'with open(history_file, 'w', encoding='utf-8') as f:json.dump(self.history, f, ensure_ascii=False)def preprocess(self, text):"""文本预处理"""text = re.sub(r'[^\w\s]', '', text)  # 去标点return text.strip()[:100]  # 限制长度def is_duplicate(self, new_content, threshold=0.75):"""检查内容是否重复"""if not self.history:self.save_user_history(new_content)return False# 预处理processed_new = self.preprocess(new_content)processed_history = [self.preprocess(c) for c in self.history]# 计算TF-IDF向量all_texts = processed_history + [processed_new]tfidf_matrix = self.vectorizer.fit_transform(all_texts)# 计算相似度last_vector = tfidf_matrix[-1]similarities = np.dot(tfidf_matrix[:-1], last_vector.T).toarray().flatten()# 检查是否超过阈值if np.max(similarities) > threshold:return Trueself.save_user_history(new_content)return False# PHP调用示例
if __name__ == "__main__":import sysuser_id = int(sys.argv[1])content = sys.argv[2]checker = ContentSimilarity(user_id)print('1' if checker.is_duplicate(content) else '0')

步骤5:控制器整合完整流程

文件路径:backend/app/Http/Controllers/ContentController.php

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Services\PromptEngine;
use App\Services\AIContentService;class ContentController extends Controller
{public function generateTitles(Request $request){// 1. 验证输入$validated = $request->validate(['keyword' => 'required|string|max:20','industry' => 'nullable|string|in:美妆,数码,美食,通用']);// 2. 生成动态提示词$engine = new PromptEngine();$prompt = $engine->generate($validated['keyword'], $validated['industry'] ?? '通用');// 3. 异步处理请求$aiService = new AIContentService();$aiService->asyncGenerate($prompt, auth()->id());// 4. 返回响应return response()->json(['status' => 'processing','message' => '内容生成中,请稍后刷新查看结果','prompt' => $prompt]);}public function getResults($jobId){// 实际项目中此处查询数据库获取结果// 这里简化为示例数据return response()->json(['status' => 'completed','titles' => ["💄油皮必看!三招告别脱妆烦恼","🌿成分党实测!这款精华真的值得买吗?","✅新手教程:5分钟搞定日常通勤妆"],'generated_at' => now()->format('Y-m-d H:i:s')]);}
}

步骤6:路由配置

文件路径:backend/routes/api.php

<?phpuse Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContentController;Route::middleware('auth:sanctum')->group(function () {// 内容生成接口Route::post('/generate', [ContentController::class, 'generateTitles']);// 结果获取接口Route::get('/results/{jobId}', [ContentController::class, 'getResults']);
});

步骤7:前端调用示例(Vue.js)

<template><div class="generator-container"><h3>小红书标题生成器</h3><div class="input-group"><input v-model="keyword" placeholder="输入关键词" /><select v-model="industry"><option value="美妆">美妆</option><option value="数码">数码</option><option value="美食">美食</option><option value="通用">通用</option></select><button @click="generate">生成标题</button></div><div v-if="loading" class="loading">生成中...</div><div v-if="results.length" class="results"><h4>生成结果:</h4><ul><li v-for="(title, index) in results" :key="index">{{ title }}</li></ul></div></div>
</template><script>
export default {data() {return {keyword: '',industry: '美妆',loading: false,results: [],jobId: null}},methods: {async generate() {if (!this.keyword.trim()) return;this.loading = true;this.results = [];try {// 1. 发送生成请求const response = await fetch('/api/generate', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({keyword: this.keyword,industry: this.industry})});const data = await response.json();this.jobId = data.jobId; // 实际项目中返回任务ID// 2. 轮询获取结果(简化版,实际应使用WebSockets或定时器)setTimeout(async () => {const resultRes = await fetch(`/api/results/${this.jobId}`);const resultData = await resultRes.json();this.results = resultData.titles;this.loading = false;}, 3000); // 模拟处理延迟} catch (error) {console.error('生成失败:', error);this.loading = false;}}}
}
</script>

系统工作流程

  1. 用户输入:关键词 + 行业选择
  2. 动态提示词:PromptEngine根据行业生成定制化提示
  3. 任务入队:通过Laravel Queue分发到异步队列
  4. AI内容生成:调用DeepSeek API获取初始内容
  5. 内容查重:Python服务检查内容相似度
  6. 结果存储:保存唯一内容到数据库
  7. 前端展示:用户获取生成结果

关键技术解析

  1. 动态提示词引擎
  • 根据行业动态调整关键词权重
  • 自动匹配行业相关emoji
  • 示例:美妆行业会强调"成分"、"评测"等关键词
  1. 异步任务处理
  • 使用Laravel Queue处理耗时操作
  • 防止API请求阻塞主线程
  • 支持水平扩展处理高并发
  1. 内容查重机制
  • TF-IDF向量化文本内容
  • 计算余弦相似度判定重复
  • 用户历史内容本地存储

七、项目实现策略

在实施过程中,我们遵循以下策略:

  1. 需求分析:明确内容创作场景的具体需求,这是项目成功的基础。
  2. 方案设计:采用分层架构,根据需求规模和复杂度选择合适的方案。
  3. PHP接单涨薪系列(三十一):提升小红书创作效率,PHP+DeepSeek自动化内容生成实战_#开发语言_02

  4. 技术亮点
  • 实时话题数据分析,让内容紧跟热点。
  • 行业特定模型优化,提升生成内容的专业性。
  1. 实施流程:模块化开发与分阶段交付,确保项目稳步推进。

八、部署方案

为了保障系统的高性能运行,我们进行了以下部署设计:

# Nginx负载配置示例
upstream app_servers {server 10.0.0.1:8000;server 10.0.0.2:8000;
}location /api/ {proxy_pass http://app_servers;proxy_connect_timeout 2s;
}

同时,我们还提供了以下优化建议:

  1. 缓存机制:使用Redis存储频繁访问数据,减少数据库压力。
  2. 请求限流:通过Laravel限流配置控制API调用频率,避免资源过载。
// Laravel限流配置
RateLimiter::for('ai-api', function (Request $request) {return Limit::perMinute(25);
});
  1. 任务队列:利用异步处理生成请求,提高系统响应速度。
php artisan queue:work --queue=content_jobs

九、常见问题解决方案详解

下面我们针对内容生成系统中常见的四大问题,提供详细的技术解析和实操解决方案,帮助你快速定位并解决问题:


问题1:生成内容重复率高

根本原因分析

  1. 提示词模板单一导致AI输出模式固化
  2. 用户历史数据未有效利用
  3. 相似内容检测机制不完善

解决方案详解

# 解决方案:动态模板引擎 + 语义扰动算法(Python实现)
import randomclass ContentDiversifier:def __init__(self, base_prompt):self.base_prompt = base_prompt# 预定义变量池self.variations = {"语气词": ["建议", "分享", "实测", "揭秘", "必看"],"风格词": ["干货", "教程", "攻略", "心得", "日记"],"修饰词": ["超实用", "简单", "高效", "神奇", "宝藏"]}def diversify_prompt(self):"""添加随机扰动元素到提示词"""# 随机选择变量组合variation_type = random.choice(["语气词", "风格词", "修饰词"])selected_word = random.choice(self.variations[variation_type])# 插入随机位置insert_pos = random.randint(0, len(self.base_prompt))diversified = (self.base_prompt[:insert_pos] + f"【{selected_word}】" + self.base_prompt[insert_pos:])return diversified# 使用示例
base_prompt = "为关键词'夏季防晒'生成3条小红书风格标题"
diversifier = ContentDiversifier(base_prompt)# 生成5种不同变体
for _ in range(5):print(diversifier.diversify_prompt())

实操步骤

  1. 在PromptEngine中添加扰动机制:
// 修改PromptEngine.php
public function generate(string $keyword, string $industry): string
{// ...原有代码...// 添加扰动因子$disturbances = ["使用不同语气风格","变换叙述视角","加入随机修饰词"];$disturbance = $disturbances[array_rand($disturbances)];return $basePrompt . " 5) {$disturbance}";
}
  1. 在AI调用前添加扰动:
// 修改AIContentService.php
public function generateContent(string $prompt): array
{// 添加扰动$diversifier = new ContentDiversifier($prompt);$finalPrompt = $diversifier->diversify();// ...调用API...
}

问题2:API响应超时

根本原因分析

  1. 长文本处理超过API时限(DeepSeek默认15秒)
  2. 网络延迟或波动
  3. 同步请求阻塞主线程

解决方案详解

// 解决方案:分段请求+结果聚合(PHP实现)
class ChunkProcessor {public function processLongContent(string $longText): array{// 1. 文本分段(每段200字)$chunks = $this->splitText($longText, 200);$results = [];// 2. 并行发送分段请求$promises = [];foreach ($chunks as $index => $chunk) {$promises[$index] = Http::async()->withToken(env('DEEPSEEK_KEY'))->post('https://api.deepseek.com/v1/chat', ['messages' => [['role' => 'user','content' => "处理这段文本: {$chunk}"]]]);}// 3. 等待所有响应$responses = Http::settle($promises)->wait();// 4. 聚合结果foreach ($responses as $response) {if ($response['state'] === 'fulfilled') {$results[] = json_decode($response['value'])->choices[0]->text;}}return $results;}private function splitText(string $text, int $chunkSize): array{// 按句子分割保持语义完整$sentences = preg_split('/(?<=[。!?])/u', $text);$chunks = [];$currentChunk = '';foreach ($sentences as $sentence) {if (mb_strlen($currentChunk . $sentence) <= $chunkSize) {$currentChunk .= $sentence;} else {$chunks[] = $currentChunk;$currentChunk = $sentence;}}if (!empty($currentChunk)) {$chunks[] = $currentChunk;}return $chunks;}
}

优化措施

  1. 配置超时重试机制:
// 在AIContentService中添加
->retry(3, 500) // 重试3次,间隔500ms
->timeout(8)    // 单次请求超时8秒
  1. 启用HTTP持久连接:
# 修改.env配置
DEEPSEEK_API_KEEPALIVE=true
DEEPSEEK_API_CONNECTION_TIMEOUT=5

问题3:内容风格不符合小红书调性

根本原因分析

  1. 缺乏平台特定语言风格训练
  2. 未考虑不同行业的内容特点
  3. 提示词未包含风格引导

解决方案详解

# 解决方案:风格注入引擎(Python实现)
class StyleInjector:def __init__(self, platform="xiaohongshu"):self.style_profiles = {"xiaohongshu": {"keywords": ["分享", "实测", "干货", "种草", "避坑"],"emoji": ["💄", "✨", "🌟", "🛍️", "📝"],"sentence_patterns": ["{emoji}建议收藏!{keyword}这样做{result}","{emoji}实测{product}{effect}","教你{number}步搞定{task}"]},"douyin": {# 抖音风格配置...}}self.profile = self.style_profiles[platform]def inject_style(self, prompt: str, industry: str) -> str:"""注入平台特定风格"""# 1. 添加行业关键词industry_keywords = self.get_industry_keywords(industry)prompt += f" 使用关键词: {', '.join(industry_keywords)}"# 2. 添加表情符号要求emoji = random.choice(self.profile['emoji'])prompt += f" 每条内容开头添加{emoji}表情"# 3. 添加句式模板pattern = random.choice(self.profile['sentence_patterns'])prompt += f" 使用类似句式: '{pattern}'"return promptdef get_industry_keywords(self, industry: str) -> list:"""获取行业特定关键词"""industry_mapping = {"美妆": ["成分党", "测评", "教程", "好物分享"],"数码": ["参数", "对比", "开箱", "使用技巧"],"美食": ["配方", "口感", "教程", "探店"]}return industry_mapping.get(industry, ["实用", "分享", "心得"])

实操步骤

  1. 创建风格数据库:
CREATE TABLE style_profiles (id INT AUTO_INCREMENT PRIMARY KEY,platform VARCHAR(20) NOT NULL,industry VARCHAR(20) NOT NULL,keywords JSON NOT NULL,emoji JSON NOT NULL,templates JSON NOT NULL
);-- 插入小红书美妆示例
INSERT INTO style_profiles (platform, industry, keywords, emoji, templates)
VALUES ('xiaohongshu','美妆','["成分党", "测评", "教程", "好物分享"]','["💄", "💅", "✨"]','["{emoji}建议收藏!{keyword}这样做{result}", "{emoji}实测{product}{effect}"]'
);
  1. 在PromptEngine中集成风格注入:
public function generate(string $keyword, string $industry): string
{// ...原有代码...// 注入风格$styleInjector = new StyleInjector('xiaohongshu');$prompt = $styleInjector->inject($basePrompt, $industry);return $prompt;
}

问题4:突发流量导致服务不可用

根本原因分析

  1. 未配置自动扩缩容
  2. 数据库连接池耗尽
  3. AI服务无速率限制

解决方案详解

# 解决方案:K8s HPA + 云函数备用(部署方案)
# 1. 创建HPA自动伸缩配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutscaler
metadata:name: ai-content-scaler
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: ai-content-generatorminReplicas: 2maxReplicas: 20metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70

全链路优化方案

  1. 前端限流
// Vue组件中添加请求队列
export default {methods: {async generate() {// 加入请求队列this.$requestQueue.add(() => this._realGenerate());},async _realGenerate() {// 实际生成逻辑}}
}
  1. 服务端限流
// 使用Laravel速率限制
Route::middleware(['throttle:ai_generate'])->group(function () {Route::post('/generate', [ContentController::class, 'generateTitles']);
});// config/rate-limiter.php
'ai_generate' => ['decay_minutes' => 1,'max_attempts' => 30,
],
  1. 降级方案
// 当DeepSeek不可用时启用备用方案
public function generateContent(string $prompt): array
{try {// 尝试主APIreturn $this->callDeepSeek($prompt);} catch (ApiException $e) {// 启用备选方案if (config('ai.backup_strategy') == 'template') {return $this->generateFromTemplate($prompt);}// 云函数后备return $this->callCloudFunction($prompt);}
}
  1. 数据库优化
// 使用连接池配置
'mysql' => ['driver' => 'mysql','host' => env('DB_HOST'),// ...'pool' => ['min_connections' => 5,'max_connections' => 100,'wait_timeout' => 3,],
],

问题排查流程图

PHP接单涨薪系列(三十一):提升小红书创作效率,PHP+DeepSeek自动化内容生成实战_#php_03

通过以上详细解决方案,你就可以系统性地解决内容生成系统中的常见问题。笔者建议在实际部署时:

  1. 为每个模块添加详细日志
  2. 配置实时监控告警
  3. 定期进行压力测试
  4. 建立A/B测试机制持续优化提示词

这些方案经过实际项目验证,能有效提升系统稳定性和内容质量,确保在面对各种异常情况时仍能提供可靠服务。


十、总结

通过本文,你已经了解了PHP+DeepSeek在小红书内容创作中的应用实践。PHP实现业务逻辑,Python处理AI任务,标题生成功能提升创作效率,健壮架构保障系统稳定性,模块化设计支持灵活扩展。技术方案能够优化创作流程,实际应用效果因场景而异。


十一、下期预告

在下一期中,我们将探讨《短视频脚本自动化生成技术实践》。你将了解到AI生成分镜头脚本的方法、角色对话生成技术、内容创作领域的技术实现以及实际应用案例解析。敬请期待!


技术架构建议:PHP处理业务流 + Python驱动AI模型 + Vue构建管理界面,这种组合在内容生成类项目中具有较高复用性。

思考题:你认为如何优化提示词,使生成内容更贴近真实创作风格?欢迎分享你的见解!