ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

基于大模型API的公益广告批量生成:本地自动化内容生产实践

基于大模型API的公益广告批量生成:本地自动化内容生产实践 这次我们来看一个很有意思的本地AI应用场景如何利用豆包大模型生成公益广告内容并实现本地化、批量化的内容生产流程。虽然“豆包”本身是一个在线服务但围绕其API或类似开源大模型进行本地集成与自动化是很多开发者关心的方向。这篇文章的重点不是复刻一个豆包而是探讨一套可落地的技术方案如何将大模型的文案生成能力与本地脚本、批量任务、内容管理结合起来高效产出符合要求的公益宣传素材。如果你关心如何将AI能力整合进具体的工作流实现从创意提示词到批量文案、甚至简单图文排版的自动化那么这篇文章会提供清晰的思路和可操作的代码示例。我们将避开复杂的模型训练聚焦于利用现有API或本地模型搭建一个轻量、可控的公益内容生成工具。1. 核心能力速览能力项说明核心功能基于大模型如豆包API或类似开源模型自动生成公益广告文案、口号、短剧本。扩展能力可集成文本转语音TTS、文生图AIGC模型实现“文案-语音-海报”的流水线。运行环境本地Python环境或搭载API服务的服务器。无需高性能GPU仅文案生成阶段。硬件门槛极低。CPU即可运行API调用脚本。若集成本地TTS/AIGC模型则需根据模型要求配置GPU。启动方式命令行脚本一键启动批量任务或使用Flask/FastAPI搭建简易本地Web服务。是否支持API是。核心依赖于大模型提供的API如豆包API或本地部署的模型服务API。是否支持批量是。通过脚本读取任务列表CSV/TXT循环调用API实现批量文案生成。输出管理支持将生成的文案自动保存为文本文件并可结构化存储如按主题、日期分类。适合场景公益组织日常宣传、社交媒体内容规划、活动标语批量创作、自动化内容灵感库构建。2. 适用场景与使用边界这个方案非常适合需要持续产出公益类内容的组织或个人例如公益机构运营定期需要为微博、公众号、宣传栏制作环保、助学、敬老等主题的标语和短文。社区工作者策划社区活动时需要快速生成多种风格的活动预告和倡议书。内容创作者希望用AI辅助激发公益视频脚本、公益海报文案的创作灵感。学生社团为公益活动设计宣传材料需要大量备选方案。使用边界与合规提醒内容审核AI生成的内容必须经过人工审核确保其符合公序良俗、法律法规并且信息准确无误。不能直接发布未经审核的AI内容。版权与授权如果集成文生图功能需确保使用的图像生成模型及其产出物符合相关版权规定。用于公共传播的公益广告应避免使用未获授权的人物肖像或受版权保护的素材。API调用合规如果使用豆包等商业API请严格遵守其服务条款、调用频率限制和内容政策。隐私保护流程中不应处理任何个人隐私信息。提示词和生成内容应局限于公开的公益主题。技术本质本项目是一个自动化工具链的整合思路与实现示例并非一个开箱即用的完整产品。核心在于理解如何将不同模块文案生成、TTS、AIGC通过脚本串联。3. 环境准备与前置条件在开始构建流程前需要准备好以下环境操作系统Windows 10/11, macOS, 或 Linux (如 Ubuntu 20.04)。本文以Windows为例命令在PowerShell或CMD下运行。Python环境推荐使用 Python 3.8 - 3.10。确保已安装pip。网络访问如果需要调用在线API如豆包确保运行环境可以稳定访问互联网。API密钥如使用在线API如果你计划使用豆包等平台的官方API需要先注册相应平台开发者账号并获取API Key。文本编辑器或IDE如 VS Code, PyCharm 等。可选本地模型环境如果计划完全本地化避开在线API需要准备开源大模型例如 ChatGLM3-6B, Qwen-7B 等需下载模型文件。本地模型服务框架例如Ollama,FastChat, 或text-generation-webui的API模式。GPU资源推荐运行7B以上参数模型需要至少8GB显存。纯CPU推理速度较慢。通用检查清单打开终端输入python --version检查Python版本。输入pip list查看已安装包确保可以正常管理依赖。4. 安装部署与启动方式我们将创建一个独立的项目目录并安装核心依赖。这里我们以使用requests库调用模拟API和搭建一个本地批量生成脚本为例。第一步创建项目并安装依赖在你的工作目录下打开终端执行# 创建项目目录 mkdir ai_public_ad_generator cd ai_public_ad_generator # 创建虚拟环境推荐 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/macOS: # source venv/bin/activate # 安装核心依赖 pip install requests # 如果需要搭建简易Web服务安装Flask pip install flask # 如果需要处理任务列表安装pandas pip install pandas第二步编写核心生成脚本创建一个名为generate_ads.py的文件内容如下。这个脚本模拟了调用大模型API的过程。import requests import json import time import sys import os from typing import List, Dict, Optional class PublicAdGenerator: def __init__(self, api_base: str https://api.example.com/v1, api_key: str your_api_key_here): 初始化生成器 :param api_base: 大模型API的基础地址 :param api_key: API密钥 self.api_base api_base self.api_key api_key self.headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } # 示例公益主题池 self.public_welfare_themes [ 环境保护垃圾分类, 关爱留守儿童, 社区敬老爱心助餐, 节约用水珍惜资源, 无偿献血奉献爱心, 文明出行礼让行人, 反对浪费光盘行动, 乡村教育支持, 关爱残疾人土, 动物保护拒绝虐待 ] def build_prompt(self, theme: str, style: str 朗朗上口的口号) - str: 构建生成提示词 prompts { 朗朗上口的口号: f请围绕‘{theme}’主题创作一句朗朗上口、易于传播的公益广告口号。要求简洁有力不超过20个字。, 感人肺腑的短文: f请以‘{theme}’为主题写一段约150字的公益宣传短文。要求情感真挚能打动人心呼吁公众参与。, 社交媒体文案: f请为‘{theme}’公益活动设计一份社交媒体文案包含标题和正文。要求适合在微信朋友圈或微博发布活泼有网感带1-2个相关话题标签。, 活动宣传语: f请为一场以‘{theme}’为主题的线下公益活动撰写一段活动宣传语。要求明确活动目的和参与方式具有号召力。 } return prompts.get(style, prompts[朗朗上口的口号]) def call_ai_api(self, prompt: str, max_tokens: int 500) - Optional[str]: 模拟调用大模型API。 注意此处为示例代码实际需要替换为真实API的调用逻辑。 # 真实调用示例以OpenAI格式为例 # url f{self.api_base}/chat/completions # data { # model: gpt-3.5-turbo, # messages: [{role: user, content: prompt}], # max_tokens: max_tokens, # temperature: 0.8 # } # try: # response requests.post(url, headersself.headers, jsondata, timeout30) # response.raise_for_status() # result response.json() # return result[choices][0][message][content].strip() # except requests.exceptions.RequestException as e: # print(fAPI调用失败: {e}) # return None # 本地模拟返回模拟结果用于测试流程 print(f[模拟API调用] 提示词: {prompt[:50]}...) time.sleep(0.5) # 模拟网络延迟 simulated_responses { 朗朗上口的口号: f【模拟生成】{prompt.split(‘)[1].split(’)[0]}从你我做起, 感人肺腑的短文: f【模拟生成】在我们身边{prompt.split(‘)[1].split(’)[0]}的故事每天都在发生。一点微光能照亮一片黑暗一份爱心能温暖整个社区。让我们携手用行动传递善意。, 社交媒体文案: f【模拟生成】#公益行动# 今天为{prompt.split(‘)[1].split(’)[0]}发条朋友圈\n正文爱是世界上最通用的语言。加入我们让改变发生, 活动宣传语: f【模拟生成】本周六社区中心{prompt.split(‘)[1].split(’)[0]}主题活动期待您的参与现场有互动环节和爱心礼品详情咨询工作人员。 } style prompt.split(要求)[0][-6:] if 要求 in prompt else 朗朗上口的口号 for key in simulated_responses: if key in style: return simulated_responses[key] return 【模拟生成】生成内容示例。 def generate_batch(self, themes: List[str] None, style: str 朗朗上口的口号, output_dir: str ./outputs): 批量生成公益广告内容 if themes is None: themes self.public_welfare_themes[:3] # 默认测试前3个主题 os.makedirs(output_dir, exist_okTrue) timestamp time.strftime(%Y%m%d_%H%M%S) output_file os.path.join(output_dir, fpublic_ads_{timestamp}.txt) log_file os.path.join(output_dir, fgeneration_log_{timestamp}.csv) results [] with open(output_file, w, encodingutf-8) as f_txt, open(log_file, w, encodingutf-8) as f_csv: f_csv.write(主题,风格,生成内容,状态,耗时(秒)\n) for i, theme in enumerate(themes): print(f\n--- 正在生成 [{i1}/{len(themes)}]: {theme} ---) start_time time.time() prompt self.build_prompt(theme, style) content self.call_ai_api(prompt) end_time time.time() elapsed round(end_time - start_time, 2) status 成功 if content else 失败 log_line f{theme},{style},{content if content else N/A},{status},{elapsed} f_csv.write(log_line \n) if content: # 写入文本文件 f_txt.write(f【主题】{theme}\n) f_txt.write(f【风格】{style}\n) f_txt.write(f【内容】\n{content}\n) f_txt.write(- * 40 \n) results.append((theme, content)) print(f生成成功: {content[:60]}...) else: print(f生成失败: {theme}) time.sleep(1) # 避免请求过快针对真实API print(f\n批量生成完成) print(f文案保存至: {output_file}) print(f生成日志保存至: {log_file}) return results if __name__ __main__: # 使用示例 generator PublicAdGenerator() # 生成3个主题的口号 generator.generate_batch(themes[环境保护, 社区敬老, 节约用水], style朗朗上口的口号)第三步启动批量生成在终端中运行你的脚本python generate_ads.py运行后会在项目目录下创建一个outputs文件夹里面包含一个文本文件存储生成的文案和一个CSV日志文件记录每次生成的状态和耗时。5. 功能测试与效果验证现在我们来验证这个流程的各个功能环节。5.1 基础文案生成测试测试目的验证脚本能否根据不同的公益主题和风格要求调用AI接口生成相应的文案。操作步骤修改generate_ads.py中__main__部分的代码测试不同风格。if __name__ __main__: generator PublicAdGenerator() # 测试1生成“关爱留守儿童”的短文 single_result generator.call_ai_api(generator.build_prompt(关爱留守儿童, 感人肺腑的短文)) print(测试1 - 短文生成, single_result) # 测试2批量生成不同风格 generator.generate_batch(themes[环境保护, 无偿献血], style社交媒体文案)运行脚本观察终端输出和outputs文件夹下的文件。预期结果终端会打印出模拟API调用的日志和生成的内容摘要。outputs文件夹下会生成新的.txt和.csv文件。.txt文件内容应包含指定的主题、风格和生成的文案格式清晰。判断成功能按主题和风格生成不同格式的文本内容并正确保存到结构化文件中。5.2 集成真实API测试测试目的将模拟调用替换为真实的大模型API如豆包、文心一言、通义千问或本地部署的Ollama服务。操作步骤获取一个真实可用的API Key和Base URL。修改PublicAdGenerator类中的call_ai_api方法。以下是接入一个类OpenAI API格式服务的示例def call_ai_api_real(self, prompt: str, max_tokens: int 500) - Optional[str]: 调用真实的大模型API以OpenAI兼容接口为例 url f{self.api_base}/chat/completions # 替换为你的真实API地址 data { model: qwen-7b-chat, # 或你的模型名称 messages: [{role: user, content: prompt}], max_tokens: max_tokens, temperature: 0.8, # 控制创造性 top_p: 0.9 } try: response requests.post(url, headersself.headers, jsondata, timeout60) response.raise_for_status() result response.json() # 根据实际API返回结构解析内容 # 例如对于OpenAI格式 content result[choices][0][message][content].strip() # 对于某些API可能需要这样 # content result[response] 或 result[result] print(fAPI调用成功消耗token: {result.get(usage, {})}) return content except requests.exceptions.ConnectionError: print(错误无法连接到API服务器请检查网络和地址。) return None except requests.exceptions.Timeout: print(错误API请求超时。) return None except KeyError as e: print(f错误解析API返回结果时出错结构不符。原始返回: {result}) return None except Exception as e: print(fAPI调用发生未知错误: {e}) return None在generate_batch方法中将self.call_ai_api(prompt)替换为self.call_ai_api_real(prompt)。运行脚本观察是否能从真实API获取结果。判断成功脚本能成功从真实API获取并保存生成的公益广告文案。5.3 简易Web服务测试可选测试目的将生成能力封装成HTTP API方便其他程序调用。操作步骤创建一个新的文件app.py。编写一个基于Flask的简易Web服务。from flask import Flask, request, jsonify from generate_ads import PublicAdGenerator # 导入之前的类 import threading import uuid app Flask(__name__) generator PublicAdGenerator() # 初始化这里可以使用真实API配置 task_results {} # 简单内存存储任务结果 app.route(/generate, methods[POST]) def generate_single(): 生成单条公益广告 data request.json theme data.get(theme, ) style data.get(style, 朗朗上口的口号) if not theme: return jsonify({error: 缺少主题参数 theme}), 400 prompt generator.build_prompt(theme, style) content generator.call_ai_api(prompt) # 或 call_ai_api_real if content: return jsonify({theme: theme, style: style, content: content}) else: return jsonify({error: 内容生成失败}), 500 app.route(/batch_generate, methods[POST]) def batch_generate(): 提交一个批量生成任务异步 data request.json themes data.get(themes, []) style data.get(style, 朗朗上口的口号) if not themes: return jsonify({error: 缺少主题列表 themes}), 400 task_id str(uuid.uuid4()) task_results[task_id] {status: running, results: []} # 简单起见这里同步执行。生产环境应用Celery等队列。 def run_task(tid, t, s): results [] for theme in t: prompt generator.build_prompt(theme, s) content generator.call_ai_api(prompt) results.append({theme: theme, content: content}) task_results[tid] {status: completed, results: results} thread threading.Thread(targetrun_task, args(task_id, themes, style)) thread.start() return jsonify({task_id: task_id, message: 批量任务已提交}) app.route(/task_status/task_id, methods[GET]) def get_task_status(task_id): 查询任务状态 result task_results.get(task_id) if not result: return jsonify({error: 任务不存在}), 404 return jsonify(result) if __name__ __main__: app.run(host0.0.0.0, port5000, debugTrue)在终端启动服务python app.py使用curl或 Postman 测试接口# 测试单条生成 curl -X POST http://127.0.0.1:5000/generate \ -H Content-Type: application/json \ -d {\theme\: \环境保护\, \style\: \朗朗上口的口号\} # 测试批量任务提交 curl -X POST http://127.0.0.1:5000/batch_generate \ -H Content-Type: application/json \ -d {\themes\: [\环保\, \敬老\], \style\: \社交媒体文案\}预期结果API服务器成功启动并能通过HTTP请求接收主题和风格参数返回AI生成的文案。6. 接口API与批量任务本章节详细说明如何将上述脚本工程化形成稳定的服务。6.1 接口设计要点一个健壮的生成服务API应考虑以下几点认证与限流生产环境务必添加API Key认证并限制调用频率防止滥用。异步处理对于批量任务应立即返回任务ID通过轮询或Webhook通知结果避免HTTP请求超时。输入验证严格检查传入的theme、style等参数避免注入攻击或无效请求。错误处理定义清晰的错误码和消息如400参数错误、429请求过快、500服务端生成失败。日志记录所有请求和生成结果都应记录日志便于审计和排查问题。6.2 批量任务队列实现建议对于大规模的批量生成需求建议使用专业的任务队列如CeleryRedis。简易Celery示例 (tasks.py)from celery import Celery from generate_ads import PublicAdGenerator app Celery(ad_tasks, brokerredis://localhost:6379/0, backendredis://localhost:6379/0) generator PublicAdGenerator(api_baseyour_real_api, api_keyyour_key) app.task(bindTrue) def generate_ad_task(self, theme, style): 单个广告生成任务 prompt generator.build_prompt(theme, style) content generator.call_ai_api_real(prompt) # 使用真实API方法 return { task_id: self.request.id, theme: theme, style: style, content: content } app.task(bindTrue) def batch_generate_ads(self, theme_list, style): 批量生成任务分发子任务 results [] for theme in theme_list: # 将每个主题的生成作为一个子任务 subtask generate_ad_task.delay(theme, style) results.append(subtask.id) # 收集子任务ID return { batch_task_id: self.request.id, subtask_ids: results }这样你的Web服务 (app.py) 只需将任务提交给Celery然后立即返回。客户端可以通过任务ID查询状态或等待回调。6.3 调用示例Python客户端import requests import time API_BASE http://your-server-ip:5000 def test_single_generation(): url f{API_BASE}/generate payload {theme: 节约用电, style: 朗朗上口的口号} try: resp requests.post(url, jsonpayload, timeout30) resp.raise_for_status() data resp.json() print(f生成结果: {data[content]}) except Exception as e: print(f请求失败: {e}) def test_batch_generation_and_poll(): # 1. 提交批量任务 submit_url f{API_BASE}/batch_generate batch_payload { themes: [环保, 敬老, 献血], style: 社交媒体文案 } submit_resp requests.post(submit_url, jsonbatch_payload) task_id submit_resp.json()[task_id] print(f批量任务已提交任务ID: {task_id}) # 2. 轮询查询结果 status_url f{API_BASE}/task_status/{task_id} for i in range(10): # 最多轮询10次 time.sleep(2) # 每2秒查一次 status_resp requests.get(status_url) status_data status_resp.json() if status_data[status] completed: print(批量任务完成结果如下) for item in status_data[results]: print(f- {item[theme]}: {item[content][:50]}...) break elif status_data[status] failed: print(批量任务失败。) break else: print(f任务进行中... ({i1}/10)) else: print(轮询超时。) if __name__ __main__: test_single_generation() # test_batch_generation_and_poll()7. 资源占用与性能观察本方案的核心资源消耗取决于你选择的大模型服务端。纯API调用模式推荐起步客户端资源消耗极低。你的本地脚本或Web服务仅负责发送HTTP请求和解析JSON普通CPU即可内存占用通常在几十MB到百MB级别。网络带宽每次请求的提示词和返回内容数据量很小带宽可忽略不计。性能瓶颈完全取决于所调用的API服务的响应速度和并发限制。需要关注API的QPS每秒查询率和延迟。本地大模型部署模式GPU显存这是主要资源消耗点。例如运行一个7B参数的模型进行INT4量化推理可能需要6-8GB显存。如果使用更大的模型或未量化模型显存需求会急剧上升。CPU/RAM如果使用CPU推理内存占用会很高可能是模型大小的2倍以上且速度很慢。例如7B模型在CPU上推理可能需要16GB以上内存。磁盘空间模型文件本身很大一个7B的量化模型可能占用3-8GB磁盘空间。性能观察建议监控API延迟在脚本中记录每个请求的耗时便于发现网络或服务端问题。队列深度监控如果使用Celery监控任务队列长度防止任务堆积。本地模型监控如果本地部署使用nvidia-smi(GPU) 或系统任务管理器监控显存、内存和GPU利用率。如何降低资源消耗/提升效率使用量化模型优先选择GPTQ、AWQ、GGUF等量化格式的模型能大幅降低显存和内存占用。API缓存对于相同或相似的提示词可以考虑在客户端增加缓存机制避免重复调用。批量请求如果API支持可以将多个生成请求合并为一个批量请求发送减少网络往返开销。连接池在频繁调用的脚本中使用requests.Session()或配置HTTP连接池提升效率。8. 常见问题与排查方法问题现象可能原因排查方式解决方案脚本运行报ModuleNotFoundErrorPython依赖未安装或虚拟环境未激活。在终端执行pip list检查requests,flask等包是否存在。在项目目录下激活虚拟环境并运行pip install -r requirements.txt(如果已创建该文件)。调用真实API返回401或403错误API Key错误、过期或没有访问权限。检查代码中api_key是否正确登录API提供商控制台查看密钥状态和权限。更新正确的API Key检查账户余额或调用额度。API调用超时 (Timeout)网络不稳定或服务器端处理时间过长。使用curl或 Postman 直接测试API端点看是否同样超时。增加requests.post的timeout参数值检查本地网络如果服务端慢考虑优化提示词或降低模型参数。生成的内容质量差或不相关提示词Prompt设计不佳。打印出实际发送给API的完整提示词检查其清晰度和指令是否明确。优化提示词工程。明确指定风格、长度、格式。例如加入“请以…开头”、“避免使用…词汇”等指令。批量任务中部分失败部分成功API有调用频率限制或被临时风控。查看日志文件失败请求是否有规律如每分钟第N次失败。检查API返回的具体错误信息。在批量请求中增加time.sleep()间隔实现失败重试机制如最多重试3次。Flask服务启动后无法访问防火墙阻止端口或服务绑定到127.0.0.1。在服务器上运行 netstat -angrep 5000 查看端口监听情况。本地模型服务OOM内存不足模型太大或并发请求过多。使用nvidia-smi监控显存使用情况。查看模型服务日志。换用量化版本模型减少单次生成的max_tokens降低并发请求数。保存文件时出现编码错误系统默认编码与脚本编码不一致。检查错误信息通常与gbk codec相关。在open()函数中明确指定encodingutf-8。9. 最佳实践与使用建议为了让这个公益广告生成流程更稳定、高效、合规建议遵循以下实践提示词工程标准化为不同的公益主题和风格口号、短文、海报文案建立高质量的提示词模板库存储在配置文件如prompt_templates.json中便于管理和复用。内容审核流程化绝对不能跳过。建立人工审核环节可以是一个简单的内部Web界面展示AI生成的结果由运营人员点击“通过”或“驳回”并补充修改意见。驳回的内容可以反馈给模型进行微调学习如果支持。任务配置化将需要批量生成的主题列表、风格、输出目录等配置信息放在外部配置文件如config.yaml或tasks.csv中使脚本与数据分离更容易维护。输出结果结构化不要只保存为纯文本。考虑使用JSON格式保存每条结果并附带元数据生成时间、使用的模型/API、提示词哈希、审核状态等便于后续检索和分析。集成到内容流水线将本生成器作为内容生产流水线的一环。例如审核通过的文案可以自动同步到内容日历、设计工具通过API调用Canva等生成海报初稿或社交媒体发布队列。成本与用量监控如果使用付费API务必设置预算告警和用量监控。可以在脚本中记录每次调用的token消耗并定期汇总报告。法律与伦理自查清单✅ 生成内容不涉及虚假宣传或夸大事实。✅ 不生成可能引发误解或争议的表述。✅ 尊重所有群体避免任何形式的歧视性语言。✅ 如果生成内容中包含具体数据或案例必须核实其真实性。✅ 最终发布的物料符合《公益广告促进和管理暂行办法》等相关规定。10. 总结与下一步通过本文的梳理我们实现了一个从概念到代码的“公益广告AI生成器”原型。它的核心价值在于将大模型的创意能力与自动化脚本相结合为公益内容的持续产出提供了一个可扩展的技术框架。最值得尝试的点你可以用极低的启动成本一个Python脚本一个可用的AI API快速验证这个想法是否适合你的组织。先用手动测试几个主题感受AI生成内容的质量和风格再决定是否投入更多资源进行工程化。最先应该验证的功能提示词有效性调整build_prompt方法找到最能产出你所需风格文案的提示词模板。API连通性与稳定性确保你的脚本能稳定、正确地调用你选择的大模型服务。批量生成与文件管理测试一次性处理几十个主题看输出文件是否清晰、有序。最容易踩的坑忽略审核直接使用未审核的AI内容。API密钥泄露将密钥硬编码在代码中并上传到公开仓库。无错误处理网络波动导致脚本崩溃任务全部丢失。提示词模糊导致生成内容千篇一律或偏离主题。后续扩展方向多模态扩展集成Stable Diffusion等文生图模型将优质文案自动转为公益海报。集成TTS模型将文案转为宣传音频。知识库增强为模型接入你们机构的专属知识库如过往成功案例、具体数据让生成的文案更具体、更真实。工作流平台化将整个流程主题输入、AI生成、人工审核、多平台发布整合到一个内部Web平台上降低非技术人员的操作门槛。A/B测试与优化收集不同文案在实际宣传中的效果数据如点击率、转化率用于反馈和优化提示词策略。这个项目的代码和思路已经为你铺好了起点。接下来就是根据你的具体需求选择合适的“AI引擎”在线API或本地模型并打磨提示词和审核流程让它真正成为公益传播中的得力助手。建议将本文中的代码片段保存并根据你的实际API信息进行修改和测试。
返回列表