当前位置: 首页 > article >正文

CrewAI Community Version(一)——初步了解以及QuickStart样例

目录

  • 1. CrewAI简介
    • 1.1 CrewAI Crews
    • 1.2 CrewAI Flows
    • 1.3 Crews和Flows的使用情景
  • 2. CrewAI安装
    • 2.1 安装uv
    • 2.2 安装CrewAI CLI
  • 3. 官网QuickStart样例
    • 3.1 创建CrewAI Crews项目
    • 3.2 项目结构
    • 3.3 .env
    • 3.4 智能体角色及其任务
      • 3.4.1 agents.yaml
      • 3.4.2 tasks.yaml
    • 3.5 crew.py
    • 3.6 main.py
    • 3.7 本地运行
  • 参考

1. CrewAI简介

  CrewAI是一个精简、快如闪电的Python框架,完全独立于LangChain或其他Agent框架。它为开发者提供了高层次简洁性与精准低层次控制的双重优势,是创建适用于任何场景的自主AI代理的理想框架,存在如下的两种模式:
  1. CrewAI Crews:优化自主性与协作智能,使您能够创建具备特定角色、工具、目标的智能体团队。
  2. CrewAI Flows:支持细粒度的事件驱动控制,通过单一LLM调用实现精准任务编排,并原生支持智能体团队协作。

1.1 CrewAI Crews

  下图源自CrewAI。
在这里插入图片描述

组成描述作用
Crew最顶层的组织1. 管理智能体团队
2. 监督工作流
3. 保证协作
4. 输出结果
AI Agents专业的团队成员1. 有特定的角色
2. 使用指定的工具
3. 可以委派任务
4. 自主决策
Process工作流管理系统1. 定义协作模式
2. 控制任务
3. 管理交互
4. 保证高效执行
Tasks个人任务1. 有明确的目标
2. 使用特定的工具
3. 输入到更大的Process
4. 产生可行的结果

1.2 CrewAI Flows

  下图源自CrewAI。
在这里插入图片描述

组成描述作用
Flow结构化工作流安排1. 管理执行路径
2. 处理state
3. 控制任务顺序
4. 保证执行可靠
Events工作流行动的触发器1. 启动特定Processes
2. 启用动态响应
3. 支持条件分支
4. 允许实时适应
States工作流执行上下文1. 维持执行数据
2. 启用持久性
3. 支持可恢复性
4. 保证执行完整性
Crew Support增强工作流自动化1. 在需要时注入Crew
2. 补充结构化工作流
3. 平衡自动化与智能
4. 支持自适应决策

1.3 Crews和Flows的使用情景

情景推荐方法原因
开放性研究Crews任务需要创造性思考、探索和适应
生成内容Crews文章、报告和营销材料需要联合协作
决策工作流Flows决策路径具备可预测性、审计性和精细控制
API编排Flows需要按照特定顺序对多个外部服务进行可靠的集成
混合应用Crews、Flows使用Flows编排整个过程,同时使用Crews处理复杂子任务

  当你需要自主解决问题、合作创新或进行探索性任务时,应该选择Crews;当你需要确定性的结果、审计能力或对执行的精准控制,应该选择Flows;当你的应用需要结构化过程和一些自主智能时,应该联合Crews和Flows。

2. CrewAI安装

2.1 安装uv

  uv是用Rust编写的Python包管理器,目前使用Python的新项目基本上都使用它来对项目中的依赖进行管理。Windows上安装的命令:
  powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

2.2 安装CrewAI CLI

  安装CrewAI CLI的命令:
  uv tool install crewai
  配置CrewAI的路径:
  uv tool update-shell
  验证CrewAI安装:
  uv tool list
  更新CrewAI:
  uv tool install crewai --upgrade

3. 官网QuickStart样例

3.1 创建CrewAI Crews项目

  创建CrewAI Crews项目:
  crewai create crew <your-project-name>

3.2 项目结构

  项目结构图如下。
在这里插入图片描述

路径作用
<your-project-name>/.venv项目下的Python环境
<your-project-name>/knowledge本地知识库目录
<your-project-name>/src/<your-project-name>/config/agents.yaml定义智能体及其角色
<your-project-name>/src/<your-project-name>/config/tasks.yaml设置智能体任务和工作流
<your-project-name>/src/<your-project-name>/tools自定义智能体工具的目录
<your-project-name>/src/crew.py协调、编排Crews
<your-project-name>/src/main.py项目入口、执行流
<your-project-name>/tests测试目录
<your-project-name>/.env存放大模型API Keys和环境变量
<your-project-name>/.gitignore配置git忽略的文件或文件夹
<your-project-name>/pyproject.tomlPython项目配置
<your-project-name>/README.mdCrewAI官方给出的项目运行指导
<your-project-name>/uv.lockuv锁定的Python依赖

