简介:面向对智能体开发有一定基础的技术人员,以及希望借助AI辅助朋友圈文案创作的写作者,这份PDF文档系统讲解如何在Coze平台从零搭建一个情绪文案自动生成智能体。内容涵盖智能体项目创建、工作流编排、开始节点与大模型节点的提示词设计、ByteArtist插件调用、结束节点与消息节点设置等关键环节,并针对消息节点时序、生成图片展示方式等细节给出优化建议与多次效果测试过程,帮助读者掌握“心情输入—文案生成—配图匹配”的完整实现思路。通过该案例还可学习智能体人设与回复逻辑的优化方法,确保其聚焦处理心情相关内容,并了解发布上线与日常使用技巧。资源为1个PDF文件,压缩包大小约5.92MB,结构紧凑、便于随时查阅与对照实践,已有152人学习浏览,适合希望通过实际案例快速上手Coze智能体开发的入门及进阶用户。
1. 用 Coze 做朋友圈情绪文案智能体:不加班也能日更十条
周末深夜瘫在沙发上,想发一条记录当天心情的朋友圈,结果打了半天字又全删了——这种“憋不出文案”的时刻几乎人人都有。做私域运营的人更痛苦,每天要发三五条朋友圈维持曝光,翻来覆去就是“今天天气不错”“产品又出单了”,发出去自己都不想看。这个标题要解决的,就是把“发朋友圈”这件原本靠灵感的事,变成一个在 Coze(扣子)平台上搭建的自动化智能体:你告诉它此刻的情绪、场景和想表达的方向,它给你生成几条像人话、有画面感、带情绪温度的文案。这篇文章会从情绪文案的生成逻辑讲起,落到 Coze 工作流搭建、提示词参数调优和实际踩坑,按步骤走完,你就能做出一个能日常使用的情绪文案生成智能体。适合两类人:一是自己爱发朋友圈但写不出好文案的普通人,二是把朋友圈当运营阵地、需要持续产出内容的从业者。
2. 朋友圈文案为什么难写:情绪拆解与结构化生成逻辑
2.1 先想明白:什么样的文案才算“有情绪”
很多人以为情绪文案就是堆砌“开心”“难过”“感动”这类情绪词,这是最大的误解。你翻一下自己朋友圈里点赞最高的几条,会发现它们几乎都是“带场景的具体描述”加“一个克制的情绪落点”。比如“今晚加班到十点,楼下便利店的热包子还在冒着气,突然觉得这座城市也没那么冷”——这里面没有一个情绪词,但读的人能感受到疲惫、温暖和被治愈。所以做情绪文案生成智能体,第一步不是写提示词,而是把“情绪”这个抽象概念,拆成可被大模型理解和组合的结构化要素。
我一般把朋友圈情绪文案拆成六个维度:情绪类型(喜、怒、哀、惧、平静)、触发场景(下班路上、深夜独处、拿到结果、与朋友重逢)、感官细节(视觉、听觉、味觉、触觉)、叙事视角(第一人称、第三人称旁观)、文案长度(短句冲击型、中段叙事型、长文治愈型)、结尾态度(留白、反问、总结式点睛)。这六个维度组合起来,基本能覆盖朋友圈文案的常见形态。
2.2 情绪类型映射表:让大模型知道你要什么
大模型不是读心术,你说“我现在很烦”它只能给你一个泛泛的回复。但如果把情绪拆成类型和强度,并用结构化输入喂给提示词,输出质量会完全不同。下面是我在 Coze 智能体里用的情绪类型映射表,实际搭建时可以直接抄:
| 情绪类型 | 关键词描述 | 文案落点倾向 | 典型场景 |
|---|---|---|---|
| 喜 | 有成就感、雀跃、惊喜 | 记录结果 + 分享细节 | 拿到结果、见到想见的人 |
| 怒 | 烦躁、无语、憋屈 | 吐槽 + 自我消解 | 遇到不公、被坑 |
| 哀 | 失落、疲惫、伤感 | 场景白描 + 情绪留白 | 加班晚归、夜雨独处 |
| 惧 | 焦虑、不安、迷茫 | 真实坦露 + 寻求共鸣 | 面对不确定性 |
| 平静 | 松弛、满足、日常 | 生活切片 + 温润收尾 | 周末午后、一杯茶 |
这里的关键点在于“文案落点倾向”——同样是不爽,抑郁质的人是“深夜emo”,而高能量的人是“吐槽之后给自己打气”。所以在智能体输入设计里,除了情绪类型,还要让用户选一个“表达姿态”:自嘲型、治愈型、犀利型还是佛系型。这个姿态参数直接决定文案的语气基调。
2.3 用 Python 代码把用户输入转成结构化参数
在 Coze 的工作流里,用户输入是自然语言,但大模型节点需要结构化参数。常见做法是先接一个代码节点,把用户输入做一次轻量分类,输出 JSON 传给后续提示词节点。这个代码节点不是必需的,但加上之后能明显提升稳定性和可调试性。我一般这样写:
import json def main(user_input: str) -> dict: # 简单的关键词规则 + 默认值兜底 text = user_input.strip() emotion = "平静" # 默认情绪 attitude = "治愈" # 默认表达姿态 scene = "日常" emotion_keywords = { "喜": ["开心", "爽", "太棒了", "拿下", "高兴", "兴奋"], "怒": ["无语", "气死", "什么玩意", "烦", "恶心"], "哀": ["累了", "难过", "想哭", "失落", "丧", "emo"], "惧": ["焦虑", "不安", "害怕", "迷茫", "慌"], } for key, words in emotion_keywords.items(): for word in words: if word in text: emotion = key break # 场景识别同样做关键词匹配 scene_keywords = { "深夜": ["深夜", "凌晨", "睡不着", "失眠"], "工作": ["上班", "加班", "开会", "客户", "项目"], "周末": ["周末", "休息", "咖啡", "遛弯", "宅"] } for key, words in scene_keywords.items(): for word in words: if word in text: scene = key break return { "emotion": emotion, "attitude": attitude, "scene": scene, "raw_input": text, "length": "medium" # 也可根据字数判定 }这段代码的逻辑很简单:用关键词映射把用户输入的情绪、场景识别出来,再和原始文本一起传给下游。代码节点在这个位置有两个作用——一是“兜底”,用户不写清楚情绪时给默认值;二是“降噪”,避免大模型把无关的闲聊内容也当成文案素材。实际运行时你会发现,即便关键词匹配错了也没关系,后续大模型节点里会有一个“修正”机制,这个后面第 4 章会细讲。
2.4 为什么先结构化再生成比直接让 AI 自由发挥更稳
如果你试试直接在 Coze 里创建一个智能体,提示词只写“帮我写朋友圈文案”,大概率得到的东西是“恭喜您取得这样的成就!继续保持……”这种洋溢着一股陌生人尬夸味的文字。原因很简单:朋友圈文案的高度个性化,让它无法靠单一提示词覆盖所有场景。先结构化、再按结构生成,本质上是把“一次性说清楚需求”变成了“分两步走”——第一步确定要素,第二步让大模型在要素约束下发挥。这既控制了输出方差,也让后续调试有了抓手:文案不好,你能定位到是情绪识别错了,还是提示词的落点倾向不对,而不是对着整个智能体无从下手。
这么设计还有一层考虑:Coze 工作流里每个节点都有输入输出,结构化 JSON 在节点间流转时,你能直观看到每一步发生了什么。这对后续查“为什么今天生成的文案这么水”非常有帮助。如果你只在提示词里说“按心情生成”,出问题的时候连排查的方向都没有。
3. 在 Coze 上搭建工作流:从创建智能体到发布可用
3.1 搭建前的规划:用一个工作流还是一个智能体
Coze 支持两种形态:一种是最简单的“单智能体”,直接把提示词配好就能对话;另一种是先搭建工作流(Workflow),再把它挂到智能体上。做朋友圈情绪文案生成器,我建议走“工作流 + 智能体”的组合。原因有二:第一,这个场景至少需要“情绪识别 → 文案生成”两步,用工作流可以分步调试,中间结果看得见;第二,后续你想加敏感词过滤、加多版本改写,工作流节点直接往下挂就行,不必推翻重来。
工作流里我一般配置五个节点,按顺序串起来:用户输入节点 → 代码节点(情绪结构化)→ 大模型节点(文案生成)→ 代码节点(敏感词过滤)→ 结束节点(输出文案)。其中敏感词过滤是朋友圈文案场景特别容易被忽略的——朋友圈是公开的,生成文案里如果带了违禁词、夸大承诺词,轻则被折叠,重则可能触发账号限制。
3.2 大模型节点的核心配置:模型、温度与系统提示词
在 Coze 工作流里创建大模型节点时,几个关键参数我会这么设定:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 模型 | 豆包 Pro 或 Priority 版 | 朋友圈文案是短文本生成任务,不需要最强模型,但需要中文语感好的 |
| 温度 Temperature | 0.8 ~ 1.0 | 数值太低文案千篇一律,太高容易跑偏变“发疯文学” |
| 最大 Token | 500 | 三条文案加说明,500 足够用,设太高反而增加耗时 |
| 输出格式 | JSON | 方便后续节点解析,也便于加版本 |
系统提示词是大模型节点的灵魂。基于前文所述的结构化输入,我在系统提示词里会写清楚几个硬性要求:禁止问候语开场、禁止“首先/其次/总之”这种作文套路词、情绪落点必须和识别出的情绪类型一致、每条文案结尾要么留白要么反问、不得出现“在这个充满挑战的时代”等空话套话。
3.3 粘贴可复用的系统提示词模板
下面这套提示词是我在 Coze 里验证过多次的版本,可以直接复制到大模型节点的系统提示词框里。注意里面的“输出格式”部分对稳定生成很重要:
你是一位资深朋友圈文案写手,擅长把日常情绪写成有画面感、有共鸣的短文案。 用户会输入以下结构化信息: - 情绪类型:{emotion} - 表达姿态:{attitude} - 场景:{scene} - 原始描述:{raw_input} - 文案长度:{length} 你的任务是生成 3 条备选文案,要求: 1. 禁止使用"幸福""快乐""感动"等直接情绪词,用具体的感官细节或场景白描表达情绪。 2. 每条文案不超过 60 字,不用分段。 3. 结尾使用留白、反问或一句轻收尾,禁止总结升华。 4. 根据{attitude}调整语气: - 自嘲型:用自我调侃化解情绪 - 治愈型:温暖、平静、缓慢 - 犀利型:冷静、直接、带锋芒 - 佛系型:无所谓、松弛、不较劲 5. 如果用户输入的原始描述里有具体细节(地点、时间、物品),优先使用这些细节。 6. 三条文案的切入角度要不同,不要换汤不换药。 7. 不得出现任何违禁词、医疗承诺、投资承诺、夸大宣传用语。 输出格式(必须是合法JSON,不要输出其他内容): { "copywritings": [ {"version": 1, "content": "..."}, {"version": 2, "content": "..."}, {"version": 3, "content": "..."} ], "emotion_note": "一句话说明各条文案的情绪落点" }这套提示词有几个细节值得说明:第 1 条“禁止直接情绪词”是把朋友圈文案从“说明文”变成“氛围文”的关键;第 4 条把表达姿态作为变量传入,让智能体能同时服务不同性格的用户;第 7 条加了个安全兜底,因为 Coze 平台本身有审核,但生成端多做一层约束能减少被拦截的概率。
3.4 敏感词过滤代码节点与结束节点
大模型生成完,在输出给用户之前,我习惯再加一个代码节点做敏感词过滤。这算是血泪经验——之前有一版提示词不加过滤,用户输入“今天很生气”,生成出来的文案里有“去死吧”这种词,发出去朋友圈可能被举报。过滤节点非常轻量,只是一次字符串匹配:
import json # 敏感词表:实际使用时可扩充 blacklist = ["去死", "傻逼", "无语死了", "崩溃了", "不想活了", "傻x", "cnm"] def main(output_text: str) -> str: parsed = json.loads(output_text) for item in parsed.get("copywritings", []): content = item["content"] for word in blacklist: if word in content: content = content.replace(word, "***") item["content"] = content return json.dumps(parsed, ensure_ascii=False)这段代码的逻辑是:把大模型节点的输出解析成 JSON,然后遍历每一条文案,命中的敏感词直接替换成***。这里的黑名单只放了几个示例,实际使用时要根据你的用户群体扩充——如果有私域运营场景,还要加行业敏感词,比如“最”“第一”“绝对有效”这类广告法违禁词。过滤完再通过结束节点返回给用户。为什么这个节点放在最后而不是放在大模型提示词里?因为提示词拦截不是 100% 稳定,模型偶尔会“忘了”约束,而代码节点是硬过滤,命中即替换,不会有任何例外。两层的差别就是“软约束”和“硬规则”的差别。
4. 提示词调优与参数设置:让文案从“能看”到“想发”
4.1 三个最值得调节的参数:温度、输出格式、上下文长度
Coze 大模型节点里参数非常多,但真正影响朋友圈文案质量的,第一是温度(Temperature),第二是输出格式约束,第三是是否带上下文。温度我在前文建议设 0.8 到 1.0,这里展开说说为什么。温度低于 0.5 时,模型偏向选择概率最高的词序列,生成的文案会非常“正确”但也非常平庸,前后两批文案高度相似;温度高于 1.2 时,模型开始随机挑选低概率词,语句流畅度下降,容易出现“句子很美但整体跑偏”。0.8 到 1.0 这个区间,基本能在语句通顺和风格多样之间取得平衡。如果你发现文案不够“灵”,优先把温度往上调 0.1 再测试,而不是去改提示词。如果文案直接跑偏不搭边,温度回调到 0.7 试试。
4.2 处理“模型带出来的废词”:few-shot 示例比规则描述更有效
纯靠系统提示词规则约束,模型还是会在开头带出“好的呢”“以下是为您生成的备选文案”这类废话。我的经验是,在与用户对话的输入框里塞一组 few-shot 示例,比在系统提示词里反复强调“不要输出介绍语”有效得多。
用户输入: { "emotion": "哀", "attitude": "治愈", "scene": "深夜", "raw_input": "刚加完班回到出租屋,小区路灯下看到一只流浪猫蹲在垃圾桶旁边", "length": "medium" } 参考输出: { "copywritings": [ {"version": 1, "content": "垃圾桶旁蹲着的那只猫,让我知道今晚不止我一个人还没睡。它没看我,我也没打扰它,各蹲各的,挺好。"}, {"version": 2, "content": "凌晨一点的楼下,猫比人自在。它等的是明天的早餐,我等的是周末。"}, {"version": 3, "content": "它大概觉得路灯底下暖和,我大概觉得加班夜的路灯底下有人气。人和猫,今晚都凑合活。"} ], "emotion_note": "三条都用场景白描,不直接说孤独或累。" }这个示例的作用是给模型一个“边界样本”——它看到同样的输入对应的目标输出长什么样,就会把输出风格往这个方向收敛。只写规则不给示例,模型对“不直接说情绪词”的理解会打折扣,因为“治愈”“自嘲”这些姿态词对模型来说是抽象的;给一个具体范例,它就能直接模仿结构。对朋友圈文案这种高度吃语感的生成任务,示例的权重比规则还高。
4.3 多版本输出的取舍逻辑:让用户挑而不是让 AI 猜
很多人在做文案生成智能体时犯一个错:让 AI 只生成一条文案,然后指望它“精准命中”用户的心。这不现实。朋友圈文案的好坏是高度主观的,同一个场景,有人想发高冷的,有人想发搞笑的,AI 猜不中太正常。所以我在智能体设计里,默认强制生成 3 条不同切入角度的文案,并且要求三条的角度差异足够大(一条偏场景白描、一条偏情绪自嘲、一条偏态度表达)。用户看到三条后自己挑,这个体验远好于“让 AI 一次猜中”。这也意味着在提示词里,你要刻意让模型把三条写成三个不同“物种”的文案,而不是同一种风格换三个说法。
三条文案的差异化要求: - 第一条:场景叙事型,像一个电影镜头的文字描述,不直接评价。 - 第二条:态度表达型,用一句话把当下的情绪态度亮出来,适合个性签名风格。 - 第三条:生活切片型,像随手拍的照片配文,轻松、自然、不刻意。把这段加到系统提示词里,大模型会明确知道要“分配风格”,而不是把第一条换个词凑成第二条。实际体验差别很大——之前在没做差异化约束时,三条文案全是“场景叙事型”,用户觉得是同一个模板在偷懒;加上这段之后,三条文案的整体形态不同了,用户挑出满意文案的概率明显提升。
4.4 把用户的不满意变成下一次优化方向
智能体发布之后,你一定会收到“这条不好”“太矫情了”“不是我要的感觉”这类反馈。这不是失败,而是调优入口。我建议在智能体的开场引导语里就写明:用户可以对结果提出修改要求,比如“第二条太短了,加长一点”“换个自嘲的语气”“不要出现猫这个意象”。Coze 的对话式交互天然支持这种多轮修正,你不必把智能体做成一次生成定终身。这套机制的背后,是把“文案生成”从单向生成任务变成“生成—反馈—修改”的多轮交互,用户的参与感更强,最终留下的文案也更贴合本人气质。
这里有个参数层面的细节:如果你在 Coze 里用了多轮对话,建议把大模型节点的“上下文”策略设置为“仅带最近 2 轮对话”,不要无限带历史。因为朋友圈文案是短文本生成任务,历史对话带上 10 轮之后,模型会被之前的文本干扰,输出的文案越来越像之前的结果而缺乏新鲜感。只带最近一轮的修改意见,足够让模型知道方向,又不会被旧文本带跑。
5. 搭建与调优中的四个避坑:现象、原因与解决方案
5.1 工作流里大模型节点只认一个“严格输出格式”,加了多余字段就解析失败
现象:大模型节点配置了 JSON 输出格式,结果节点经常报“解析失败”,但预览时明明看到模型输出了合理的 JSON。
原因:这是我最早翻车的地方。Coze 大模型节点的输出格式校验比较严格,如果系统提示词里的输出格式示例和节点配置的输出 JSON Schema 不完全一致——比如多了一个字段、字段名拼写不同、带了一个示例值没替换——节点就会判定输出不合法。模型倒是“努力”按提示词输出了,但两边对不上。
解决:把系统提示词里的 JSON 示例直接复制到大模型节点的输出格式配置里,并删掉注释文字。更稳妥的做法是把结构简化成两层,不要嵌套太深。嵌套越浅,解析越不容易出错。
5.2 代码节点中文字符串返回时被转义成 Unicode 乱码
现象:敏感词过滤代码节点返回的 JSON 里,中文全变成了\u60c5\u7eea形式的 Unicode 转义字符,后续节点读不到真实文本。
原因:Python 的json.dumps默认ensure_ascii=True,中文会被转义。在 Coze 代码节点里,这个现象尤其常见,因为节点间的传参走的是 JSON 序列化。
解决:在json.dumps(parsed)里改成json.dumps(parsed, ensure_ascii=False)。这个坑几乎每个初用 Coze 代码节点的人都会遇到,顺手记一下能省不少排查时间。
5.3 温度设成 0.3 之后,生成的文案“正确但毫无灵魂”
现象:用户反馈文案写得都对,但读起来像 AI 客服发的工作汇报,毫无发朋友圈的冲动。
原因:温度太低,模型每次都走概率最高的词路径,结果就是所有句子都是“最安全”的组合。朋友圈文案需要的是“意料之外、情理之中”的表达,低温生成恰恰杀死了所有意外。
解决:把温度调回 0.9 左右,并且把 few-shot 示例里的文案风格调整成“口语、松弛、带一点小机灵”的调性。模型会跟着示例的语气走,而不是跟着规则里的“生动活泼”这种抽象描述走。
5.4 用户输入太短,生成出来的文案全靠编、细节全无
现象:用户只输入“今天很开心”四个字,生成的三条文案全是“今天天气不错,心情也跟着好了起来”“愿你和我一样开心”这种正确的废话。
原因:朋友圈文案的感染力靠的是具体细节——“开心”不是情绪,是结果;读者看不到用户为什么开心,就无法共鸣。而模型在缺少细节时,只能反向填充通用场景,结果就是空泛。
解决:在智能体的开场对话里引导用户给出一个具体画面,比如“最近一次让你有这种感觉的场景是什么?在哪里,身边有什么,天气怎么样”。用预设问题把输入从四个字扩成一句话,文案质量立竿见影。同时在系统提示词里加一条:如果没有具体细节,宁可写“留白式文案”也不要用空词凑字数。
6. 进阶:让智能体记住你的风格,并验证文案是否真的“像你”
基础版的智能体已经能用了,但要让它越用越顺,还有一个关键动作:把用户的“风格偏好”沉淀下来。我一般会在工作流里加一个记忆节点,把用户每次最终选定的文案存下来,作为下一次生成的 few-shot 参考。常见做法有两条路:一是用 Coze 的变量记忆功能,把用户风格参数(比如“喜欢短句”“讨厌用阳光这个词”“倾向自嘲”)写进变量里,下次生成前把这些变量插入提示词;二是更简单的方式——在开场引导语里让用户做一次风格初始化,把风格选择结果拼到上下文中。后者虽然笨,但在 Coze 里改动最小,也最稳定。
验证生成质量,我常用一个很朴素的方法:把智能体生成的文案发给我身边三个不同性格的朋友,问他们一句话——“这条朋友圈,你觉得像谁发的?”如果三个人给出的画像各不相同,说明文案没有鲜明的风格;如果至少两个人说“有点像你自己”,说明风格立住了。这比盯着提示词反复调参数更真实。顺带说一句,我自己的习惯是每周翻一次用户留存下来的“采纳记录”——被用户选走的那条文案,往往能反推出当下的主流偏好,这些数据就是下次调提示词的方向。因为没有数据支撑的调优,说到底还是靠感觉。
最后给你一个我自己的教训:别指望一次搭完就一劳永逸。朋友圈的流行语境每隔一阵子就会变,以前流行“深夜emo风”,过一阵可能又流行“冷静克制风”。所以把智能体建成“生成 + 用户挑 + 风格沉淀”的闭环,比你一次性把提示词写到完美更值得投入。希望帮到你。
本文还有配套的精品资源,点击获取