基于 CrewAI 多智能体框架,手把手构建一个自动化写作应用实战

明月皓皓,星河灿烂,中秋佳节,团圆美满。祝大家中秋节快乐!听说台风要来了,也不知道还能不能吃着月饼赏个月?

老牛同学在上文(Agent(智能体)和 MetaGPT,一句话实现整个需求应用代码)和大家一起初步理解了什么是 Agent(智能体)、它具备哪些特性等基础知识,然后想着使用 MetaGPT 这个国内开源的多智能体系统,用一句话让它帮忙写一个贪吃蛇小游戏程序,体验一把当“老板”的乐趣。我们的需求确实是用一句话给了 MetaGPT,只可惜“老板”的乐趣是没有体验到,MetaGPT 倒是给我们留了一个有 Bug 的程序,老牛同学又得做回程序员,修 Bug 去!

MetaGPT 这种端到端的多智能体系统设计本身很有吸引力,但是对它所依赖的基础大语言模型(大模型)有很强的诉求,否则根据一句话的需求产出的结果很难尽人意。老牛同学感觉大模型参数量得 100B 起步才会较好的效果,且需求越复杂,对大模型的要求就会越高。

今天,老牛同学和大家一起看看另外一个多智能体框架 CrewAI,我们使用它,可以像搭乐高积木一样,搭建自己工作流。与 MetaGPT 相比,CrewAI 更加轻量化,定制的灵活性更高,因此老牛同学称它为框架。

大语言模型最擅长的是自然语言生成,那么我们本次就来使用 CrewAI 搭建一个自动化写作系统,本文主要包括以下内容:

  1. CrewAI 框架基本介绍
  2. 本地安装 CrewAI 框架依赖
  3. 使用 CrewAI 逐步地搭建我们的自动化写作系统

本文所有涉及到的源代码,不出意外的话,源代码地址老牛同学会放在评论区~

CrewAI 框架基本介绍

CrewAI 官方开源地址:https://github.com/crewAIInc/crewAI

CrewAI 是一个多智能体框架,主要为角色扮演中的智能体提供自动化配置,以促进智能体之间的合作,共同解决复杂问题。

CrewAI 主要由Agent(智能体)、Task(任务)、Tool(工具)和Crew(团队)模块组成。智能体是具有角色和背景故事、目标和记忆的团队成员;任务是智能体需要完成的任务;工具是智能体使用的设备,用于辅助完成任务;团队则是智能体和任务相结合的容器,是智能体协调合作执行任务的实际场所,智能体由它共同完成实际任务。

CrewAI 框架比较灵活,它不仅支持OpenAI标准 API,还支持Ollama标准 API,它具备如下核心特征:

  1. 角色定制代理:可以根据不同的角色、目标和工具来量身定制代理。
  2. 自动任务委派:代理之间能够自主地分配任务和进行交流,有效提升解题效率。
  3. 任务管理灵活性:可以根据需要自定义任务和工具,并灵活地指派给不同代理。
  4. 流程导向:目前系统仅支持按顺序执行任务,但更加复杂的如基于共识和层级的流程正在研发中。

本地安装 CrewAI 框架依赖

工欲善其事,必先利其器,我们通过Miniconda管理 Python 虚拟环境,Miniconda的安装和使用可以参考老牛同学之前的文章:大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama 等)

# Python虚拟环境名:CrewAI,版本号:3.10
conda create -n CrewAI python=3.10 -y# 激活虚拟环境
conda activate CrewAI

接下来,我们就可以安装 CrewAI 框架依赖了:

pip install crewai

至此,CrewAI 框架依赖就安装好了,我们接下来使用它来构建一个自动化协作应用。

使用 CrewAI 搭建自动化写作系统

前面提到,智能体依赖的大模型既支持 OpenAI 标准接口,也支持 Ollama 标准接口。老牛同学为了方便演示,使用 Ollama 本地部署Qwen2-7B大模型,有关 Ollama 详细介绍和使用,参见老牛同学之前的文章,本文不在赘述:Ollama 完整教程:本地 LLM 管理、WebUI 对话、Python/Java 客户端 API 应用

第一步: 明确我们的需求】

我们在来想当一次“老板”,还是以儿童绘本故事为例,我们只提供一个主题:由第 1 个智能体根据主题产出绘本故事的构思内容,然后由第 2 个智能体根据第 1 个智能体的构思内容,产出故事内容。

因此,我们需要有 2 个智能体(即:需要定义 2 个角色),分别是:故事内容构思者,和故事内容协作者;他们各自都有一个任务,分别是:产出故事内容构思,和根据构思编写故事