3.3 .env

  CrewAI支持调用和OpenAI的API规范一致的大模型,这里我选择了deepseek-chat。

MODEL=openai/deepseek-chat
OPENAI_API_KEY="your-api-key"
OPENAI_API_BASE="https://api.deepseek.com/v1"

3.4 智能体角色及其任务

3.4.1 agents.yaml

  样例中定义了两个智能体research和reporting_analyst,分别给它们定义了role、goal和backstory。此外,在role、goal和backstory中可以通过{变量名}的方式插入用户输入的内容。

researcher:role: >{topic}领域的高级数据研究员goal: >发掘{topic}领域的前沿发展backstory: >你是一位经验丰富的研究员,擅长发掘{topic}领域的最新进展。你能够找到最相关的信息并以清晰简洁的方式呈现。reporting_analyst:role: >{topic}领域的报告分析师goal: >基于{topic}领域的数据分析和研究发现,创建详细的报告backstory: >你是一位细致入微的分析师,对细节有着敏锐的洞察力。你能够将复杂的数据转化为清晰简洁的报告,使他人能够轻松理解并基于你提供的信息采取行动。

3.4.2 tasks.yaml

  tasks.yaml中给researcher和reporting_analyst分别分配了任务research_task和reporting_task,在每个任务中给出了任务描述description、任务输出expected_output和该任务所属的智能体agent。同样,在description、expected_output中可以通过{变量名}的方式插入用户的内容。

research_task:description: >对{topic}领域进行深入研究,确保在当前年份{current_year}下找到所有有趣且相关的信息。expected_output: >列出关于{topic}的10个要点,涵盖最相关的信息。agent: researcherreporting_task:description: >审查获取的内容,并将每个主题扩展为完整的报告章节。确保报告详尽,包含所有相关信息。expected_output: >一份完整的报告,每个主要主题均包含详细的信息章节,以Markdown格式呈现(不包含代码块标记)。agent: reporting_analyst

3.5 crew.py

 &emsp以下代码皆是创建项目时自动生成的,从下面的代码中可以看出FirstAgent类主要完成3个任务:1. 创建智能体Agent。2. 创建智能体的任务Task。3. 创建最顶层组织Crew。

from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task# If you want to run a snippet of code before or after the crew starts,
# you can use the @before_kickoff and @after_kickoff decorators
# https://docs.crewai.com/concepts/crews#example-crew-class-with-decorators@CrewBase
class FirstAgent():"""FirstAgent crew"""# Learn more about YAML configuration files here:# Agents: https://docs.crewai.com/concepts/agents#yaml-configuration-recommended# Tasks: https://docs.crewai.com/concepts/tasks#yaml-configuration-recommendedagents_config = 'config/agents.yaml'tasks_config = 'config/tasks.yaml'# If you would like to add tools to your agents, you can learn more about it here:# https://docs.crewai.com/concepts/agents#agent-tools@agentdef researcher(self) -> Agent:return Agent(config=self.agents_config['researcher'],verbose=True)@agentdef reporting_analyst(self) -> Agent:return Agent(config=self.agents_config['reporting_analyst'],verbose=True)# To learn more about structured task outputs,# task dependencies, and task callbacks, check out the documentation:# https://docs.crewai.com/concepts/tasks#overview-of-a-task@taskdef research_task(self) -> Task:return Task(config=self.tasks_config['research_task'],)@taskdef reporting_task(self) -> Task:return Task(config=self.tasks_config['reporting_task'],output_file='report.md')@crewdef crew(self) -> Crew:"""Creates the FirstAgent crew"""# To learn how to add knowledge sources to your crew, check out the documentation:# https://docs.crewai.com/concepts/knowledge#what-is-knowledgereturn Crew(agents=self.agents, # Automatically created by the @agent decoratortasks=self.tasks, # Automatically created by the @task decoratorprocess=Process.sequential,verbose=True,# process=Process.hierarchical, # In case you wanna use that instead https://docs.crewai.com/how-to/Hierarchical/)

