1、创建一个新的 CrewAI 项目 marketing_strategy
crewai create crew marketing_strategy
cd marketing_strategy
.env文件
MODEL=gpt-4o
OPENAI_API_KEY=你的api_key
SERPER_API_KEY=你的SERPER api_key
2、配置代理
agents.yaml文件。
lead_market_analyst:
role: >
市场首席分析师 # 角色名称:负责市场和竞品分析
goal: >
对产品和竞争对手进行深入分析,提供有洞察力的分析报告,
为营销策略提供指导。 # 目标:产出具有深度的市场洞察
backstory: >
作为一家顶级数字营销公司的市场首席分析师,你擅长深入解析在线商业环境,精准把握市场动态。 # 背景:具有在线商业洞察的专家
chief_marketing_strategist:
role: >
首席营销策略师 # 角色名称:负责整合市场洞察形成营销策略
goal: >
综合产品分析中获得的深刻洞察,制定卓越的营销策略。 # 目标:从分析中形成策略
backstory: >
你是顶尖数字营销机构的首席营销策略师,以定制化、高效的策略
设计闻名,能够引导客户走向成功。 # 背景:定制策略专家,带领团队实现市场突破
creative_content_creator:
role: >
创意内容创作者 # 角色名称:负责创作社交媒体内容
goal: >
为社交媒体活动开发引人注目且创新的内容,重点打造高影响力广告文案。 # 目标:创作具吸引力的广告内容
backstory: >
你是顶级数字营销公司的创意内容创作者,擅长将策略转化为
引人入胜的故事与视觉内容,引发受众共鸣并激发行动。 # 背景:文字与视觉双优的内容创作者
chief_creative_director:
role: >
首席创意总监 # 角色名称:负责创意质量把控
goal: >
监督团队产出内容的质量,确保与产品目标一致;
对内容进行评审、批准、提出疑问或分配后续工作。 # 目标:监督、评估并保障最终创意输出质量
backstory: >
你是顶尖数字营销机构的首席内容官,专注于品牌打造,
致力于引导团队为客户打造最具影响力的内容。 # 背景:创意方向掌控者,领导内容策略执行
3、配置任务
tasks.yaml文件。
research_task:
description: >
针对 {customer_domain} 领域,进行全面的客户及其竞争对手调研。 # 描述:说明要研究的主体和背景
请确保你找到的所有信息都与当前年份(2025年)相关且有价值。 # 补充:强调时间相关性与信息有效性
我们当前正在与他们合作的项目是:{project_description}。 # 提示上下文:研究应考虑当前项目情况
expected_output: >
一份关于客户及其客户和竞争对手的完整报告, # 输出要求:报告必须包含多维度内容
包括其人口统计数据、偏好、市场定位和受众参与情况。 # 输出要素:人口数据、偏好、定位、参与度
project_understanding_task:
description: >
了解项目 {project_description} 的详细情况及其目标受众。 # 描述:任务目标是掌握项目背景和受众
请查看所提供的所有材料,并在需要时补充其他资料。 # 补充:强调资料收集的重要性
expected_output: >
一份详细的项目摘要以及目标受众画像。 # 输出要求:项目总结和受众描述
marketing_strategy_task:
description: >
为客户 {customer_domain} 的项目 {project_description} 制定一份全面的营销策略。 # 描述:需要制定具体项目的营销策略
请结合调研任务与项目理解任务中的洞察信息,生成高质量的策略内容。 # 提示:利用已有任务的输出做支撑
expected_output: >
一份详细的营销策略文档,需包含目标、目标受众、核心信息传递、建议战术, # 输出要素:基本结构说明
并务必列出策略名称、实施战术、渠道选择及关键绩效指标(KPIs)。 # 补充:细化输出内容的组成部分
campaign_idea_task:
description: >
为项目 {project_description} 开发富有创意的营销活动创意方案。 # 描述:任务是创作营销 campaign 点子
确保创意具有创新性、吸引力,并与整体营销战略保持一致。 # 补充:要求创意需契合整体方向
expected_output: >
10个营销活动创意列表,每个创意需包含简要说明及预期影响。 # 输出要求:数量限定为10个,附带简要说明和影响评估
copy_creation_task:
description: >
基于已批准的项目 {project_description} 营销活动创意,撰写对应的营销文案。 # 描述:基于 campaign 方案创作文案
确保文案具备吸引力、表达清晰,并贴合目标受众。 # 补充:文案质量标准
expected_output: >
每个营销活动创意对应的一条营销文案。 # 输出要求:与创意一一对应,产出具体文案
4、配置团队
crew.py文件。
from typing import List
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
# 如果你有自定义工具,可以取消注释下方这行,并替换路径
# from marketing_posts.tools.custom_tool import MyCustomTool
# 官方提供的工具,可用于网页搜索和抓取
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
from pydantic import BaseModel, Field
# ----------------------------
# 定义输出数据结构(模型)
# ----------------------------
class MarketStrategy(BaseModel):
"""市场策略模型"""
name: str = Field(..., description="市场策略名称")
tatics: List[str] = Field(..., description="该策略中使用的战术列表")
channels: List[str] = Field(..., description="该策略中使用的渠道列表")
KPIs: List[str] = Field(..., description="用于衡量策略效果的关键指标列表")
class CampaignIdea(BaseModel):
"""营销活动创意模型"""
name: str = Field(..., description="营销活动创意的名称")
description: str = Field(..., description="对该创意的简要描述")
audience: str = Field(..., description="该创意面向的目标受众")
channel: str = Field(..., description="该创意使用的传播渠道")
class Copy(BaseModel):
"""文案模型"""
title: str = Field(..., description="文案标题")
body: str = Field(..., description="文案正文内容")
# ----------------------------
# 定义 CrewAI 的核心类
# ----------------------------
@CrewBase
class MarketingPostsCrew():
"""营销内容生成团队(MarketingPosts crew)"""
# 代理人配置文件路径(来自 YAML)
agents_config = 'config/agents.yaml'
# 任务配置文件路径(来自 YAML)
tasks_config = 'config/tasks.yaml'
# ------------------------
# 定义代理人(Agents)
# ------------------------
@agent
def lead_market_analyst(self) -> Agent:
"""市场首席分析师,擅长使用搜索与爬取工具分析市场"""
return Agent(
config=self.agents_config['lead_market_analyst'],
tools=[SerperDevTool(), ScrapeWebsiteTool()],
verbose=True, # 显示任务执行详细信息
memory=False, # 不启用记忆
)
@agent
def chief_marketing_strategist(self) -> Agent:
"""首席营销策略师,负责战略制定"""
return Agent(
config=self.agents_config['chief_marketing_strategist'],
tools=[SerperDevTool(), ScrapeWebsiteTool()],
verbose=True,
memory=False,
)
@agent
def creative_content_creator(self) -> Agent:
"""创意内容创作者,负责文案和创意生成"""
return Agent(
config=self.agents_config['creative_content_creator'],
verbose=True,
memory=False,
)
# ------------------------
# 定义任务(Tasks)
# ------------------------
@task
def research_task(self) -> Task:
"""执行市场调研任务,由分析师负责"""
return Task(
config=self.tasks_config['research_task'],
agent=self.lead_market_analyst()
)
@task
def project_understanding_task(self) -> Task:
"""理解项目背景与目标受众,由策略师负责"""
return Task(
config=self.tasks_config['project_understanding_task'],
agent=self.chief_marketing_strategist()
)
@task
def marketing_strategy_task(self) -> Task:
"""制定完整的市场营销策略,输出为 MarketStrategy 数据模型"""
return Task(
config=self.tasks_config['marketing_strategy_task'],
agent=self.chief_marketing_strategist(),
output_json=MarketStrategy # 将任务输出结构化为 MarketStrategy 模型
)
@task
def campaign_idea_task(self) -> Task:
"""生成创意营销活动点子,输出为 CampaignIdea 模型"""
return Task(
config=self.tasks_config['campaign_idea_task'],
agent=self.creative_content_creator(),
output_json=CampaignIdea
)
@task
def copy_creation_task(self) -> Task:
"""基于策略和创意,撰写具体营销文案,输出为 Copy 模型"""
return Task(
config=self.tasks_config['copy_creation_task'],
agent=self.creative_content_creator(),
# 上下文依赖:需要参考策略和创意内容
context=[self.marketing_strategy_task(), self.campaign_idea_task()],
output_json=Copy
)
@task
def reporting_task(self) -> Task:
return Task(
config=self.tasks_config['copy_creation_task'], # type: ignore[index]
agent=self.creative_content_creator(),
output_file='report-01.md'
)
# ------------------------
# 组装完整 Crew
# ------------------------
@crew
def crew(self) -> Crew:
"""构建完整的营销内容生成团队流程"""
return Crew(
agents=self.agents, # 所有由 @agent 自动生成的代理人
tasks=self.tasks, # 所有由 @task 自动生成的任务
process=Process.sequential, # 任务按顺序执行
verbose=True, # 输出执行过程日志
# process=Process.hierarchical, # 可选:层级式任务流程,适合需要协调的任务结构
)
5、配置主函数
main.py文件
# 导入系统参数模块
import sys
# 导入自定义的 Crew 定义
from marketing_strategy.crew import MarketingPostsCrew
def run():
"""
执行主流程(Kickoff)
调用 crew.kickoff(inputs) 方法,执行任务流程。
"""
# 定义输入信息,会自动插入到任务和代理配置中(通过变量替换)
inputs = {
'customer_domain': '汽车销售行业', # 客户所属行业或领域
'project_description': """
特斯拉 Model Y 是引领未来出行方式的中型智能 SUV,融合了前瞻科技与极简美学的典范之作。整车以全电驱动系统为核心,零排放、强动力,瞬时响应,带来超越燃油车的加速体验。
车身线条流畅优雅,极具空气动力学设计,续航效率卓越。车内则配备先进的 AI 自动驾驶辅助系统与 15 英寸触控中控屏,营造出科技感与人性化完美交融的驾驶空间。
本次营销活动将面向新能源汽车消费人群,具有技术背景的决策者,
突出销量、创新、新能源 和 特斯拉 Model Y 车型的变革潜力。
客户领域:特斯拉 Model Y 销售方案
项目概述:创建全面的营销活动,提升 特斯拉 Model Y 在客户中的认知度与采纳率。
"""
}
# 创建并运行 Crew,启动完整的任务流程
MarketingPostsCrew().crew().kickoff(inputs=inputs)
def train():
"""
训练流程(用于迭代学习或调优任务逻辑)
使用 CLI 参数指定迭代次数:如 `python main.py 5`
"""
inputs = {
'customer_domain': '汽车销售行业', # 客户所属行业或领域
'project_description': """
特斯拉 Model Y 是引领未来出行方式的中型智能 SUV,融合了前瞻科技与极简美学的典范之作。整车以全电驱动系统为核心,零排放、强动力,瞬时响应,带来超越燃油车的加速体验。
车身线条流畅优雅,极具空气动力学设计,续航效率卓越。车内则配备先进的 AI 自动驾驶辅助系统与 15 英寸触控中控屏,营造出科技感与人性化完美交融的驾驶空间。
本次营销活动将面向新能源汽车消费人群,具有技术背景的决策者,
突出销量、创新、新能源 和 特斯拉 Model Y 车型的变革潜力。
客户领域:特斯拉 Model Y 销售方案
项目概述:创建全面的营销活动,提升 特斯拉 Model Y 在客户中的认知度与采纳率。
"""
}
try:
# 从命令行参数读取迭代次数并启动训练模式
MarketingPostsCrew().crew().train(n_iterations=int(sys.argv[1]), inputs=inputs)
except Exception as e:
# 捕获并抛出错误信息,便于调试
raise Exception(f"训练过程中发生错误: {e}")
6、运行项目
# 安装依赖
crewai install
# 启动项目
crewai run