基于Python的CrewAI多智能体协同写作助手
- 完整代码下载:https://download.csdn.net/download/qq_36047595/92043387
1. CrewAI介绍
- 官网https://docs.crewai.org.cn/introduction
- CrewAI是一个多智能体协同框架,适合用于流程清晰,层级分明的场景(可参考另一篇博文【一文读懂LangChain、LlamaIndex、LangGraph、CrewAI、MetaGPT、AutoGen、CAMEL、Agent Squad、LangSmith等AI框架】辅助理解)
下面以CSDN博客写作助手为例进行讲解:
2.大模型定义
- 官方介绍:https://docs.crewai.org.cn/how-to/llm-connections
本质上是基于LiteLLM开发的,
- 和平常使用大语言模型不一样的是model这里需要加上前缀方便识别来源,ollama的就是:ollama/glm4:latest,参考:https://docs.litellm.com.cn/docs/providers/ollama
- 如果有不在里面的提供商,如智谱清言,只要符合OpenAI规范,就可以直接使用openai模型设置方式。https://docs.litellm.com.cn/docs/providers/openai
2.1.通用示例
这里以智谱清言GLM-4-Flash免费模型示例
(获取地址:https://bigmodel.cn/usercenter/proj-mgmt/apikeys)
ai_key="你的key"
os.environ["OPENAI_API_KEY"] = ai_key
# 这里使用智谱免费的glm-4-flash模型
llm = LLM(base_url="https://open.bigmodel.cn/api/paas/v4",api_key=ai_key,model="openai/glm-4.5-flash",temperature=0.3)
2.2.Ollama示例
ai_key="你的key"
os.environ["OPENAI_API_KEY"] = ai_key
# 改为自己的ip,端口
llm = LLM(base_url="http://localhost:11434",api_key="sk-fastgpt",# 改为自己想要的模型model="ollama/glm4:latest",temperature=0.3)
3. 智能体层:分工明确的写作团队
- 内容策划智能体
planner = Agent(role="内容策划专员",goal="围绕主题“{topic}”,策划一篇发布于 CSDN(https://www.csdn.net/)的引人入胜、事实准确且结构清晰的博客文章。",backstory=("你是一名经验丰富的内容策划专员,专注于为中文技术读者策划高质量、有深度的博客内容。""当前任务是为即将撰写的主题文章“{topic}”制定一份详尽的内容大纲。""你的策划需帮助目标受众深入理解该主题,获取可靠信息,从而做出明智判断或决策。""你策划的大纲将作为内容创作专员撰写完整文章的核心依据。""请确保内容逻辑严谨、主题聚焦、子主题全面,并采用中文进行规划与输出。"),llm=llm,# 输出中间过程verbose=True)
- 内容创作智能体
writer = create_agent(role="内容创作专员",goal="依据策划大纲,撰写一篇发布于 CSDN(https://www.csdn.net/)的深度评论文章。文章需观点鲜明、事实准确、论据充分,并对开发者社区具有启发性。",backstory=("你是一名资深技术评论员,长期面向 CSDN 读者撰写新观点文章。""内容策划师已为你提供详尽的大纲与背景资料。""写作时,请以大纲为主线,确保技术深度与逻辑严密;""同时给出独立思考与主观见解,并在文中明确标注「本文观点属于作者个人看法,非客观事实陈述」。""全文使用中文,风格兼顾专业性与可读性,避免过度营销或夸大。"))
- 内容编辑智能体
editor = create_agent(role="内容编辑专员",goal="对创作专员提交的评论文章进行技术事实核查、结构优化与风格润色,使其符合 CSDN 社区发布规范与阅读体验。",backstory=("你是一名经验丰富的技术内容编辑,负责终审即将发布在 CSDN 的文章。""你需要:""1) 校验技术数据、引用与代码示例的准确性;""2) 确保观点段落提供多元视角,避免片面或重大争议;""3) 调整标题、摘要、分段与代码排版,提升开发者阅读体验;""4) 输出一份可直接发布的 Markdown 终稿。""工作语言为中文,编辑过程保持作者原意不变。"))
4. 任务层:环环相扣的写作流水线
- 任务一:策划选题与大纲
plan = Task(description=("1. 检索过去 12 个月内关于「{topic}」的技术趋势、主流工具链、大厂实践与社区热点(GitHub / 论文 / 博客 / 资讯)。\n""2. 界定目标读者画像:工作 1–5 年的后端 / 前端 / 全栈 / AI 工程师,关注落地实践与性能优化,痛点为「踩坑成本高、资料碎片化」。\n""3. 输出一份可直接落地的内容大纲:"" - 标题(≤30 字,含核心 SEO 关键字)"" - 摘要(≤120 字,突出收益点)"" - 3–4 个一级章节,每章 2–3 个子节点,至少 50% 节点附「可运行代码片段 / 性能数据对比」占位符"" - 结尾 CTA:开源仓库地址 / 讨论区互动问题""4. 提供 5–7 个高检索量中文关键词(CNZZ/Google Trends 可查),并给出 3 份权威引用(官方文档 / 顶级会议论文 / 一线大厂技术博客)。"),expected_output="一份 Markdown 内容策划书:含受众画像、大纲、关键词列表、参考文献链接。",agent=planner,)
- 任务二:撰写文章初稿
- 描述:“根据任务一产出的大纲,撰写完整的文章内容。”
- 期望输出:一篇包含所有章节、代码示例和解释的完整Markdown文档。
- 分配智能体:
内容创作
代码参考任务一
- 任务三:审核与润色文章
- 描述:“对初稿进行技术校对、语言润色和格式规范化,使其达到发布标准。”
- 期望输出:最终可发布的、高质量的Markdown文档。
- 分配智能体:
内容编辑
代码参考任务一
5. 流程层
采用顺序流程是最自然的选择。写作过程本身就是一个强依赖的流水线:先策划,再创作,最后编辑。后一个任务严重依赖于前一个任务的输出结果。
crew = Crew(agents=[planner, writer, editor],tasks=[plan, write, edit],verbose=True)
6.工作流程简述
-
输入:用户提供一个主题:基于python crewai框架设计一套涵盖内容策划、内容创作、内容编辑的多智能体写文章ai助手。
-
启动:流程被触发,
内容策划
智能体开始工作。
-
策划阶段:
内容策划
使用搜索工具和CSDN趋势,分析并生成一份文章大纲。(创作阶段和编辑阶段和下面类似,都会完整经历Agent Started——Agent Final Answer——Task Completion三个阶段)
-
创作阶段:大纲传递给
内容创作
智能体,它根据大纲查阅文档、编写代码和文字,产出初稿。
-
编辑阶段:初稿传递给
内容编辑
智能体,它进行严格的质量检查和完善,产出最终稿。
-
输出:系统交付一篇立即可发布的高质量CSDN技术博客。
7.总结
从AI输出的内容来看,相比单智能体明显高了好几个level,文章结构清晰完整,代码逻辑也涵盖在内,甚至包括了测试、对比、意义总结、展望、引文,是一篇不错的小论文了,改改还是大部分可用的,后续也可以修改一下提示词,让它输出的内容表达上更贴近大家的写作习惯