3.6 main.py

  main.py文件主要功能是让你在本地运行Crew,以达到测试的目的。以下代码也是在创建项目时自动生成的。

import sys
import warningsfrom datetime import datetimefrom first_agent.crew import FirstAgentwarnings.filterwarnings("ignore", category=SyntaxWarning, module="pysbd")# This main file is intended to be a way for you to run your
# crew locally, so refrain from adding unnecessary logic into this file.
# Replace with inputs you want to test with, it will automatically
# interpolate any tasks and agents informationdef run():"""Run the crew."""inputs = {'topic': '大语言模型','current_year': str(datetime.now().year)}try:FirstAgent().crew().kickoff(inputs=inputs)except Exception as e:raise Exception(f"An error occurred while running the crew: {e}")def train():"""Train the crew for a given number of iterations."""inputs = {"topic": "大语言模型"}try:FirstAgent().crew().train(n_iterations=int(sys.argv[1]), filename=sys.argv[2], inputs=inputs)except Exception as e:raise Exception(f"An error occurred while training the crew: {e}")def replay():"""Replay the crew execution from a specific task."""try:FirstAgent().crew().replay(task_id=sys.argv[1])except Exception as e:raise Exception(f"An error occurred while replaying the crew: {e}")def test():"""Test the crew execution and returns the results."""inputs = {"topic": "大语言模型","current_year": str(datetime.now().year)}try:FirstAgent().crew().test(n_iterations=int(sys.argv[1]), openai_model_name=sys.argv[2], inputs=inputs)except Exception as e:raise Exception(f"An error occurred while testing the crew: {e}")

3.7 本地运行

  在项目路径下先安装依赖,然后运行:

crewai install
crewai run

  从上面的Agents.yaml和Tasks.yaml中可以看出,该样例的目的是产出一份指定topic、指定年份year的报告,报告最终输出为Markdown文件。
  生成该报告的过程如下:
  1. research Agent查找关于指定主题topic、指定年份year的内容,并将其总结成10个要点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  2. research Agent完成任务后,将得到10个要点交给reporting_analyst Agent。reporting_analyst审查获取的10个要点,并将其扩写成一份指定主题topic、指定年份year的报告,并以Markdown文件格式输出。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考

https://docs.crewai.com/introduction
https://docs.crewai.com/installation
https://docs.crewai.com/quickstart

相关文章:

CrewAI Community Version(一)——初步了解以及QuickStart样例

目录 1. CrewAI简介1.1 CrewAI Crews1.2 CrewAI Flows1.3 Crews和Flows的使用情景 2. CrewAI安装2.1 安装uv2.2 安装CrewAI CLI 3. 官网QuickStart样例3.1 创建CrewAI Crews项目3.2 项目结构3.3 .env3.4 智能体角色及其任务3.4.1 agents.yaml3.4.2 tasks.yaml 3.5 crew.py3.6 m…...

蓝桥杯 18.分考场

分考场 原题目链接 题目描述 有 n 个人参加某项特殊考试。 为了公平&#xff0c;要求任何两个认识的人不能分在同一个考场。 你的任务是求出最少需要分几个考场才能满足这个条件。 输入描述 第一行&#xff1a;一个整数 n&#xff0c;表示参加考试的人数&#xff08;1 ≤…...

1. ubuntu20.04 终端实现 ros的输出 (C++,Python)

本节对应赵虚左ROS书籍的1.3.1-->1.3.3 1&#xff09;创建一个工作空间 2&#xff09;创建一个功能包和导入依赖 3&#xff09;编辑源文件 4&#xff09;编辑配置文件 5&#xff09;编译和执行 1&#xff09;创建一个工作空间 mkdir -p catkin_ws/src cd catkin_ws ca…...

Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试

所需下载地址&#xff1a; 通过网盘分享的文件&#xff1a;rtmp 链接: https://pan.baidu.com/s/1t21J7cOzQR1ASLrsmrYshA?pwd0000 提取码: 0000 window&#xff1a; 解压 win目录下的 nginx-rtmp-module-1.2.2.zip和nginx 1.7.11.3 Gryphon.zip安装包&#xff0c;解压时选…...

vue vite打完包后依然想保留某个文件夹下的console.log方便以后的观察的详细做法

