直播做到一半突然冷场,对着镜头憋不出话,这是很多主播和运营的真实痛点。商品页明明写满了卖点和参数,可真要开口讲的时候,大脑一片空白。我前阵子做了个小工具,用Python把商品介绍自动转成带货口播稿,实测下来效果不错,至少解决了“不知道说啥”这个启动问题。这篇文章记录一下整个实现思路和代码细节,想照着做的朋友可以直接抄作业。
先说清楚这个东西能干什么:输入一段商品介绍文本,脚本自动提取核心卖点、价格、规格,然后按照直播话术的节奏生成口播稿,包括开场、痛点、功能讲解、逼单结尾。你拿过去微调一下就能用。适合三类人:刚起步的新主播、要批量管理多款商品的运营、以及想通过脚本批量生产文案的短视频团队。
1. 项目整体设计:先搞清楚“商品介绍”和“口播稿”的差距在哪里
1.1 商品介绍是数据,口播稿是表演
电商详情页里那些描述,本质上是在回答“这个产品是什么”,是用说明书式的语言组织起来的。而直播口播需要回答的是“这个产品跟我有什么关系”,是带着情绪、场景和节奏感说出来的。
我给你举个例子。某款保温杯的商品介绍会写:
内胆采用316不锈钢材质,保温时长12小时,容量500ml,杯盖自带吸管设计。
如果是口播稿,就要变成:
姐妹们,你们知道冬天接个热水,放一个下午就凉了有多烦吗?这个杯子是316不锈钢内胆,早上出门倒的热水,到下午下班还是烫嘴的。500ml的容量,刚好够你一天喝水量的一半。带吸管设计,不放心的,还有直饮口,化妆的姐妹完全不需要仰脖子。
看到差距了吗?页面描述是罗列参数,口播稿是构建场景。所以这个工具最核心的设计点,就是要把“参数语言”翻译成“人话”,并且按照说话的逻辑重新排列。
1.2 两种生成路线的选择:规则模板与大模型的取舍
一开始我考虑了两条技术路线。
第一条是纯粹的规则模板,用正则表达式提取商品信息,然后填进预设的口播框架里。好处是稳定可控、零成本、不用联网,生成的格式非常规整。坏处是语句比较生硬,翻译能力差,遇到复杂描述就漏内容。
第二条是调用大模型,让AI直接生成口播稿。优点是语言自然,理解能力强,能处理各种奇奇怪怪的描述。缺点是得配API,要花钱,而且有概率输出不可控的内容,需要人工审核,响应速度也受网络影响。
实测下来,我的判断是:别二选一,混合用。先让模板引擎做结构化的信息抽取和排序,保证核心参数不丢;然后可选接入大模型做润色,把干巴巴的句子改得有人味儿。这样两边的好处都拿到了,结构始终可控,语言表现力也有保障。
1.3 我为什么最终采用“拆解-重组-润色”三步走
整个工具的处理流程,我设计成三步。
第一步叫拆解,跟做菜备料一样。把商品标题、详情描述、规格参数拆成一个个字段:名称、价格、核心卖点、材质、规格、适用人群、售后承诺等,全部结构化下来。
第二步叫重组,是按照直播的转化逻辑来排序。直播话术是有套路的,开场要抓注意力,中间讲价值,结尾推动作。所有抽出来的信息都要被分配到对应环节里去,而不是罗列堆砌。
第三步叫润色,是给文本加上直播间的“语气”。口语连接词、提问句、短句、情绪词在这里被注入,让稿子听起来像在跟人聊天,而不是机器人念说明书。
这个架构的好处是好维护、好升级。你今天想换个开场风格,只改模板函数就行;想接更强的AI,单独强化润色模块就行。后面我会逐个环节讲怎么写。
2. 核心实现拆解:商品信息怎么变成可用数据
2.1 商品数据的获取与合规边界
写代码之前,先得解决一个实际问题:商品介绍的数据从哪里来?
如果你是店铺自己的运营,最方便的是直接下载商品发布页面里的信息,整理成CSV或者JSON文件,字段自己定义。比如:
| 字段 | 示例 |
|---|---|
| title | 便携胶囊随行杯 316不锈钢保温杯 |
| price | 59.9 |
| original_price | 99 |
| desc_text | 316不锈钢材质,一杯双盖,360ml容量,防漏锁扣,可放车载杯架 |
| tags | 便携、车载、送人 |
如果你是想做爬虫爬取竞品信息,我劝你慎重。君子爱财取之有道,爬取他人店铺数据可能涉及不正当竞争,更严重的还有法律风险。我自己的项目数据都是自有店铺或授权供应商给的商品资料,把这个边界划清楚,工具才能用得安稳。
2.2 用词频和关键词提取找出真正的卖点
拿到商品描述后,第一步是让程序识别出哪些词算卖点。直接对整段文字做分词,统计词频是最基础的做法。
这里我用了jieba这个分词库,对中文电商描述的支持比较好。比如描述文本分词后,高频词可能是“保温”“材质”“双层”“防漏”,这些词就是候选卖点。
光有词频不够,还要配一个业务词典。比如“进口”“升级”“加厚”“防漏”这类词天然适合做卖点,“的”“了”“和”这类词肯定要过滤掉。我建议你维护一个“卖点白名单”词表,把你自己行业里常见的高转化词放进去,让程序优先匹配白名单词。这样可以避免把“包装”“重量”“尺寸”这种中性词误当成卖点提取出来。
2.3 卖点排序规则:不同品类的排列逻辑不一样
提取出卖点之后,下一个难点是排序。同样是三个卖点,数码产品和日用品的排列逻辑完全不同。
我自己的经验是,给程序设定一套优先级规则,按品类匹配。比如电子产品的卖点排序是:核心性能 > 电池续航 > 屏幕/外观 > 配件 > 售后服务;日用百货则是:使用场景 > 材质安全 > 便利性 > 价格 > 保修。
代码层面其实就是一个映射规则,把商品分类别,每个类别对应一组关键词权重。哪个词命中多一些,权重就高一些,最后按权重倒序排,把最强的卖点放在开场部分。
我用一个简单示例说明这个逻辑:
def get_sorted_keypoints(tags, category): priority_map = { "数码": ["性能", "续航", "芯片", "屏幕", "快充"], "日用": ["场景", "材质", "安全", "便携", "易清洗"] } # tags 是从商品信息中提取的卖点词 scored = [] for tag in tags: w = 0 for idx, kw in enumerate(priority_map.get(category, [])): if kw in tag: w += max(0, 10 - idx * 2) scored.append((tag, w)) scored.sort(key=lambda x: x[1], reverse=True) return [s[0] for s in scored]这样做的好处是,不需要每次人工调顺序,程序能自动保证最重要的卖点排在最前面。当然,不同店铺的品类不一样,你需要根据自己的情况调整关键词表。
3. 口播稿生成逻辑:从“参数列表”到“说话腔调”
3.1 三段式口播结构:先抓停留、再讲价值、最后促转化
直播口播没有固定公式,但我实际用了很多稿子以后,觉得最不容易出错的还是“三段式”:开头抓注意力,中间做种草,结尾逼单。
开头的作用是让人停下来。节目一开始观众手指随时准备划走,必须在3秒内让他觉得“这事跟我有关”。所以开场白最好用一个问句或者痛点场景切入。代码里的实现思路,就是根据商品类别套用不同的开场模板。
中间部分是价值输出,核心是“我为什么需要它”。把第一步抽取出来的卖点逐个展开。注意这里不要只念参数,每个参数都要配一个生活化的使用场景。
结尾是转化动作。直播间的逻辑是“现在买有好处”,所以结尾要包含价格刺激和行动指令。价格锚点在这个过程中特别重要,脚本里我会同时提取当前价和原价,生成“限时直降”的感觉。
3.2 参数翻译成人话:参数到好处的转化
这是整个工具最有技术含量的部分,也是最容易被忽略的部分。你直接告诉观众“这个杯子用了316不锈钢”,大多数人无感;你要告诉他“316不锈钢是医用级别的材质,给孩子用都放心”,他才会心动。
参数翻译的逻辑可以用一个简单的映射表管理,让程序根据商品描述自动匹配:
| 原始参数 | 翻译后话术 |
|---|---|
| 电池容量45Wh | 充满一次能用一整天,不用老找插座 |
| 分辨率2K | 画面细腻得能看清树叶纹路 |
| IPX7级防水 | 下雨天淋了也没事,照样通话 |
| 500ml容量 | 刚好够你半天喝水,不多不少 |
| 316不锈钢 | 医用级材质,入口放心 |
实现上,我先建立一个“特征词-用户利益”的词典,程序在商品描述里命中某个特征词,就自动替换成对应的利益表达。如果没有命中,就保留原词,宁可平实也不乱编。这个环节最考验你对商品的了解程度,不是纯代码能解决的,但代码能帮你把话说得更有人情味。
3.3 加入直播间的语气和节奏
静态文案和口播稿最大区别,在于节奏和语气。观众是“听”你说话的,不是“看”你字的。所以生成稿子时,要注意三件事。
第一,多用短句。一段话别超过两行就换气。长句会让观众听觉疲劳,短句在直播间里天然有节奏感。
第二,加入口语连接词。“姐妹们”“你们有没有发现”“我跟你讲”“说真的”这类词,能把干巴巴的介绍变成聊天,让观众觉得你在跟他对话。
第三,加上简单的“表演指示”。我的脚本会在句子末尾插入一些话术标记,比如“停顿一下”“指一下屏幕”“拿起产品展示”这类内容。生成稿直接打印出来当提词器用,主播看着标记就知道自己在哪一步该做什么。
下面是模板引擎的核心思路,用占位符替换来实现。
def generate_script(product, keypoints): title = product["title"] price = product["price"] original_price = product["original_price"] script = f""" 【开场停顿】 姐妹们,你们有没有遇到过这样的问题?{product["pain_point"]} 【拿起产品】 今天给你们找到的这个{title},真的是绝了。 原来卖{original_price},今天直播间直接{price}。 我先把话放这,链接一上你们就知道我要说什么了。 【卖点展开+停顿】 我相信大家最关心的就是这一点: {keypoints[0]},我给你们具体说一下—— {translate_to_benefit(keypoints[0])} 【补充卖点】 还有一点,{keypoints[1]},这个你们平时可能没注意。 {translate_to_benefit(keypoints[1])} 【逼单】 今天价格已经给你们打下来了,{price}块,真的不用犹豫。 错过了下一次就不知道什么时候了。 三二一,上链接! """ return script这段模板代码看起来简单,其实就是整个脚本生成器的核心。商品的所有信息都会被填充到对应的位置,输出就是一个可以直接念的稿子。需要注意pain_point这个字段,最好在商品信息里手动维护一下,因为商品的痛点描述跟文案风格关系很大,有些需要人工润色。
4. 实操过程与核心代码:一个能直接跑的Python脚本
4.1 环境准备与依赖安装
我是在一台普通的Windows笔记本上开发的,Python版本用的3.10。需要安装的依赖不多,核心就这几个。
pip install jieba openpyxl如果后面要接大模型润色,再加一个openai库,或者直接用requests调API都行。
准备工作就是把商品数据整理成一个CSV文件,至少包含:商品标题、价格、原价、商品详情描述、标签/品类这五列。我习惯用Excel维护,先用openpyxl读取。
4.2 读取商品描述并清洗
第一步是读数据。代码不复杂,但要注意编码问题,CSV文件最好用utf-8-sig编码保存,不然中文容易乱码。
import csv def load_products(path): with open(path, encoding="utf-8-sig") as f: reader = csv.DictReader(f) return list(reader) products = load_products("products.csv") print(products[0]["title"])4.3 词频分析与卖点提取
接着就到了关键环节,用jieba做词频统计,提取卖点。这里我封装了一个函数,返回排序后的关键词列表。
import jieba import re from collections import Counter def extract_keywords(text, top_n=8): stopwords = set(["一个", "这个", "那个", "我们", "你们", "就是", "还有", "以及", "可以"]) words = jieba.cut(text) filtered = [] for w in words: if w.strip() and w not in stopwords and len(w) > 1: filtered.append(w) counter = Counter(filtered) return [w for w, c in counter.most_common(top_n)]注意,这个函数只能找出高频词,还不能直接当卖点。我会把返回结果和业务词表做一次匹配,把有卖点属性、有转化力的词挑出来,才算真正完成卖点提取。比如“保温”“密封”“便携”才算,而“设计”“产品”这种万能词就当普通词过滤掉。
4.4 模板填充与口播稿生成
数据处理好之后,就进入模板生成主流程。我把开场白和结尾的模板拆分出来,这样方便根据不同品类切换不同的风格。
def build_opening(category, title, price): if category == "日用": return f"姐妹们,平时你是不是也有这种烦恼?今天就来看看这个{title},价格直接打下来,只要{price}块,先到先得。" elif category == "数码": return f"兄弟们,平时用数码产品最怕什么?卡顿对不对?今天的{title},算是把这个问题彻底解决了,{price}直接上车。" else: return f"各位朋友,今天这件{title},是真的划算,你自己点开看价格就知道我有没有骗你。"写到这里,生成完整稿子的主程序就呼之欲出了。
def generate_full_script(product): title = product["title"] category = product["category"] text = product["desc_text"] keywords = extract_keywords(text) stored_keywords = filter_business_words(keywords) # 过滤出真正卖点词 opening = build_opening(category, title, product["price"]) body = build_body(stored_keywords, product) ending = build_ending(product["price"], product["original_price"]) return opening + "\n" + body + "\n" + ending4.5 可选升级:接入大模型做语言润色
模板生成的稿子能保证逻辑通顺,但语言上还是稍微有点板。如果你的预算允许,可以加一步大模型润色。
这里用的是通用接口思路,兼容市面上常见的模型服务。你可以把模板生成的稿子作为初稿,让大模型重写成直播间的口播语气。注意一定要在下游提示词里要求模型保留所有卖点、价格和行动指令,不能为了顺口丢信息。
import openai def polish_with_llm(script): client = openai.OpenAI(api_key="你的API_KEY", base_url="你的BASE_URL") resp = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "你是资深的直播带货文案专家。请把以下稿子改写成更自然、更有直播间氛围的口播文案。必须保留所有价格、品类和卖点信息,不要新增虚构事实。"}, {"role": "user", "content": script} ], temperature=0.7 ) return resp.choices[0].message.content实际我跑下来的感受是:加了润色这一步,稿子整体会自然不少,适合应对复杂商品或需要精细话术的直播场景。但如果只是日常批量上新,模板生成的稿子已经完全够用了。润色会增加费用和时间,你自己权衡。
5. 常见问题与排查技巧实录
5.1 生成的稿子读起来像机器人,怎么办
模板生成的稿子最大问题在于语气平淡。如果遇到这种情况,我一般从两个方向排查。
首先检查商品描述本身是不是太干。像“采用优质材料制造”“完美品质”这种毫无信息量的套话,程序再怎么写也不可能生动。这时需要人工把商品描述里的具体参数补进去,越具体越好,比如“材质是ABS+PC”“重量只有350克”这种。
其次检查模板里有没有足够的语气词。我自己的经验是,每三行至少要有一个口语连接词。如果稿子里出现了连续四五行没有任何感叹词或问句的段落,大概率听起来就像念说明书。
5.2 商品描述里混进去了一些奇怪的内容
这个坑我踩过好几次。比如有些商品描述里带有“她家孩子用了很好”这类评价内容,还有的是从别处复制过来的文字,里面带有人名、地名、甚至是店铺名。直接拿去生成,输出的稿子就会附带这些冗余信息,轻则奇怪,重则不合规。
我的解法是,在提取关键词之前,加一步敏感词过滤和信息清洗。用一个正则表达式库,把看起来像人名的、像地点名的、像第三方品牌名的都过滤掉。宁可过滤掉一些正常词,也不能把脏数据带进稿子里。
5.3 大模型接口调用不稳定,怎么兜底
如果接了大模型润色,一定要做兜底方案。网络抖动、接口限流、返回内容异常,这些情况我都遇到过。最好的做法是设置超时时间,不成功就直接使用模板生成的文稿,绝对不能让直播因为程序问题开天窗。
try: polished = polish_with_llm(script) except Exception as e: polished = script # 保底:直接用模板稿另外,大模型输出偶尔会自作主张地改动价格或者编造不存在的折扣,这是直播话术的大忌。每次拿到润色结果,我都要检查一遍里面的数字信息和模板原稿是否一致。检查逻辑用脚本自动跑,查找所有数字,和原始商品信息比对,不一致就告警。
5.4 批量生成时要防重复和模板感
当你同时给几十款商品生成口播稿时,一定会遇到一个问题:因为共用模板,每一篇的开场白和结尾几乎一模一样,念多了观众一下就听出来是套路。
解决思路是给模板加入“随机变异”。我的做法是准备几套不同的开场和结尾模板,程序每次随机抽取一套组合。同时把每一款商品独有的卖点放在开场部分,让前两句话听起来完全不同。
经验总结速查表:
| 症状 | 原因 | 解决办法 |
|---|---|---|
| 稿子干巴没有情绪 | 描述文本缺少具体信息 | 人工补充材质、重量、尺寸等参数 |
| 出现人名、地名等奇怪内容 | 原始数据被污染 | 增加正则清洗和敏感词过滤 |
| 接口调用失败 | 网络或限流问题 | 设置超时,失败后回退到模板稿 |
| 批量生成重复感强 | 模板固定单一 | 抽离多套开场/结尾,随机搭配 |
| 参数被AI改写错误 | 大模型自由发挥 | 自动比对数字,输出前强校验 |
最后说点实际体会
这个工具做到现在,我最深的感觉是:别指望一份稿子能让你成为金牌主播,它最大的价值是解决了从0到1的启动问题。你的脑子在镜头前空白的时候,手里有稿子照着念,念着念着状态就来了,然后你就可以脱稿,可以自由发挥。对新人来说,没有稿子的直播就像没有剧本的即兴表演,不确定因素太多了。
还有一个使用技巧分享给你:生成的稿子不要直接照着念,打印出来之后,你先把每段用自己说话习惯改一遍。不用改太多,换几个词、调整一下停顿位置就行,因为自然永远是直播最重要的底色。脚本帮你节省了搜集信息、组织语言的时间,但最终上镜那张嘴还是你自己的。希望这套思路能帮各位少熬几个写稿的夜。