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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word选中所有的表格——宏

Sub 选中所有表格()Dim aTable As TableApplication.ScreenUpdating FalseActiveDocument.DeleteAllEditableRanges wdEditorEveryoneFor Each aTable In ActiveDocument.TablesaTable.Range.Editors.Add wdEditorEveryoneNextActiveDocument.SelectAllEditableRanges wdEdito…

Tkinter与ttk模块对比:构建现代 Python GUI 的进化之路

在 Python GUI 开发中&#xff0c;标准库 tkinter 及其子模块 ttk&#xff08;Themed Tkinter&#xff09;常被同时使用。本文通过功能对比和实际案例&#xff0c;简单介绍这两个模块的核心差异。 1. 区别 Tkinter&#xff1a;Python 标准 GUI 工具包&#xff08;1994年集成&…

Linux系统之部署Dillinger个人文本编辑器

Linux系统之部署Dillinger个人文本编辑器 一、Dillinger介绍1.1 Dillinger简介1.2 Dillinger特点1.3 使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本四、部署Node.js 环境4.1 下载Node.js安装包4.2 解…

从malloc到free:动态内存管理全解析

1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有&#xff1a; int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点&#xff1a; 1.空间开辟的时候大小已经固定 2.数组…

健身房管理系统设计与实现(springboot+ssm+vue+mysql)含万字详细文档

健身房管理系统设计与实现(springbootssmvuemysql)含万字详细文档 健身房管理系统是一个全面的解决方案&#xff0c;旨在帮助健身房高效管理日常运营。系统主要功能模块包括个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、…

seate TCC模式案例

场景描述 用户下单时&#xff0c;需要创建订单并从用户账户中扣除相应的余额。如果订单创建成功但余额划扣失败&#xff0c;则需要回滚订单创建操作。使用 Seata 的 TCC 模式来保证分布式事务的一致性。 1. 项目结构 假设我们有两个微服务&#xff1a; Order Service&#x…

【Linux】Rhcsa复习5

一、Linux文件系统权限 1、文件的一般权限 文件权限针对三类对象进行定义&#xff1a; owner 属主&#xff0c;缩写u group 属组&#xff0c; 缩写g other 其他&#xff0c;缩写o 每个文件针对每类访问者定义了三种主要权限&#xff1a; r&#xff1a;read 读 w&…

《Operating System Concepts》阅读笔记:p748-p748

《Operating System Concepts》学习第 64 天&#xff0c;p748-p748 总结&#xff0c;总计 1 页。 一、技术总结 1.Transmission Control Protocol(TCP) 重点是要自己能画出其过程&#xff0c;这里就不赘述了。 二、英语总结(生词&#xff1a;3) transfer, transport, tran…

C语言之图像文件的属性

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…

opencv--基础

opencv OpenCV是一个实现数字图像处理和计算机视觉通用算法的开源跨平台库。 链接 opencv中的cv是什么意思 在OpenCV中&#xff0c;"cv" 是 "Computer Vision"&#xff08;计算机视觉&#xff09; 的缩写。 opencv的实现语言 opencv的底层实现代码是使…

Java创建对象的方式

1、通过new关键字创建新对象 用new关键字创建对象是我们在开发中最常用的方式&#xff0c;new关键字会为我们在堆内存中开辟一块空间以存放对象的引用&#xff08;包含对象本身以及内部属性的引用&#xff09;。 2、通过newInstance()方法创建新对象 newInstance()方法本质上是…

构建具备推理与反思能力的高级 Prompt:LLM 智能代理设计指南

在构建强大的 AI 系统&#xff0c;尤其是基于大语言模型&#xff08;LLM&#xff09;的智能代理&#xff08;Agent&#xff09;时&#xff0c;Prompt 设计的质量决定了系统的智能程度。传统 Prompt 通常是简单的问答或填空式指令&#xff0c;而高级任务需要更具结构性、策略性和…

猪行为视频数据集

猪行为数据集包含 23 天(超过 6 周)的日间猪行为视频,这些视频由近乎架空的摄像机拍摄。视频已配准颜色和深度信息。数据以每秒 6 帧的速度捕获,并以 1800 帧(5 分钟)为一批次进行存储。大多数帧显示 8 头猪。 这里可以看到颜色和深度图像的示例: 喂食器位于图片底部中…

C++运算符重载详解

C++ 中的运算符重载允许为用户自定义类型(类或结构体)赋予运算符特定功能,使其操作更直观。以下是运算符重载的关键点: 1. 基本语法 成员函数重载:运算符作为类的成员函数,左操作数为当前对象 (this),右操作数为参数。 class Complex {public:Complex operator+(const …

deep-share开源浏览器扩展,用于分享 DeepSeek 对话,使用户能够将对话内容保存为图片或文本以便轻松分享

一、软件介绍 文末提供程序和源码下载学习 deep-share开源浏览器扩展&#xff0c;用于分享 DeepSeek 对话&#xff0c;使用户能够将对话内容保存为图片或文本以便轻松分享。 二、软件功能 One-click capture of DeepSeek chat content一键捕获 DeepSeek 聊天内容Support sha…

Unity之如何实现RenderStreaming视频推流

文章目录 前言引入 UnityRenderStreaming 的好处教程步骤 1:设置环境步骤 2: 创建项目步骤 3:安装软件包步骤 5:下载示例步骤 6:检查配置环境步骤 7:打开推流场景步骤 8: 准备用于流式传输的WebServer应用程序步骤 9: 运行 示例场景步骤 10:检查视频是否在浏览器中显示…

30天开发操作系统 第26天 -- 为窗口移动提速

前言 昨天我们增加了可同时启动的应用程序的数量&#xff0c;窗口也跟着变多了&#xff0c;整个画面变得热闹起来。 话说&#xff0c;在对比color.hrb和color2.hrb的时候我们需要移动窗口&#xff0c;那个时候笔者感到窗口移动的速度很慢。在真机环境下的速度还算可以接受&…

9.QT-显示类控件|Label|显示不同格式的文本|显示图片|文本对齐|自动换行|缩进|边距|设置伙伴(C++)

Label QLabel 可以⽤来显⽰⽂本和图⽚ 属性说明textQLabel中的⽂本textFormat⽂本的格式.• Qt::PlainText 纯⽂本• Qt::RichText 富⽂本(⽀持html标签)• Qt::MarkdownText markdown格式• Qt::AutoText 根据⽂本内容⾃动决定⽂本格式pixmapQLabel 内部包含的图⽚.scaledCo…

非参数检验题目集

非参数检验题目集 对医学计量资料成组比较&#xff0c;相对参数检验来说&#xff0c;非参数秩和检验的优点是&#xff08; &#xff09; A. 适用范围广 B. 检验效能高 C. 检验结果更准确 D. 充分利用资料信息 E. 不易出现假阴性错误 对于计量资料的比较&#xff0c;在满足参数…

libdxfrw库使用总结

在 Win11VS2022CMake 平台编译 libdxfrw 库的挑战与应对 在当今数字化设计与开发领域&#xff0c;高效处理 CAD 文件格式如 DXF 是众多项目的关键需求。libdxfrw 库作为一种功能强大的工具&#xff0c;能助力开发者精准解析与写入 DXF 文件&#xff0c;使其在众多应用场景中备…