如何用CrewAI与FastAPI打造智能API

在这里插入图片描述

目录

· 1. 引言 ∘ 客户支持代理 ∘ 个人财务顾问 ∘ 医疗助手 ∘ 学习伴侣 ∘ 项目管理助手 ∘ 创意合作伙伴 ∘ 智能家居管理器 ∘ 网络安全助手· 2. 搭建基础· 3. 理解 CrewAI ∘ 1. AI 代理 ∘ 2. 工具 ∘ 3. 过程 ∘ 4. 任务· 4. 使用 CrewAI 设置 Fast API· 结论· 了解更多

1. 引言

在2025年,我们有不同的方法来开发软件,特别是随着最新的AI改进,AI通过各种工具和应用进入了我们的生活,即使是我们最好的IDE,如Intellij IDEA或Microsoft Visual Code。

在介绍Crew AI之前,我想简要解释一下什么是LLM。**大型语言模型(LLMs)是可以理解和生成自然语言文本的机器学习模型。这是一种人工智能(AI)**程序,可以识别和生成文本,执行其他任务。

简单来说,LLM已经接收了足够的数据,以便能够识别和解释人类语言或其他类型的数据。LLM可以自动化复杂和顺序的工作流程和任务。例如,您可以使用LLM构建助手,能够代表您自主在线订购产品并安排其在应用中的交付。这些基于LLM的助手被称为代理

代理是一个LLM驱动的助手,被分配特定的任务和工具来完成这些任务。在其基本形式中,一个典型的AI代理可能配备有记忆,以存储和管理用户交互,与外部数据源通信,并使用功能来执行其任务。代理可以执行的常见示例包括以下内容。

客户支持代理

AI 代理可以作为 24/7 客户服务代表,处理常见问题解答,解决客户问题,并将复杂查询升级到人工代理。例如,电子商务应用中的 AI 代理可以实时协助用户跟踪订单、处理退货或提供产品推荐。

个人财务顾问

在财务应用中的AI代理可以充当虚拟顾问,帮助用户管理预算、分析消费模式,并根据他们的财务目标建议投资机会。例如,在分析用户的风险状况后,它可能会推荐特定的共同基金或ETF。

医疗助理

一个专注于医疗的代理可以帮助患者预约医生、提醒他们的用药时间表,或回答基本的健康查询。例如,代理可以通过分析可穿戴设备的数据来帮助用户监测慢性病,并提供健康见解。

学习伴侣

在教育中,AI 代理可以作为辅导员,通过个性化学习计划引导学习者。它可以通过解释困难的概念、建议额外的资源,甚至创建练习测验来帮助用户巩固学习。

项目管理助手

集成到项目管理工具中的代理可以帮助组织任务、设定截止日期和自动安排会议。例如,它可以分析团队进展,识别瓶颈,并建议解决方案以提高生产力。

创意合作伙伴

AI代理可以在艺术领域充当共同创作者。例如,在内容创作中,代理可以帮助生成创意、撰写剧本或创建图形设计。它可能会分析趋势,以建议与特定受众产生共鸣的创意格式。

智能家居管理器

在智能家居生态系统中,AI代理可以自动化和优化家庭操作。例如,它可以根据房主的偏好和行为调整照明、控制恒温器,甚至推荐节能技巧。

网络安全助手

一个AI代理可以实时监控网络活动,检测异常,并对潜在威胁做出响应。它可能通过阻止可疑IP或通知管理员关键漏洞来采取主动措施。

这些例子说明了AI代理如何适应各种场景,提高效率、便利性和用户体验。请告诉我是否希望深入了解其中的任何内容!

多代理平台已经开发出来以管理如此复杂的AI工作流, crewAI就是其中之一。在本文中,我将使用crewai开发一个工作流,并使其可以通过fastapi从外部调用,作为额外内容,还将提供一个后台任务机制以支持并发请求。

2. 设置舞台

让我们创建一个文件夹(你可以随意命名),我称之为 app

mkdir -p app 

创建虚拟环境。我假设你已经安装了 python,顺便说一下,我在 python 3.12 上尝试过,但在 python 3.13 版本的 crew ai 依赖项上遇到了问题。