接下来,我们就开始实现我们的智能体了,在此之前,我们先引入CrewAI核心模块类,同时配置大模型:

第二步: 定义构思者角色的智能体】

对于构思者智能体,它的定义如下:

  • 我们要给它设定一个与任务相符的角色(role):为了简单,我们就设定为构思者
  • 我们为这个智能体设定了一个目标(goal):要根据给定的主题({topic}),产出儿童绘本故事内容创意
  • 我们再为规划者智能体设定一个背景故事(backstory):我们尽可能多地设定相关的上下文,比如它的职责、对它产出物的要求等。
  • 我们还要设置一些其它属性:allow_delegation 代表这个智能体不允许把工作委托给其他的智能体;verbose 代表把它的工作详细记录下来,这样我们可以看到它在执行内部任务时是如何运行的

第三步: 定义写作者角色的智能体】

对于写作者智能体来说,它的目标就是:根据构思者所提供的儿童绘本故事创意来编写故事内容。

第四步: 定义每个智能体的任务】

上面我们定义了 2 个智能体角色,现在给他们分别定义 1 个任务:

构思者写作者的任务,均包含了描述、期望输出和分配的智能体等 3 个属性:

  • 描述(description):期望智能体能做什么
  • 预期的输出(expected_output):类似一种强制机制,明确任务的产出结果
  • 智能体(agent):即为这个任务分配智能体

第五步: 让智能体和任务协同工作】

智能体是按照顺序执行任务的,上一个任务的输出,会被作为下一个任务的输入。特别注意:我们提供了topic上下文参数,它在智能体和任务中可以通过{topic}使用。

运行程序,我们可以逐步看到构思者智能体的运行过程内容:

接下来,可以看到写作者智能体的运行过程内容:

最终,所有的智能体执行完成,产出的目标故事内容:

最后:CrewAI 总结说明

通过以上示例,我们了解了 CrewAI 的三个核心模块:Agent智能体,Task任务,Crew团体或者称容器,容器把他们组合在一起。

  • Agent: 一般情况下,一个Agent只做一件事,明确智能体的目标和期望;当然,一个Agent可以执行多项任务。
  • Task: 无论是创建 Agent 还是 Task 都需要明确自己的职责,以及对自己的期望。
  • Crew: 最终把任务,按照串行或并行的方式组织起来。

vLLM CPU 和 GPU 模式署和推理 Qwen2 等大语言模型详细教程

基于 Qwen2/Lllama3 等大模型,部署团队私有化 RAG 知识库系统的详细教程(Docker+AnythingLLM)

使用 Llama3/Qwen2 等开源大模型,部署团队私有化 Code Copilot 和使用教程

基于 Qwen2 大模型微调技术详细教程(LoRA 参数高效微调和 SwanLab 可视化监控)

MiniCPM-V 2.6 面壁“小钢炮”,多图、视频理解多模态模型,部署和推理实战教程

微信公众号:老牛同学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1535607.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【hot100-java】【环形链表】

R8-链表篇 思路: 使用快慢指针,快指针走两步,慢指针走一步。追上,有环。 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* n…

fuaeehfnklae

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

神经网络通俗理解学习笔记(1)

神经网络通俗理解学习笔记(1) 神经网络原理激活函数前向传播和反向传播多层感知机代码实现加载数据网络结构损失函数优化器训练测试保存 回归问题一元线性回归多元线性回归多项式回归 线性回归代码实现数据生成设置超参数初始化参数可视化Pytorch模型实现…

43.哀家要长脑子了!

1.39. 组合总和 - 力扣(LeetCode) 对于这类寻找所有可行解的问题,都可以尝试使用 [搜索回溯] 的方法。以下是朴素不减脂的方法,我昨天吃了个干煸炒面,巨朴素。。。一点都不减脂,但是很好吃~~~ class Solut…

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED 思科 Catalyst 9000 交换产品系列 IOS XE 系统软件 请访问原文链接:https://sysin.org/blog/cisco-catalyst-9000/,查看最新版。原创作品,转载请保留出处。 作者主页&…

双指针的用法以及示例

当然可以!双指针(Two Pointers)是一种常用的算法技巧,特别适用于处理数组或链表等线性数据结构的问题。以下是双指针用法的总结: 双指针用法总结 基本概念: 双指针技术使用两个指针在数据结构上进行遍历&a…

河海大学《2020年+2021年827自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《25届河海大学827自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2020年复试真题 2021年初试真题 Part1:完整版真题 2020年复试真题 2021年…

GEO数据的下载和处理|GEO数据转换为Gene symbol|GEO注释文件提取symbol|查看样本标签|查看GEO数据疾病或正常|生物信息基础

