我是谁
在职,白天上班,晚上做AI独立开发。
最近在给一个营销顾问团队做工具。他们给中小企业撮合异业合作,我负责把顾问手上最耗时的那段活搬到AI上。三条工作流已经跑通,正在往他们的日常流程里接。
小项目
先说一句,我的场景不在科研,是职场里的工具落地(活动说明里写了职场上也算)。任务是这样:
他们的做法叫顾问式营销:A家出引流权益,B家出客户和信任背书,两边拿自己的多余资源换对方的多余资源,不花广告费。
顾问接一个案子要做三件事:把两家企业的基本信息整理成画像;判断这两家搭不搭;能搭的话出一份合作方案。全部靠人读资料加经验判断,一个案子通常要一天。
我要做的就是把这三步变成三条工作流。
我用了什么AI工具
Dify,自己用docker部署的,用来编排工作流和挂知识库。模型用DeepSeek的Flash版,评分节点温度设0.3,方案生成节点0.7。另外写了Python脚本,把YAML直接写进Dify数据库,省得在画布上一个节点一个节点手点。知识库素材是我自己整理的,按理论、案例、模板、禁区分了四层。
我是怎么做的
工程上就三步,对应的是画像、匹配、方案生成三条工作流。
先把Prompt的规矩定死。我给每个模型节点注入同一段约束:只做助理不做操盘手,涉及判断的地方给保守、标准、激进三个选项让人挑,风险必须标出来,涉及钱和法律的地方一律写「需人工审核」。这段东西我先写成文档再拆到各个节点,不是边搭边想。
原文贴在下面,可以直接抄:
你是资深营销操盘顾问的AI助理。你是助理,不是操盘手,
策略判断、信任建立、线下谈判由人负责。
涉及判断的地方,给出保守、标准、激进三个选项,由人挑,不要替人拍板。
涉及金额、分成比例、法律条款,以及医疗、金融、教育这类要资质的行业,
标注「需人工审核」。
输出用标题、列表、表格,凡是评分都要写依据。
然后是输出格式。理由归模型,数字归代码。每个user段的末尾我固定挂一句:严格输出可被json.loads解析的JSON,不要输出Markdown标记,不要输出任何解释文字。
中间那步是匹配评分,五个维度:客户重叠度、品牌调性契合、资源互补性、地理便利性、合作意愿,每维0到20分。
一次调用长什么样,拿诊断这一步说。输入就六个字段:行业、城市、主营产品、客单价、现有客户数、合作目标。比如一家社区瑜伽馆,客单价198,会员80人,目标是获客。模型输出客户池价值指数、品牌调性、三类引流权益建议、合作吸引力评分,还有一段「适合跟哪些行业搭」的判断。我要检查的是那三类引流权益,模型经常推荐成本明显高于客单价的东西,这条几乎每次都要改。
最后是导入和验证。YAML写好,脚本写库,再从库里把JSON读出来跟YAML比对一遍。
听起来挺顺。实际上前面两周基本都在填坑。
结果如何
三条工作流都跑通了,从画像输入到方案输出能一次走完。目前还在往顾问的日常流程里接。
原来一个案子要占掉一个完整工作日(按8小时算),现在跑完加人工核对,一小时左右。这一小时里还有相当一部分是人在核对,不是等模型。
产出是标准化六模块:合作定位、引流权益设计、客户流转路径、利益分配、执行排期、话术。顾问拿到的是能直接改的稿,不是从空白页开始。
顺便攒下了Prompt文档、知识库素材、YAML、导入脚本和测试数据,换一个行业场景能直接复制。
踩坑和提醒
这部分才是我想写的。
1.代码节点的输出写成数组,画布直接空白
第一个工作流写完导入,应用能打开,但画布一片空白,节点一个都没有,也不报错。查了半天,是代码节点的outputs写成了数组格式。Dify要的是字典,字段名当键。改成字典就好了。这个坑没有任何提示,只能靠对比能跑通的YAML看出来。
2.三个工作流变量字段写成了空数组
应用直接打不开,接口报missing。environment_variables、conversation_variables、rag_pipeline_variables这三个字段,直写数据库时必须是以变量id为键的空对象,写成[]就校验不过。我现在脚本里统一初始化成{},没再出过问题。
3.模型输出的JSON时好时坏
同一个Prompt反复跑,隔几次就会带一次Markdown代码块,或者在JSON前面加一句客套话。我没精确统计过比例,但频率高到不能不管。代码节点一解析就崩。两件事一起做的:Prompt里明确写不要输出Markdown标记;代码节点套try/except,解析失败就让原文往下传,流程不中断,人在结果里能一眼看见格式不对。
4.让模型自己算分、自己下结论
这是我犯的最贵的错。五维评分让模型打完再自己加总、自己判断推不推荐。跑出来的报告经常总分78分但结论写「不建议」,或者五项加起来根本不等于总分。模型算数不靠谱,阈值判断更不靠谱。
现在的做法是:模型只出每一维的分数和理由,总分由代码节点重算,结论按阈值强制判定。低于60分就判不建议,模型说什么都没用。这条改动之后评分才算能用。
5.改完数据库,前端看到的还是旧的
脚本导入成功,数据库里查得到,但页面上是旧内容。缓存。Ctrl+Shift+R强刷才出来。我现在每次改完都做两件事:从库里读回JSON跟YAML比对,然后强刷。少了任何一步都会白查半天。
6.知识库检索为空,整个流程断掉
方案生成依赖知识库召回相似案例。上线前我一直用有内容的库测,没想过检索不到会怎样。后来换了个冷门行业,top_k召回为空,方案生成节点直接没输出。现在Prompt里内嵌了一段方法论兜底,检索不到就按方法论生成,同时在输出里注明没有案例依据。
7.代码节点的变量多写了字段
variables里只留variable和value_selector,多加label、type这类字段会出非标准字段问题。我当时是照着别的节点的写法顺手加的,排查了一阵。
8.APIKey放错了地方
图省事放在/tmp,容器一重建就没了,后来挪进.env。
可复制建议
第一,先写Prompt文档再搭工作流。三条工作流共用一段系统约束,改一次全部生效。反过来边搭边调,最后三个节点的口径都不一样。
第二,凡是会存进数据库的分数和结论,都用代码节点兜一遍。模型的活是生成理由,不是做算术和下判断。
第三,每条依赖外部数据的路径都要有降级。知识库会空,接口会超时,模型会返回乱码。没有兜底的时候,断的一定是你没测过的那条。
合规提醒
涉及金额、分成比例、法律条款,以及医疗、金融、教育这类要资质的行业,我在输出里强制标注「需人工审核」。
有个维度叫合作意愿,模型是基于历史合作记录估的。MVP阶段根本没有这个数据,所以它给的数字只是个猜测,我在报告里写清楚了。企业信息也是人工手填的,没有接工商数据源。
AI在这里的角色是给选项,拍板的是顾问。想让它替人做判断,方案会看起来很对,落地全是问题。