import gradio as gr from langchain_openai import ChatOpenAI from pydantic import SecretStr import os # 设置API_KEY # export VOLCANO_DS__API_KEY=6840c164-3b7e-4ddc-9d51-20624defc205 # Load API key from environment api_key = os.getenv('VOLCANO_DS__API_KEY', '') if not api_key: raise ValueError('VOLCANO_DS__API_KEY is not set') # Initialize DeepSeek LLM llm = ChatOpenAI( base_url='https://ark.cn-beijing.volces.com/api/v3', #'https://api.deepseek.com/v1', #model= 'ep-20250223233956-tfgd8', #v3 model= 'ep-20250224014430-zshpj', #R1 api_key=SecretStr(api_key), ) def get_prompt_template(template_name): """Return the corresponding template structure""" templates = { "标准模板": """一、产品信息: 1. 产品名称:{product_name} 2. 产品描述:{product_desc} 3. 核心卖点:{product_features} 二、文案结构: 1. 标题:简洁有力,突出核心价值 2. 导语:抓住痛点,引发共鸣 3. 主体:详细阐述产品优势 4. 结尾:明确的行动号召""", "故事模板": """一、产品信息: 1. 产品名称:{product_name} 2. 产品描述:{product_desc} 3. 核心卖点:{product_features} 二、文案结构: 1. 标题:引人入胜的故事标题 2. 导语:讲述用户故事,引发共鸣 3. 主体:通过故事展示产品价值 4. 结尾:引导用户采取行动""", "数据模板": """一、产品信息: 1. 产品名称:{product_name} 2. 产品描述:{product_desc} 3. 核心卖点:{product_features} 二、文案结构: 1. 标题:数据驱动的标题 2. 导语:用数据说明问题 3. 主体:详细的数据分析和案例 4. 结尾:基于数据的行动建议""", "对比模板": """一、产品信息: 1. 产品名称:{product_name} 2. 产品描述:{product_desc} 3. 核心卖点:{product_features} 二、文案结构: 1. 标题:突出对比优势的标题 2. 导语:说明对比的必要性 3. 主体:详细的产品对比分析 4. 结尾:强调选择理由""" } return templates.get(template_name, templates["标准模板"]) def generate_prompt(product_name, product_desc, product_features, writing_style, template): """Generate and return the complete prompt""" template_structure = get_prompt_template(template) filled_template = template_structure.format( product_name=product_name, product_desc=product_desc, product_features=product_features ) return f"""你是一位资深营销文案专家,请根据以下信息生成高质量的营销文案: {filled_template} 三、文案要求: 1. 目标受众:25-40岁,注重品质生活的中产阶级 2. 使用场景:日常使用、商务场合、特殊场景 3. 竞品对比:突出产品独特优势 4. 文案风格:{writing_style} 5. 情感诉求:建立品牌信任,激发购买欲望 四、技术要求: 1. 字数:400-600字 2. 语言:符合{writing_style}要求 3. 修辞:适当使用比喻、排比等修辞手法 4. SEO:自然融入10-20个相关关键词 请生成专业、吸引人的营销文案,确保内容真实可信,符合广告法规要求。""" def query_deepseek(product_name, product_desc, product_features, writing_style, template): """Generate marketing copy based on product info, writing style and template""" prompt = generate_prompt(product_name, product_desc, product_features, writing_style, template) try: response = llm.invoke(prompt) return prompt, response.content except Exception as e: return prompt, f"Error: {str(e)}" # Create Gradio interface interface = gr.Interface( fn=query_deepseek, inputs=[ gr.Textbox(lines=2, placeholder="请输入产品名称...", label="产品名称"), gr.Textbox(lines=4, placeholder="请输入产品详细介绍...", label="产品介绍"), gr.Textbox(lines=4, placeholder="请输入产品特点...", label="产品特点"), gr.Dropdown( choices=[ "专业正式", "轻松活泼", "简洁明了", "情感共鸣", "科技感强", "文艺清新", "幽默风趣", "权威专业", "高端奢华", "亲民实惠", "故事叙述", "数据驱动", "对比突出", "问题解决", "场景带入", "用户见证", "限时优惠", "节日主题", "环保理念", "社会责任", "未来趋势", "历史传承", "文化融合", "国际视野" ], label="文案风格" ), gr.Dropdown( choices=["标准模板", "故事模板", "数据模板", "对比模板"], label="文案模板", value="标准模板" ) ], outputs=[ gr.Text(label="拼装后的Prompt"), gr.Markdown(label="生成的营销文案") ], title="AI Marketing", description="基于deepseek_v3的营销文案生成" ) # Launch the interface if __name__ == "__main__": #interface.launch(share=True) interface.launch()