# deepseek_whiter.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AI文案生成助手 - 校园活动宣传版(DeepSeek版)
基于DeepSeek API开发
"""

import requests
import json
from datetime import datetime
from typing import Optional, List, Dict, Any

class DeepSeekCopywriter:
    def __init__(self, api_key: str, model: str = "deepseek-chat"):
        """
        初始化DeepSeek文案助手
        
        Args:
            api_key: DeepSeek API密钥
            model: 模型名称,可选 deepseek-chat 或 deepseek-reasoner
        """
        self.api_key = api_key
        self.model = model
        self.base_url = "https://api.deepseek.com"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        
        # 记录使用统计
        self.total_tokens = 0
        self.total_requests = 0
    
    def generate(self, prompt: str, temperature: float = 0.7, max_tokens: int = 2000) -> str:
        """
        生成文案的核心方法
        
        Args:
            prompt: 提示词
            temperature: 温度参数(0-1),越高越有创造性
            max_tokens: 最大输出token数
            
        Returns:
            str: 生成的文案内容
        """
        payload = {
            "model": self.model,
            "messages": [
                {"role": "system", "content": "你是一位专业的文案创作专家,擅长校园活动策划、文案撰写,语言风格亲切自然、富有感染力。"},
                {"role": "user", "content": prompt}
            ],
            "temperature": temperature,
            "max_tokens": max_tokens,
            "stream": False
        }
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=self.headers,
                json=payload,
                timeout=60
            )
            response.raise_for_status()
            result = response.json()
            
            # 统计token使用量
            if 'usage' in result:
                self.total_tokens += result['usage']['total_tokens']
                self.total_requests += 1
            
            return result['choices'][0]['message']['content']
            
        except requests.exceptions.RequestException as e:
            return f"网络请求失败: {str(e)}"
        except KeyError as e:
            return f"解析响应失败: {str(e)}"
        except Exception as e:
            return f"生成失败: {str(e)}"
    
    def generate_poster_slogan(self, theme: str, keywords: str, count: int = 5) -> str:
        """生成海报标语"""
        prompt = f"""
【角色】你是一位资深校园活动策划专家,擅长创作有感染力的活动标语。

【任务】为"{theme}"活动创作{count}条宣传标语。

【要求】
- 每条标语15-25字
- 语言凝练有力,朗朗上口
- 必须体现"{keywords}"的核心元素
- 适合印刷在海报上
- 风格要贴近当代大学生审美

【输出格式】
直接列出{count}条标语,编号1-{count},不要有其他说明。
"""
        return self.generate(prompt, temperature=0.8, max_tokens=500)
    
    def generate_wechat_article(self, title: str, activity_info: str, style: str = "活泼") -> str:
        """生成微信公众号文章"""
        prompt = f"""
【角色】你是高校团委新媒体运营专家,熟悉大学生阅读偏好和网络流行语。

【任务】撰写一篇微信公众号推文,标题为"{title}"。

【活动信息】
{activity_info}

【风格要求】
- 整体风格:{style}
- 使用emoji增加可读性和趣味性
- 包含3-4个小标题
- 字数:800-1000字
- 结尾要有互动引导(留言、转发、报名)
- 适当使用网络流行语,但要适度

【结构要求】
1. 吸引人的开头(故事/场景/问题引入)
2. 活动亮点介绍(分点阐述,每点配emoji)
3. 参与方式说明(清晰明了)
4. 结尾升华主题+互动引导

【注意事项】
- 避免使用过于官方的语言
- 多用"你"、"我们"等亲切称呼
- 适当使用疑问句增加互动感

【输出】直接输出正文内容,不需要markdown格式。
"""
        return self.generate(prompt, temperature=0.7, max_tokens=2500)
    
    def generate_invitation(self, event_name: str, time_location: str, honoree: str) -> str:
        """生成邀请函"""
        prompt = f"""
【角色】你是一位具有人文素养的文案撰稿人,擅长正式但不失温度的邀请文字。

【任务】为"{event_name}"写一封邀请函。

【信息】
- 受邀人:{honoree}
- 时间地点:{time_location}

【要求】
- 格式规范(称谓、正文、落款、日期)
- 语言典雅得体,体现尊重
- 体现活动的意义和价值
- 字数300-400字
- 结尾要表达诚挚期待

【输出】完整的邀请函文本。
"""
        return self.generate(prompt, temperature=0.6, max_tokens=1000)
    
    def generate_host_script(self, event_theme: str, segments: str) -> str:
        """生成主持稿"""
        prompt = f"""
【角色】你是校园晚会资深主持人,风格亲切自然,擅长控场和互动。

【任务】为"{event_theme}"撰写主持稿开场白和串场词。

【环节设置】
{segments}

【要求】
- 开场白:150-200字,要有气势,能调动气氛
- 每个环节串场:50-80字,自然过渡
- 语言口语化,适合口头表达
- 适当加入互动话术(如:"大家说好不好?"、"掌声在哪里?")
- 串场词要体现环节之间的逻辑联系