GEO数据的下载和处理|GEO数据转换为Gene symbol|GEO注释文件提取symbol|查看样本标签|查看GEO数据疾病或正常|生物信息基础 数据的下载和处理 首先在GEO数据库中通过GSE ID找到相关数据,然后下载txt文件。 数据读取与处理。 #设置工作路径,也就是你的…

CCS6 软件及仿真器驱动安装

1 CCS6 软件获取 TI 的官网上下载: http://www.ti.com/tools-software/ccs.html 注意 首先 win32 是 CCS 安装包支持 64 位系统,我们电脑也是 64 位系统也是安装的 win32 的安装包,另外 TI 只提供 win32 的安装包,无 win64 的安装包。 2 CCS6 软件安装 CCS如果获取提供的…

获取无人机经纬度是否在指定禁飞区内

1. 计算公式: (AB X AE ) * (CD X CE) >= 0 && (DA X DE ) * (BC X BE) >= 0 参考: 判断点是否在矩形框(多边形)内_qt opencv 判断一点是否在矩形内-CSDN博客 2.测试结果: 3.实现完整代码: #include<cstd

Python数据分析 Pandas基本操作

Python数据分析 Pandas基本操作 一、Series基础操作 ​ Series是pandas的基础数据结构&#xff0c;它可以用来创建一个带索引的一维数组&#xff0c;下面开始介绍它的基础操作 1、创建Series 1&#xff09;使用数据创建Series&#xff1a; import pandas as pd pd.Series(1…

【用Java学习数据结构系列】用堆实现优先级队列

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…

RK3562/3588系列之6—yolov5模型的部署

RK3562/3588系列之6—yolov5模型的部署 1.yolov5模型训练2.训练好的模型转成onnx格式3.模型从onnx格式转RKNN3.1 onnx2rknn.py3.2 onnx2rknn.py3.3 直接使用rknn.api3.4 rknn_model_zoo中的转换代码3.5 LubanCat-RK系列板卡官方资料4.RK NPU c++推理4.1交叉编译4.2 开发板执行编…

整数在内存中的存储原码反码补码

目录 1.整数在内存中以二进制的形式存在 1.1&#xff08;正数存储情况&#xff09; 1.2 负数存储情况 1.3整数的补码如何得到原码 2.无符号整数的原反补码 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&am…

ChatGPT提示词-中文版(awesome-chatgpt-prompts中文版)

原是Github上110.6K星的项目&#xff1a;GitHub - f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better. 我翻译成了中文需要自提 我用夸克网盘分享了「Chat GPT提示词.csv」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看…

为解决bypy大文件上传报错—获取百度云文件直链并使用Aria2上传文件至服务器

问题描述 一方面组内的服务器的带宽比较小&#xff0c;另一方面使用bypy方式进行大文件(大于15G)上传时会报错&#xff08;虽然有时可以成功上传&#xff0c;但是不稳定&#xff09;&#xff1a; 解决方式 总体思路: 获得云盘需要下载文件的直链复制直链到服务器中使用自带…

CRM如何助力科技服务机构突破业务瓶颈?

在当今知识经济时代&#xff0c;科技服务机构面临着复杂的业务环境和多样化的客户需求。客户管理系统&#xff08;CRM&#xff09;在这个领域的应用正逐渐成为机构提升运营效率、优化客户服务的关键。 科技服务行业的业务特点 知识产权代理行业具有高度的专业性和复杂性。其业…

[记录一个bug]流媒体服务瓶颈排查

一、抛砖 最近有一个服务器上的rtmp直播服务,搭载了1k路后,无法支撑高码率如6M 8M的视频推流,推流会导致掉帧到个位数。但是看了top和vmstat,没发现明显的瓶颈。程序的单进程多线程,但是在另一台配置更低的服务器上,却没问题。 所以这里干脆记录下瓶颈排查步骤和方法吧。…

跟《经济学人》学英文:2024年09月14日这期 Demand for high-end cameras is soaring

Demand for high-end cameras is soaring The ubiquity of smartphones has helped ubiquity: 美 [juːˈbɪkwəti] 到处存在&#xff1b;遍在 注意发音 原文&#xff1a; Buying a Leica feels like buying a piece of art. Made in Germany, the cameras are sold in th…

《JavaEE进阶》----15.<Spring Boot 日志>

本篇文章将记录我学习SpringBoot日志 1.日志文件的用途 2.SpringBoot日志文件的配置 3.用lombook依赖引入Slf4j注解&#xff0c;从而引入log对象。方便我们打印日志。 一、日志的作用 日志主要是为了发现问题、分析问题、定位问题。除此之外、日志还有许多其他的用途。 1.系统监…