python -m venv .venv

激活虚拟环境,然后安装依赖项,在此之前创建 requirements.txt 文件。

crewai
fastapi
uvicorn
python-dotenv
pydantic
celery
requests

然后,其他的就来了……这将激活虚拟环境并安装项目所需的依赖项。

source venv/bin/activate
pip install -r requirements.txt

3. 理解 CrewAI

crewAI 是一个由 João Moura 创建的开源多智能体编排框架。这个基于 Python 的框架利用 人工智能 (AI) 协作,通过编排角色扮演的自主 AI 代理,使它们共同作为一个紧密的团队或“船员”来完成任务。crewAI 的目标是提供一个强大的框架来自动化多智能体工作流。

我不会深入探讨 crewai 的工作原理,因为本文旨在创建一个由 crew ai 支持的快速 API。有关 crewai 工作原理的更多信息,您可以查看 该文档。

null

该图提供了 Crew 的概念框架,重点关注 AI 代理在完成任务以实现特定结果中的角色和协作。以下是关键组件的详细分解:

1. AI代理
  • • 该框架显示了多个AI代理,它们在顶部以黑框的形式呈现。
  • • 这些代理协同工作,可以委派任务相互提问
2. 工具
  • • 一个特定部分强调 工具,代理可以使用这些工具来执行他们的任务。工具是增强代理能力的外部工具或功能。
3. 过程
  • 过程 定义了 AI 代理如何协作。
  • • 这包括:
  • • 任务如何分配。
  • • 代理之间如何互动。
  • • 代理如何执行其工作。
4. 任务
  • 任务 在底部显示,代表代理需要处理的单个操作或责任。
  • • 任务可以:
  • • 通过指定使用哪些工具来覆盖代理工具。
  • • 将特定任务分配给特定代理。

4. 使用 CrewAI 设置 Fast API

在跳入演示之前,我想向您保证,我为您准备了一个 repository,请随意使用。您也可以打开我希望解决的问题。

  • • 在这个 repository 中,我创建了 analyzer.py Python 脚本,并在其中添加了我的端点,您将能够调用以启动 crewai 作为后台任务。
from fastapi import APIRouter, HTTPException, BackgroundTasks
from app.models.models import TopicRequest, TaskResponse
from app.services.services import BotService

router = APIRouter()

@router.post("/analyze", response_model=TaskResponse)
asyncdefanalyze_topic(request: TopicRequest, background_tasks: BackgroundTasks):
    task_id = BotService.create_task(request.topic)
    background_tasks.add_task(BotService.process_task, task_id, request.topic)
    return BotService.get_task_status(task_id)

@router.get("/task/{task_id}", response_model=TaskResponse)
asyncdefget_task_status(task_id: str):
    task = BotService.get_task_status(task_id)
    ifnot task:
        raise HTTPException(status_code=404, detail="Task not found")
    return task

此代码片段定义了一个 FastAPI 路由器,具有用于创建和管理与主题分析相关的后台任务的端点。

  • services.py 中的 BotService 类管理分析主题的任务生命周期,使用 UrlInsightBot,包括任务创建、异步处理、状态更新和日志记录。
import asyncio
import uuid
import logging
from typing importDict
from app.models.models import TaskStatus, TaskResponse
from app.crew.crew import UrlInsightBot

### Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