【输出格式】
【开场白】
(具体内容)

【环节串场】
1. (第一个环节串场词)
2. (第二个环节串场词)
...

【结束语】
(结束语内容)
"""
        return self.generate(prompt, temperature=0.8, max_tokens=1500)
    
    def generate_press_release(self, event_name: str, highlights: List[str], date: str) -> str:
        """生成新闻稿"""
        prompt = f"""
【角色】你是校园记者站的主编,擅长撰写正式的校园新闻稿。

【任务】为"{event_name}"撰写一篇新闻通稿。

【基本信息】
- 活动时间:{date}
- 活动亮点:{', '.join(highlights)}

【要求】
- 字数:500-600字
- 采用倒金字塔结构(最重要的信息在前)
- 包含:标题、导语、主体、结语
- 语言正式、客观、准确
- 体现活动的意义和影响

【输出】完整的新闻稿。
"""
        return self.generate(prompt, temperature=0.5, max_tokens=1500)
    
    def generate_social_media(self, event_name: str, activity_content: str, platform: str = "小红书") -> str:
        """生成社交媒体文案"""
        prompt = f"""
【角色】你是校园社交媒体运营专员,熟悉各大平台的内容风格。

【任务】为"{event_name}"生成适合{platform}平台发布的文案。

【活动内容】
{activity_content}

【平台特点】
- 小红书:图文并茂,多用emoji,强调个人体验和种草
- 微博:短平快,话题标签,互动性强
- 抖音:节奏快,视觉冲击,简短有力

【要求】
- 符合{platform}平台风格
- 包含相关话题标签
- 有吸引力的开头
- 引导用户互动

【输出】直接输出文案内容。
"""
        return self.generate(prompt, temperature=0.9, max_tokens=500)
    
    def get_usage_stats(self) -> Dict[str, Any]:
        """获取使用统计"""
        return {
            "total_requests": self.total_requests,
            "total_tokens": self.total_tokens,
            "estimated_cost": f"约 ¥{self.total_tokens * 0.0000002:.4f}"  # 粗略估算
        }


# 增强版:民族团结活动文案包生成器
class EthnicUnityCampaign:
    def __init__(self, api_key: str, model: str = "deepseek-chat"):
        self.writer = DeepSeekCopywriter(api_key, model)
    
    def generate_full_package(self) -> Dict[str, str]:
        """生成全套活动文案"""
        
        print("🎯 开始生成'民族团结一家亲'活动文案包...")
        print("=" * 60)
        
        package = {}
        
        # 1. 海报标语
        print("\n📌 生成海报标语...")
        package["slogans"] = self.writer.generate_poster_slogan(
            theme="民族团结一家亲联谊活动",
            keywords="民族团结、文化交流、青年联谊",
            count=5
        )
        print(package["slogans"])
        
        # 2. 公众号推文
        print("\n📱 生成微信公众号推文...")
        package["wechat_article"] = self.writer.generate_wechat_article(
            title="🎉 周末有约!民族团结一家亲,我们不见不散!",
            activity_info="""
时间:2024年4月20日 14:00-17:00
地点:学校大学生活动中心
内容:
• 中华民族传统歌舞表演
• 美食分享(自制特色小吃)
• 互动游戏(法律知识竞猜、趣味运动)
• 结对交友(结对学生互动)
主办单位:校团委、学生会
参与对象:全校师生
            """,
            style="活泼温暖"
        )
        print(f"✅ 推文已生成,字数:{len(package['wechat_article'])}字")
        
        # 3. 邀请函
        print("\n💌 生成嘉宾邀请函...")
        package["invitation"] = self.writer.generate_invitation(
            event_name="民族团结一家亲联谊活动",
            time_location="2024年4月20日(周六)14:00,学校大学生活动中心多功能厅",
            honoree="各学院学生代表"
        )
        print(package["invitation"])
        
        # 4. 主持稿
        print("\n🎤 生成主持稿...")
        package["host_script"] = self.writer.generate_host_script(
            event_theme="民族团结一家亲",
            segments="""
1. 开场舞《多彩中华》(中华民族传统舞蹈串烧)
2. 领导致辞(校党委副书记)
3. "结对子"仪式(各族学生代表结对)
4. 美食分享环节(介绍特色美食)
5. 互动游戏(法律知识竞猜)
6. 合唱《爱我中华》
            """
        )
        print(f"✅ 主持稿已生成")
        
        # 5. 新闻稿(新增)
        print("\n📰 生成新闻稿...")
        package["press_release"] = self.writer.generate_press_release(
            event_name="民族团结一家亲联谊活动",
            highlights=["中华民族传统歌舞表演", "传统美食品鉴", "结对交友", "互动游戏"],
            date="2024年4月20日"
        )
        
        # 6. 社交媒体文案(新增)
        print("\n📱 生成社交媒体文案...")
        package["social_media"] = self.writer.generate_social_media(
            event_name="民族团结一家亲活动",
            activity_content="中华民族传统歌舞表演、美食分享、互动游戏、结对交友",
            platform="小红书"
        )
        
        return package
    
    def save_to_file(self, package: Dict[str, str], filename: str = "民族团结活动文案包.txt"):
        """保存文案到文件"""
        
        output = f"""
{'='*60}
民族团结一家亲活动文案包
生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
使用模型:{self.writer.model}
{'='*60}

