需一次性安装crewai及其tools组件,严格按顺序导入工具并配置四类agent角色与依赖任务链,最后以sequential流程执行crew任务。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要把零散的PDF、网页、笔记等原始资料自动整理成结构化摘要,再生成一篇可发布的专业文章,整个过程不想手动复制粘贴、反复切换窗口。
准备环境与基础组件
打开终端,执行 pip install crewai 'crewai[tools]'。这一步必须一次性装全,【漏装 crewai[tools] 会导致后续搜索和文件读取工具全部失效】。
创建一个新文件夹,命名为 content_crew,进入该目录后新建 main.py 文件。
在 main.py 开头写上 from crewai import Agent, Task, Crew, Process 和 from crewai_tools import SerperDevTool, PDFSearchTool, DOCXSearchTool —— 工具导入顺序不能颠倒,PDFSearchTool 必须在 DOCXSearchTool 前面,否则读取混合格式文档时会跳过 PDF 内容。
定义四个核心Agent角色
策划Agent负责定调子、划重点:role 设为“内容架构师”,goal 写“根据原始资料提炼核心观点并生成三级大纲”,backstory 加一句“习惯用思维导图梳理逻辑,拒绝平铺直叙”,tools 只配 DOCXSearchTool —— 因为它只处理你已有的参考文档,不碰网络或PDF。
调研Agent专攻外部信息补全:role 是“跨源验证员”,goal 写“针对大纲中存疑或空白处,从权威网站获取最新数据并交叉比对”,backstory 强调“警惕过时链接和营销话术”,tools 必须同时带上 SerperDevTool 和 WebsiteSearchTool,且 max_iter 设为 8 —— 【超过10次迭代会触发Serper免费额度熔断,导致后续任务全部卡死】。
写作Agent不写初稿,只做“拼贴重构”:role 定为“结构化文本工程师”,goal 是“将大纲、验证数据、原始PDF摘录按逻辑流重组为连贯段落”,backstory 写“擅长用过渡句弥合信息断层,厌恶冗余形容词”,tools 只挂 PDFSearchTool —— 它要直接从你扔进文件夹的PDF里抽原文句子,不是靠LLM编造。
校对Agent最后守门:role 设为“语义校验员”,goal 是“检查事实一致性、术语准确性及段落衔接流畅度”,backstory 加“曾参与三本技术手册审校,对单位符号和版本号零容忍”,tools 不配任何外部工具,allow_delegation=False —— 这个环节绝不交给别人。
构建带依赖的任务链
第一步:策划任务 → 指定 agent=策划Agent,description 写“分析 ./sources/ 下所有 DOCX 文件,输出含章节标题、关键论点、待验证缺口的 Markdown 大纲”,expected_output 必须明确为“严格遵循 # 一级标题 → ## 二级标题 → ### 三级标题 格式,每个三级标题后跟一行‘缺口:[具体疑问]’”。
第二步:调研任务 → agent=调研Agent,description 写“针对上一步输出中所有‘缺口:’行,逐条检索并返回带来源网址的核实结论”,context=[策划任务] —— 这个参数不能省,否则调研Agent根本看不到缺口列表。
第三步:写作任务 → agent=写作Agent,description 写“融合大纲、调研结论及 ./sources/ 目录下所有 PDF 的匹配段落,生成完整初稿”,context=[策划任务, 调研任务] —— 注意这里要同时引用两个前置任务,缺一个都会导致PDF内容丢失或逻辑断裂。
第四步:校对任务 → agent=校对Agent,description 写“通读初稿,标出事实错误、术语误用、逻辑跳跃处,重写问题段落”,context=[写作任务],expected_output 设为“返回纯文本,仅包含修改后的段落,每段前加【修正段落X】标识”。
组装Crew并启动执行
创建 Crew 实例时,agents 参数填入四个Agent的变量名,tasks 参数按策划→调研→写作→校对顺序排列,process=Process.sequential —— 不要用 hierarchical,否则校对Agent可能被写作Agent临时委派去查新资料,破坏质量闭环。
执行 crew.kickoff(inputs={'topic': '大模型推理优化技术演进'}),topic 值必须传字符串,不能传字典或空值,否则所有Agent的 goal 中 {topic} 占位符不会替换,任务直接失败。