首先需要安装包 npm i terser rollup/plugin-strip 具体的包如下&#xff1a; "rollup/plugin-strip": "^3.0.4","terser": "^5.39.0", // 这个不用也行 如果不用则需要将build中的minify和terserOptions一并删除了然后在vite.co…...

Lateral 查询详解:概念、适用场景与普通 JOIN 的区别

1. 什么是Lateral查询&#xff1f; Lateral查询&#xff08;也称为横向关联查询&#xff09;是一种特殊的子查询&#xff0c;允许子查询中引用外层查询的列&#xff08;即关联引用&#xff09;&#xff0c;并在执行时逐行对外层查询的每一行数据执行子查询。 语法上通常使用关…...

[langchain教程]langchain03——用langchain构建RAG应用

RAG RAG过程 离线过程&#xff1a; 加载文档将文档按一定条件切割成片段将切割的文本片段转为向量&#xff0c;存入检索引擎&#xff08;向量库&#xff09; 在线过程&#xff1a; 用户输入Query&#xff0c;将Query转为向量从向量库检索&#xff0c;获得相似度TopN信息将…...

Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议

引言: 在现代web前端开发中,包管理工具的重要性不言而喻,无论是构建项目脚手架,安装ui库,管理依赖版本,还是实现monorepo项目结构,一个高效稳定的包管理工具都会大幅提升开发体验和协作效率 作为一名前端工程师,深入了解这些工具背后的机制与差异,对于提升项目可维护性和团队…...

【springsecurity oauth2授权中心】简单案例跑通流程 P1

项目被拆分开&#xff0c;需要一个授权中心使得每个项目都去授权中心登录获取用户权限。而单一项目里权限使用的是spring-security来控制的&#xff0c;每个controller方法上都有 PreAuthorize("hasAuthority(hello)") 注解来控制权限&#xff0c;想以最小的改动来实…...

spark—SQL3

连接方式 内嵌Hive&#xff1a; 使用时无需额外操作&#xff0c;但实际生产中很少使用。 外部Hive&#xff1a; 在虚拟机下载相关配置文件&#xff0c;在spark-shell中连接需将hive-site.xml拷贝到conf/目录并修改url、将MySQL驱动copy到jars/目录、把core-site.xml和hdfs-sit…...

Linux-scp命令

scp&#xff08;Secure Copy Protocol&#xff09;是基于 SSH 的安全文件传输命令&#xff0c;用于在本地和远程主机之间加密传输文件或目录。以下是详细用法和示例&#xff1a; 基本语法 scp [选项] 源文件 目标路径常用选项 选项描述-P 端口号指定 SSH 端口&#xff08;默认…...

【PyQt5】@QtCore.pyqtSlot()的作用

在 PyQt5 中&#xff0c;QtCore.pyqtSlot() 是一个装饰器&#xff0c;用于将普通的 Python 方法标记为 可被信号连接的槽函数。它的主要作用是&#xff1a; 1. 标识槽函数 核心作用&#xff1a;告诉 PyQt 这个方法是一个槽&#xff08;Slot&#xff09;&#xff0c;可以被信号…...

Go语言中的Context

目录 Go语言中的Context 1. Context的基本概念 1.1 Context的核心作用 2. Context的基本用法 2.1 创建Context 背景Context 可取消的Context 带有超时的Context 2.2 在Goroutine间传递Context 2.3 获取Context的值 为Context添加自定义数据 访问Context中的值 3. C…...

小刚说C语言刷题——1039 求三个数的最大数

1.题目描述 已知有三个不等的数&#xff0c;将其中的最大数找出来。 输入 输入只有一行&#xff0c;包括3个整数。之间用一个空格分开。 输出 输出只有一行&#xff08;这意味着末尾有一个回车符号&#xff09;&#xff0c;包括1个整数。 样例 输入 1 5 8 输出 8 2.…...

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板&#xff0c;以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络&#xff0c;而宽带通信系统正在努力满…...

在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?

​In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:​YouTube1Epic …...

Git 配置 GPG 提交签名

使用 GPG 对 Git 提交进行签名&#xff0c;可以证明该提交确实是你本人提交的。这在团队协作和代码审核中非常有用&#xff0c;GitHub/GitLab 等平台也会显示 “Verified” 标签。 &#x1f9e9; 一、检查是否已安装 GPG gpg --version 如果未安装&#xff0c;可使用以下命令…...

linux学习 5 正则表达式及通配符