【一、海报标语】
{package['slogans']}

【二、微信公众号推文】
{package['wechat_article']}

【三、邀请函】
{package['invitation']}

【四、主持稿】
{package['host_script']}

【五、新闻稿】
{package['press_release']}

【六、社交媒体文案(小红书)】
{package['social_media']}

{'='*60}
使用统计:
- 总请求次数:{self.writer.total_requests}
- 总Token消耗:{self.writer.total_tokens}
- 预估费用:{self.writer.total_tokens * 0.0000002:.4f}{'='*60}

文案生成完毕 | 使用DeepSeek API助力校园文化建设
"""
        
        with open(filename, "w", encoding="utf-8") as f:
            f.write(output)
        
        print(f"\n✅ 全套文案已保存至:{filename}")
        print(f"📊 使用统计:{self.writer.get_usage_stats()}")


# 简化版使用示例
def simple_example():
    """简化版使用示例"""
    # 替换为你的API密钥
    api_key = "your-deepseek-api-key-here"
    
    # 创建文案助手
    writer = DeepSeekCopywriter(api_key, model="deepseek-chat")
    
    # 生成单个文案
    slogan = writer.generate_poster_slogan(
        theme="秋季校园运动会",
        keywords="拼搏、青春、团结"
    )
    print("海报标语:")
    print(slogan)


# 完整版使用示例
if __name__ == "__main__":
    # 替换为你的DeepSeek API密钥
    API_KEY = "your-deepseek-api-key-here"  # 在 https://platform.deepseek.com 获取
    
    # 方式1:生成完整文案包
    campaign = EthnicUnityCampaign(API_KEY, model="deepseek-chat")
    package = campaign.generate_full_package()
    campaign.save_to_file(package)
    
    # 方式2:或者使用简化版示例
    # simple_example()
    
    # 方式3:自定义生成
    # writer = DeepSeekCopywriter(API_KEY)
    # result = writer.generate("为校园读书节写一句标语", temperature=0.8)
    # print(result)

运行结果:

(ai_env) $ python3 deepseek_writer.py
🎯 开始生成'民族团结一家亲'活动文案包...
============================================================

📌 生成海报标语...
1. 五十六族同心圆,青春作伴共绘锦绣画卷。
2. 多彩文化碰撞,年轻心灵相连,我们是一家。
3. 跨越山河聚此间,歌舞传情谊,青春共前行。
4. 不同服饰同个梦,携手联谊筑就友谊长城。
5. 以青春为桥,以文化为媒,共筑民族团结一家亲。

📱 生成微信公众号推文...
✅ 推文已生成,字数:1173字

💌 生成嘉宾邀请函...
**邀 请 函**

尊敬的各位学生代表:

展信佳。

春和景明,万象更新。为深入贯彻落实民族团结进步精神,促进校园内各族同学之间的交往、交流、交融,营造“中华民族一家亲,同心共筑中国梦”的浓厚氛围,我校兹定于**2024年4月20日(星期六)下午14:00**,于**学校大学生活动中心多功能厅**,隆重举办“民族团结一家亲”主题联谊活动。

五十六个民族,五十六朵花,共同绽放在我们美丽的校园。本次活动旨在搭建一个真诚互动、深度沟通的平台。届时,我们将通过丰富多彩的文化展示、亲切温馨的交流座谈、轻松愉快的互动环节,共同领略中华民族传统文化的独特魅力,分享成长故事,增进彼此了解,缔结深厚情谊。我们相信,每一次真诚的握手,每一段欢快的歌舞,每一席深入的交谈,都将为构建和谐包容、团结友爱的校园共同体注入温暖而坚实的力量。

在此,我们诚挚邀请您拨冗莅临,作为本学院的代表,共襄盛举。您的参与,将为此次活动增添独特的光彩,也让民族团结之花在青春的沃土上绽放得更加绚烂。

谨奉此函,专程邀请。我们怀着最热切的心情,期待与您相聚,共叙情谊,共绘同心圆。

顺颂
学祺!

[主办单位:此处填写学校相关部门,如:学生工作部(处)/ 校团委 / 学生会]
二〇二四年四月十日

🎤 生成主持稿...
✅ 主持稿已生成

📰 生成新闻稿...

📱 生成社交媒体文案...

✅ 全套文案已保存至:民族团结活动文案包.txt
📊 使用统计:{'total_requests': 6, 'total_tokens': 3446, 'estimated_cost': '约 ¥0.0007'}
(ai_env) $ 

更多推荐