classBotService:
    _tasks: Dict[str, TaskResponse] = {}

    @classmethod
    defcreate_task(cls, topic: str) -> str:
        task_id = str(uuid.uuid4())
        cls._tasks[task_id] = TaskResponse(
            task_id=task_id,
            status=TaskStatus.PENDING
        )
        logger.info(f"Task {task_id} created with status PENDING for topic: {topic}")
        return task_id

    @classmethod
    asyncdefprocess_task(cls, task_id: str, topic: str):
        try:
            cls._tasks[task_id].status = TaskStatus.PROCESSING
            logger.info(f"Task {task_id} status changed to PROCESSING")
            bot = UrlInsightBot()
            result = await bot.crew().kickoff_async(inputs={'topic': topic})
            cls._tasks[task_id].status = TaskStatus.COMPLETED
            cls._tasks[task_id].result = result
            logger.info(f"Task {task_id} completed successfully with status {cls._tasks[task_id].status}")
        except Exception as e:
            cls._tasks[task_id].status = TaskStatus.FAILED
            cls._tasks[task_id].error = str(e)
            logger.error(f"Task {task_id} failed with error: {e}")
          
    @classmethod
    asyncdefprocess_task_sleep(cls, task_id: str, topic: str):
        try:
            cls._tasks[task_id].status = TaskStatus.PROCESSING
            logger.info(f"Task {task_id} status changed to PROCESSING")
            # Simulate processing
            await asyncio.sleep(5)  # Simulate a long-running task
            cls._tasks[task_id].status = TaskStatus.COMPLETED
            cls._tasks[task_id].result = f"Processed topic: {topic}"
            logger.info(f"Task {task_id} completed successfully with status {cls._tasks[task_id].status}")
        except Exception as e:
            cls._tasks[task_id].status = TaskStatus.FAILED
            cls._tasks[task_id].error = str(e)

    @classmethod
    defget_task_status(cls, task_id: str) -> TaskResponse:
        return cls._tasks.get(task_id)
  • • 此代码使用 CrewAI 框架定义了一个 UrlInsightBot crew 类,使用 YAML 文件配置代理和任务,并设置两个代理,研究员和报告分析师,及其各自的配置。
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
import logging

### 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

### Suppress logs from LiteLLM and httpx
logging.getLogger("LiteLLM").setLevel(logging.WARNING)

@CrewBase
classUrlInsightBot():
"""UrlInsightBot 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-recommended
 agents_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
 @agent
defresearcher(self) -> Agent:
return Agent(
   config=self.agents_config['researcher'],
  )

 @agent
defreporting_analyst(self) -> Agent:
return Agent(
   config=self.agents_config['reporting_analyst'],
  )

# 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
 @task
defresearch_task(self) -> Task:
return Task(
   config=self.tasks_config['research_task'],
  )

 @task
defreporting_task(self) -> Task:
return Task(
   config=self.tasks_config['reporting_task'],
  )

 @crew
defcrew(self) -> Crew:
"""Creates the UrlInsightBot crew"""
# To learn how to add knowledge sources to your crew, check out the documentation:
# https://docs.crewai.com/concepts/knowledge#what-is-knowledge

return Crew(
   agents=self.agents, # Automatically created by the @agent decorator
   tasks=self.tasks, # Automatically created by the @task decorator
   process=Process.sequential,
  )

在您克隆了 repository 并设置项目后,您可以使用以下命令运行项目,并使用 curl 进行调用。

cd ./crewai/url_insight_api
uvicorn app.main:app --reload --port 8000 --log-config config/log_config.yaml

测试服务器

### Start analysis
curl -X POST http://localhost:8000/api/v1/analyze \
  -H "Content-Type: application/json" \
  -d '{"topic": "AI LLMs"}'

### Check task status (replace <task_id> with actual ID from previous response)
curl http://localhost:8000/api/v1/task/<task_id>

您可以进行并发请求,您会看到它支持并发。

结论

将 CrewAI 与 FastAPI 集成展示了将 AI 驱动的代理协作与强大的 Python Web 框架相结合的力量,以创建高效、可扩展和智能的应用程序。通过利用 CrewAI 的能力,开发人员可以无缝管理流程,将任务委派给 AI 代理,并实现优化的结果。使用 FastAPI 确保系统不仅快速可靠,而且高度可扩展,使其适用于自动化操作、提供副驾驶协助或简化复杂工作流程等实际应用。

随着 AI 代理的不断发展,像 CrewAI 这样的框架将成为构建模拟人类协作和决策的创新系统的必备工具。通过这种展示的方法,开发人员现在拥有了利用这一潜力的蓝图,提供更智能的应用程序,将生产力和效率提升到新的高度。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

下面这些都是我当初辛苦整理和花钱购买的资料,现在我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、AI大模型各大场景实战案例

在这里插入图片描述

五、AI大模型面试题库
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值