重心应该放在通配符的使用上 正则表达式 正则表达式是用于 文本匹配和替换 的强大工具 介绍两个交互式的网站来学习正则表达式 regexlearn 支持中文 regexone 还有一个在线测试的网址 regex101 基本规则 符号作用示例.匹配任何字符除了换行a.b -> axb/a,b[abc]匹配字符…...

eplan许可证与版本兼容性问题

在使用EPLAN电气设计软件时&#xff0c;确保许可证与软件版本之间的兼容性至关重要。不兼容的许可证可能导致软件无法正常运行&#xff0c;影响工作效率。本文将为您深入解析EPLAN许可证与版本兼容性问题&#xff0c;并提供解决方案&#xff0c;确保您的软件始终处于最佳状态。…...

【Easylive】AdminFilter 详细解析

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 AdminFilter 详细解析 AdminFilter 是一个 Spring Cloud Gateway 的过滤器&#xff0c;用于在请求到达微服务之前进行 权限校验&#xff08;如管理员 Token 验证&#xff09;。以下是逐行解…...

纷析云开源财务软件:助力企业实现数字化自主权

在数字化转型浪潮中&#xff0c;企业财务管理面临高成本、低灵活性、数据孤岛等痛点。纷析云开源财务软件&#xff08;项目地址&#xff1a;https://gitee.com/shenxji/fxy&#xff09;凭借其开源基因与模块化设计&#xff0c;为企业提供了一条“低成本、高可控”的数字化路径。…...

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention 随着人工智能技术的飞速发展&#xff0c;回归预测任务在很多领域得到了广泛的应用。尤其在金融、气象、医疗等领域&#xff0c;精确的回归预测模型能够为决策者提供宝贵的参考信息。为…...

解决使用hc595驱动LED数码管亮度低的问题

不知道大家在做项目的时候有没有遇到使用hc595驱动LED数码管亮度低的问题&#xff08;数码管位数较多&#xff09;&#xff0c;如果大佬们有好的方法的可以评论区留言 当时我们解决是换成了天微的驱动芯片&#xff0c;现在还在寻找新的解决办法&#xff08;主要软件不花钱&…...

【Linux】轻量级命令解释器minishell

Minishell 一、项目背景 在linux操作系统中&#xff0c;用户对操作系统进行的一系列操作都不能直接操作内核&#xff0c;而是通过shell间接对内核进行操作。 Shell 是操作系统中的一种程序&#xff0c;它为用户提供了一种与操作系统内核和计算机硬件进行交互的界面。用户可以通…...

Android RK356X TVSettings USB调试开关

Android RK356X TVSettings USB调试开关 平台概述操作-打开USB调试实现源码补充说明 平台 RK3568 Android 11 概述 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能处理器&#xff0c;支持 USB OTG&#xff08;On-The-Go&#xff09;和 USB Host 功能。US…...

CGAL 计算直线之间的距离(3D)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里的计算思路很简单: 1、首先将两个三维直线均平移至过原点处,这里两条直线可以构成一个平面normal。 2、如果两个直线平行,那么两条直线之间的距离就转换为直线上一点到另一直线的距离。 3、如果两个直线不平行,则可…...

消息队列知识点详解

消息队列场景 什么是消息队列 可以把消息队列理解一个使用队列来通信的组件&#xff0c;它的本质是交换机队列的模式&#xff0c;实现发送消息&#xff0c;存储消息&#xff0c;消费消息的过程。 我们通常说的消息队列&#xff0c;MQ其实就是消息中间件&#xff0c;业界中比较…...

序列号绑定的SD卡坏了怎么办?

在给SD卡烧录程序的时候&#xff0c;大家发现有的卡是无法烧录的&#xff0c;如&#xff1a;复印机的SD卡不能被复制通常涉及以下几个技术原因&#xff0c;可能与序列号绑定、加密保护或硬件限制有关&#xff1a; 一、我们以复印机的系统卡为例来简单讲述一下 序列号或硬件绑定…...

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、SystemWeaver与SOME/IP基础认知 1.1 SystemWe…...

基于单片机的BMS热管理功能设计

标题:基于单片机的BMS热管理功能设计 内容:1.摘要 摘要&#xff1a;在电动汽车和储能系统中&#xff0c;电池管理系统&#xff08;BMS&#xff09;的热管理功能至关重要&#xff0c;它直接影响电池的性能、寿命和安全性。本文的目的是设计一种基于单片机的BMS热管理功能。采用…...