简介:这是一份围绕 Coze 平台搭建朋友圈情绪文案自动生成智能体的实操型 PDF 教程,面向对智能体开发有兴趣或具备一定基础的技术人员,以及希望借助 AI 辅助朋友圈创作的内容创作者。文档从创建智能体、配置基本信息出发,完整演示了工作流的搭建过程:设置开始节点接收用户心情输入,通过大模型节点生成 50 字左右文艺化文案,再使用 ByteArtist 插件自动匹配情绪配图,并借助消息节点优化等待体验;随后进一步讲解人设与回复逻辑的优化、限制条件设置及多轮效果测试,帮助读者掌握从节点参数配置、提示词优化到发布上线的全流程。资源为单个 PDF 文件,压缩包大小 5.92MB,内容结构清晰,兼具操作步骤与配置思路。已有 152 人学习下载,适合边读边练,可作为智能体入门和 AI 文案生成项目的参考。
1. 朋友圈情绪文案智能体:比“会写”更难的是“懂情绪”
朋友圈文案这件事,难的不是辞藻,是“此刻的情绪到底是什么”。用户过来说一句“今天好烦”,到底是工作受挫、感情纠纷,还是单纯想发一条带抱怨风格的搞笑文案?同一个输入,输出可以是深夜emo小作文,也可以是自嘲段子。用Coze做智能体,本质就是把“情绪识别 → 风格映射 → 文案生成”这条链路固化成可复用的工作流,而不是让大模型裸奔式地瞎猜。
这篇文章要解决的问题很具体:怎么在Coze上搭一个能识别情绪、按场景生成朋友圈文案、并且可以多轮追问调风格的智能体。适合两类人——想快速落一个能发到飞书、微信或Web端小工具的运营人员,以及刚接触Coze工作流搭建、想搞清楚智能体和普通Bot差异的开发新手。先说结论:这个项目80%的功夫在提示词设计和节点编排上,模型本身反而不是重点。
2. Coze智能体和Python方案的边界:为什么文案生成要走工作流
2.1 智能体不是聊天机器人,它多了“干活”的部分
很多新手第一次打开Coze会困惑:这不就是个能聊天的对话框吗?其实智能体和普通对话Bot的差别在于是否具备任务闭环能力。一个完整的Coze智能体包含四块:人设指令(Bot怎么想)、技能与工作流(Bot怎么干)、知识库(Bot知道什么)、记忆与变量(Bot记得什么)。朋友圈情绪文案生成这种任务,恰好四块全沾。
我一般会这样拆解“基于Coze打造朋友圈情绪文案自动生成智能体”这个标题里的核心链路:
- 接收用户原始描述(一句话或一段抱怨);
- 通过情绪分类节点识别“开心/难过/烦躁/平静/炫耀/自嘲”等标签;
- 通过风格映射节点把情绪映射到文案风格(emo、沙雕、文艺、极简);
- 调用大模型节点生成3条候选文案;
- 输出时带上“换风格”“再写一次”的快捷追问按钮。
这个拆解的好处是:每一步都是可观测、可替换的。用户说“烦死了”,你可以清楚看到智能体在哪一步把它理解成了“烦躁”,而不是直接吞进黑匣子。这就是走工作流比让模型单次生成更让人安心的原因。
2.2 为什么选Coze而不是自己用Python写一套
标题里这个项目,身边不少人问过:已经会用Python了,为什么不直接用openai SDK加一个Flask服务,非要绕到Coze上?我的答案是:要看你想要的是“效果”还是“控制权”。
自己用Python搭智能体,优势是灵活——你可以精确控制prompt模板、模型参数、上下文窗口、埋点日志,出问题能一行行debug。代价是部署、鉴权、多端发布、并发处理全得自己扛。而Coze这类平台把这些都收走了:你只需要在界面上拖节点,配好人设和提示词,就能生成一个带Web界面、可嵌入飞书或微信客服的成品。
但平台方案也有明显的边界:工作流节点是黑匣子,调试信息有限;复杂循环逻辑(比如多轮迭代改写、动态分支)在可视化界面上会很别扭;对推理成本敏感的场景,你无法细粒度控制每次调用。所以我的建议是:把Coze当生产车间,把Python当实验室。先在本地用脚本验证prompt逻辑和参数,跑通了再搬进Coze工作流,翻车率会直线下降。
2.3 这个项目的关键设计:把“情绪”变成可计算的变量
朋友圈文案智能体和一般的“写文案工具”最大的不同,在于情绪不是附属品,而是整个流程的输入信号。要用工程手段处理情绪,就得先把它结构化。
我在Coze里设计了一个前置变量层,用户进来先回答三个问题:此刻心情(下拉单选)、发生了什么(自由文本)、发这条想给谁看(公开/分组/仅自己)。这三个变量会拼成一个结构化字符串传给后续节点。这样做的理由是:自由文本本身信息熵太高,模型直接读“烦死了”容易跑偏;但一旦拆成“情绪=烦躁 + 场景=加班到十点 + 可见范围=分组”,生成逻辑就有约束了,输出质量能稳定不少。
下表是情绪变量到生成策略的映射关系,也是我后来调整提示词的依据:
| 情绪分类 | 文案基调 | 建议字数 | 典型开头 |
|---|---|---|---|
| 开心/炫耀 | 松弛、轻快 | 20-40字 | “今天有被奖励到” |
| 难过/低落 | 克制、留白 | 15-30字 | “有些事,晚点再说” |
| 烦躁/愤怒 | 自嘲、降温 | 20-35字 | “今日血压:偏高” |
| 平静/日常 | 记录感 | 10-25字 | “下班路上的风很软” |
| 自嘲/沙雕 | 夸张、反转 | 25-45字 | “脑子:我会;手:你不会” |
这套映射是我试过几种配置后效果最好的版本。它的价值在于:把“风格”这种玄学概念转化成了可配置的参数项,换风格就是换映射表,不需要重写整个提示词。
3. 搭一个最小可跑版本:Bot人设、工作流节点与本地复现脚本
3.1 第一步:先写好人设指令,再动手拖节点
很多人上来就拖工作流,结果生成出来的文案一股机器味——因为智能体的“人格”根本没定义。Coze的Bot配置里有一块叫“人设与回复逻辑”,这是它的System Prompt,决定了模型用什么口吻说话。
我给这个智能体写的人设模板是这样的,你可以直接复制进Coze:
你是一名微信朋友圈资深玩家,擅长用短句表达真实情绪。 你的任务是根据用户提供的心情状态、事件描述和可见范围,生成朋友圈文案。 硬性要求: 1. 每条文案不超过50字,禁止写成作文; 2. 禁止使用“仿佛”“犹如”“宛如”等书面比喻词; 3. 优先使用口语化短句,每句不超过15字; 4. 文案要像一个真实用户在发状态,而不是广告软文; 5. 每次生成3条供用户选择,风格互不相同; 6. 生成结束后,追加一句“换风格试试?”作为引导。 用户输入格式为: 心情=烦躁;事件=加班到十点,方案被推翻;可见范围=分组这段指令里最有价值的是第2条和第4条。禁用词表能直接掐断大模型爱堆形容词的毛病;“像一个真实用户在发状态”比“写得好一点”更能拉回语气。我建议你把自己的审美偏好也塞进去,比如我的版本里就加了“不要用波浪线结尾”。
3.2 第二步:定义工作流节点,把链路变成数据流
人设写好之后,进入Coze的“工作流”面板。这个项目最简版本需要三个节点:
- 输入节点(start):接收三个字段——mood(心情)、event(事件描述)、audience(可见范围);
- 大模型节点(generate):把三个字段拼接成prompt,调用模型生成3条文案;
- 输出节点(end):把模型返回的文本原样输出给对话框。
如果你想让智能体更“智能”一点,可以在中间加一个code节点做情绪关键词兜底。比如检查event里是否有“加班”“分手”“被骂”这类高频场景词,命中时直接覆盖用户的mood选择。这样做能解决一部分用户乱填心情的问题。
下面是这个工作流的核心配置,我在Coze里一般是按这个结构填的:
{ "workflow": { "start": { "type": "input", "fields": ["mood", "event", "audience"], "output": "fields" }, "generate": { "type": "llm", "model": "gpt-4o-mini", "input": "心情={{start.mood}};事件={{start.event}};可见范围={{start.audience}}", "prompt": "参照人设指令生成3条朋友圈文案,每条之间用---分隔,不输出其他内容", "temperature": 0.9, "max_tokens": 300, "output_key": "draft" }, "end": { "type": "output", "value": "{{generate.draft}}" } } }逻辑说明:整个工作流的核心是把用户的非结构化输入变成结构化字段,再交给大模型节点做生成。这里的temperature我调到了0.9,因为朋友圈文案需要发散和惊喜感;如果你发现生成结果太飘,再降回0.7。max_tokens设300够用,3条短文案加分隔符约250字左右。
参数说明:model字段选你账号可用的最快模型就行,不一定要最强——文案生成任务对推理深度要求不高,但对响应速度敏感;output_key是节点的输出标识,后面的节点引用它时要写成{{generate.draft}},在Coze里拼错引用路径是新手最常见的报错原因。
3.3 第三步:在本地用Python先跑通同一套逻辑
为什么我坚持先在本地复现一次?因为Coze工作流节点出问题时,你能看到的日志非常有限——只有“调用失败”或“空输出”。而同样的问题在本地,你可以print每一步的结果,看见数据到底在哪一环丢了。
下面是我用来做逻辑预演的最小Python脚本,遵循和上面工作流完全一致的结构:
# 模拟Coze工作流的三个节点:输入 -> 大模型生成 -> 输出 import json def start_node(): """对应Coze的start节点,收集结构化字段""" return { "mood": "烦躁", "event": "加班到十点,方案被推翻", "audience": "分组可见" } def generate_node(fields: dict) -> str: """对应Coze的llm节点,这里用规则拼接模拟prompt效果""" prompt = ( f"心情={fields['mood']};事件={fields['event']};可见范围={fields['audience']}\n" "请生成3条朋友圈文案,用---分隔" ) # 实际开发中这里替换为: response = openai.ChatCompletion.create(...) mock_result = ( "今天的方案被推翻了十次,项目组已经学会笑着改需求。---\n" "加班第十个小时,脑子还在转,灵魂已经先下班了。---\n" "有些方案出生就是为了被推翻的,比如今天我写的那个。" ) return mock_result def end_node(text: str): """对应Coze的end节点,原样输出""" print("生成的文案:\n") print(text) if __name__ == "__main__": fields = start_node() drafts = generate_node(fields) end_node(drafts)逻辑说明:这个脚本的价值不是真的生成文案,而是让你先跑通“输入-处理-输出”的数据流,知道每一步的数据长什么样。mock_result部分替换成真实的模型接口调用后,你就能在本地调试提示词。
参数说明:fields字典对应Coze工作流里的三个变量字段,顺序和命名保持一致,等你搬到Coze上配置时就不用改映射关系了;---作为分隔符是为了让后续解析3条文案时好切割,如果你用JSON格式输出也可以,但纯文本分隔符调试起来更直观。
提示:本地跑通后,再进Coze工作流里建同样的三个节点。你会发现贴配置的过程像抄自己的作业,几乎不会报错。
3.4 第四步:发布渠道选Web端,测试成本最低
Coze支持发布到很多渠道,但对这个项目来说首选“Web应用”或“API服务”。原因就一个:迭代速度快。朋友圈文案智能体需要频繁调整提示词,Web端改完保存就能测,不用走发布审核流程。
发布时注意保存好API Token和Bot ID,后面做压测脚本时要用到。如果你打算以后并到飞书机器人或智能体客户服务里,那也是在这个配置基础上加渠道,核心工作流不用动。
4. 情绪识别和风格控制的提示词设计:温度、追问轮数与负向词表
4.1 情绪识别用“引导式追问”代替“一次猜中”
很多智能体翻车,都是因为试图从一句话里精准猜出用户情绪。但“今天好烦”这种输入,信息量真的不够——它可能是愤怒,可能是疲惫,也可能只是撒娇。我试过让模型直接猜,猜错的概率接近一半。
后来换成了引导式追问:智能体先不回文案,而是回一个问题。比如“收到,今天的烦是哪种烦?A工作压垮 B感情闹心 C纯吐槽一下”。用户点选后,情绪字段才真正落定。这个设计和Coze的“选项按钮”功能配合起来很顺,用户不需要打字,点一下就继续。
这个设计牺牲了首轮响应速度,但换来的是最终结果质量。因为朋友圈文案是给本人看的,写偏了就是废稿。我在实际使用中统计过,追问一轮后生成文案的采纳率从50%出头跳到了75%以上。
4.2 三个必调参数:温度、惩罚、输出长度
在Coze大模型节点里,有几个参数会被大部分人直接忽略,但它们对文案生成的影响比换模型还大:
- temperature(温度):朋友圈文案需要语言多样性,我设在0.8-0.9。低于0.5时所有文案都像同一个人写的;高于1.2时容易出现病句和自嗨式胡言乱语。
- frequency_penalty(频率惩罚):这个是重点。文案类任务里,模型会不自觉重复“今天”和“真的”。把频率惩罚调到0.3-0.5,能明显减少重复词。Coze的模型配置里有这个字段,别留默认0。
- max_tokens:控制在250-400之间。设太长的话模型会把文案写成小作文;设太短会出现截断。3条文案各15字加上分隔符,300个token是最稳的区间。
这三个参数没有一个需要“精确到小数点后两位”的调法,它们本质是玄学,就是看输出顺不顺眼。但比玄学更可靠的方法是压测——把同一段测试输入跑10遍,看风格漂移有多大,这个我放到最后一章展开。
4.3 给提示词加“负向词表”,治AI味最有效
让朋友圈文案翻车的往往是同一个原因:AI味太重。什么叫AI味?就是句子完整、逻辑通顺、用词优美,但读起来像百科词条或者广告软文。真实朋友圈不是这样的,真实状态里全是断句和留白。
我给这个智能体维护了两份清单,都塞在提示词里:
禁止出现的词汇: 仿佛 / 犹如 / 宛如 / 徜徉 / 氤氲 / 大抵 / 何尝 / 亦 / 愿 / 期许 禁止出现的句式: 1. "生活就像一盒巧克力"这种名人名言嫁接; 2. "愿我们都被世界温柔以待"这种祝福体; 3. 三个分句以上的排比句。 鼓励的风格: 1. 口语碎碎念:"今天的方案被推翻十次,组里人已经笑出声了"; 2. 破折号转折:"一切顺利——是不可能的"; 3. 自问自答:"周一是什么?是周一的报应。"逻辑说明:负向词表的作用是主动封掉大模型的“舒适区”。模型在生成短文案时,天然倾向往散文方向跑,因为训练语料里优美表达更多。你需要明确告诉它“不许用这些词”,输出才会回到真实感。
参数说明:这份清单放在人设指令的最底部,用注释符隔开,方便以后增删。实际使用中,我发现“排比句禁止”这一条带来的效果提升最明显——排比是AI味的最典型特征,一旦断掉,整个文案风格立刻落地。
4.4 输出格式约束:让模型先出JSON再切文案
最后是一个工程细节:不要让大模型直接输出“1、2、3”列表,那样后续解析容易因为编号格式混乱而失败。我习惯在提示词里强制要求JSON格式输出:
以JSON数组格式输出,不要输出任何其他内容: [{"style": "emo", "text": "..."}, {"style": "自嘲", "text": "..."}]然后在工作流后面加一个code节点做解析,把JSON里的text字段抽出来,拼接到对话框的展示模板里。这样做的好处是:如果模型返回格式错误,你能在code节点里捕获异常并做兜底——比如直接返回原始文本。这在Coze里等于给你的智能体上了一道保险丝。
5. 朋友圈智能体踩坑清单:五个真实翻车现场和修复办法
5.1 生成文案千篇一律,换风格没变化
现象:无论用户选了什么情绪,输出的三条文案语气几乎一致,都是“温柔治愈风”。
原因:这是最典型的“人设指令过强”问题。我在人设里写了太长的人格描述,语气锚定太死,模型不敢发散;另一个原因是temperature被改回了默认值0.3,输出确定性太高。
解决:把temperature调到0.9,并且把“风格互不相同”从指令的第5条提到了第1条。同时给三条文案分别指定风格标签:第一条走“自嘲沙雕”,第二条走“克制留白”,第三条走“平实记录”,让模型在不同框架里发挥,而不是自由发挥。
5.2 情绪识别不准,用户说“烦死了”被理解成“愤怒”
现象:用户输入“烦死了,但又不想发火”,智能体生成的文案带着明显的攻击性。
原因:这个输入里“烦”和“发火”两个词同时出现,模型的注意力被“烦”吸走了,没有看到后半句的“不想发火”。
解决:在情绪识别节点前面加一个规则修饰器,用正则抓“但”“不过”“其实”这类转折词;命中转折词时,情绪倾向以后半句为准。这个用小规模语言模型在本地跑也行,在Coze里可以用code节点配合字符串匹配实现,不复杂但是很管用。
5.3 拿到的是JSON字符串,怎么喂不进下一个节点
现象:大模型节点的输出框里能看到完整JSON,但后面的节点引用{{generate.text}}取不到值。
原因:Coze的大模型节点默认输出是完整字符串,不会自动帮你解析JSON字段。引用路径得写成{{generate.output_key.解析后字段名}}这种深层路径,而不是表面看到的那个结构。
解决:在中间加一个code节点,用json.loads解析然后返回纯文本。这是我的血泪经验——凡是看到Coze工作流里取不到值,先怀疑路径写深了一层,而不是怀疑节点坏了。
5.4 文案生成慢得离谱,转圈十秒才出结果
现象:工作流跑一次要10秒以上,用户体验很差。
原因:链路里放了两个大模型节点,一个是情绪识别,一个是文案生成,两个串行跑,总延迟是叠加的。
解决:把情绪识别节点换成轻量规则匹配,或者用Coze的LLM节点并行分支——情绪识别和文案生成同时跑,文案生成先按默认风格输出,情绪识别结果出来后再决定要不要二次重写。实践经验是:大部分用户对“快速出一条”的满意度远高于“三秒后出三条”。
5.5 上传的文案案例知识库检索不到内容
现象:我把100条手写文案传进知识库作参考后,智能体反而越来越不会写了,输出和案例毫无关系。
原因:知识库检索是按语义相似度匹配的,但朋友圈题材短文案之间语义相似度极高——“今天好累”和“今天好开心”在向量空间里距离可能很近,导致检索结果压根不对应。另一个坑是文档里没有做去重,同一句出现两次就会污染索引。
解决:上传前先做数据清洗,把明显重复的句子删掉,每行一条文案;上传后把检索的top_k从默认值调低到3,避免无关上下文干扰生成。这个问题的本质是:不是所有项目都需要知识库,先让模型裸跑,跑不通再加RAG,别一上来就堆料。
6. 用压测脚本和数据回流把智能体做稳:验证方法与进阶玩法
6.1 用压测脚本检验智能体的稳定性
上线前我最少跑一次批量测试。Coze平台虽然提供了测试面板,但手动点击次数有限,看不出统计规律。我习惯写一个简单的压测脚本,把测试用例循环跑20遍,统计输出质量和格式正确率。
# 压测脚本:用同一组输入跑多次,统计格式正确率和风格一致性 import random class FakeCozeClient: """模拟Coze API响应,真实使用时替换为requests调用""" def __init__(self, seeds): self.seeds = seeds def generate(self, mood: str, event: str): base = [ "今天又加班,方案改到第三版,人已经麻了", "方案被推翻的第七次,组里开始猜下次用哪个理由", "加班唯一的好处是,连emo都没时间", ] return random.choice(base) client = FakeCozeClient(seeds=["test1", "test2"]) ok_count = 0 total = 20 for i in range(total): result = client.generate(mood="烦躁", event="加班") # 检查是否以预期风格开头 if result.startswith(("今天", "加班", "方案")): ok_count += 1 print(f"风格一致率: {ok_count / total * 100:.0f}%")逻辑说明:压测的核心指标不是“句子好不好”,而是“输出是否还在约束框架内”。开头风格命中率、是否出现禁用词、是否超字数,这三个指标远比主观感受靠谱。真实使用时把FakeCozeClient换成调用Coze发布后的API接口,mood和event换成你的压力测试用例集。
参数说明:total建议至少20次,太少看不出波动。重点观察两次连续输出是否重复——朋友圈文案场景下,用户会多次使用,如果连续两次生成雷同内容,体验直接崩。
6.2 数据回流:把被采纳的文案变成新的知识
智能体上线后真正好用的部分,不是模型,而是你积累的“被采纳记录”。我的做法是:每次用户在对话框里明确说“这条不错”,就通过webhook把对应的完整输入和输出推送到自己的数据库,每周挑10条最优的存进Coze知识库。
这样持续两周后,知识库里都是“带有你个人审美偏好的高质量样本”。模型再生成时,检索到的高质量参考会让整体输出往里收,AI味进一步降低。我做过多轮对比:数据回流前后的采纳率大概提升了15%左右,而且模型换掉也不影响效果,因为那份偏好已经沉淀在知识库里了。
6.3 进阶玩法:一个人运营多个智能体
做到这一步,这个朋友圈文案智能体就从“玩具”变成了“工具箱”。最后分享一个我的教训:别把多个使用场景塞进同一个智能体——朋友聚会文案、深夜emo文案、可能还有微商广告文案,风格相互干扰,谁都用不好。正确做法是拆成三个Bot,共享同一套底层工作流,只在人设指令里换掉风格映射表。
这件事看似只是复制粘贴,但实际维护时你会轻松非常多。我现在给身边朋友做类似智能体,都是先让工作流可以独立复用,再让人设指令像换皮肤一样随意替换。希望这套拆法和调试路径对你有用,赶紧去Coze里拖一个你自己的情绪文案智能体吧。
本文还有配套的精品资源,点击获取