Skip to content

部署与事件监听器

恭喜!你已经构建了一个复杂的 Crew。现在是时候将它从本地机器部署到生产环境了。在本章的最后,我们将介绍生命周期钩子(Event Listeners)、安全最佳实践以及如何使用 Docker 将你的应用程序容器化。

在生产环境中,你经常需要执行 AI 主要逻辑之外的操作。例如,你可能希望在每次任务完成时将数据记录到数据库中,或者在 Crew 启动时发送 Slack 通知。CrewAI 提供了充当事件监听器的回调机制。

你可以在任务(Task)层面或 Crew 层面,使用 task_callback、step_callback 或 before_kickoff 和 after_kickoff 等生命周期钩子来分配回调函数。

def on_task_completed(output):
# 将输出发送到日志服务
print(f"[Log] Task Finished: {output.raw[:50]}...")
research_task = Task(
description="Research AI trends",
expected_output="A summary report",
agent=researcher,
callback=on_task_completed # 当此任务完成时触发
)

切勿将你的 API 密钥(例如 sk-proj-...)直接硬编码到 Python 脚本中。这是一个重大的安全风险,特别是当你将代码推送到 GitHub 时。

标准做法是使用 .env 文件。CrewAI 被设计为自动查找这些环境变量。

  • 在你的根文件夹中创建一个名为 .env 的文件。
  • 添加你的密钥:OPENAI_API_KEY=sk-...
  • 将 .env 添加到你的 .gitignore 文件中,这样它就不会被上传。
  • 如果你依赖标准模型配置,CrewAI 将自动加载这些变量。

为了确保你的 Crew 在服务器上和在你的笔记本电脑上以相同的方式运行,你应该使用 Docker。Docker 为你的代码创建一个自包含的环境(容器)。

下面是一个基于 Python 的 CrewAI 项目的标准 Dockerfile:

# 使用官方 Python 运行时作为父镜像
FROM python:3.10-slim
# 在容器中设置工作目录
WORKDIR /app
# 将当前目录内容复制到容器的 /app 目录中
COPY . /app
# 安装 requirements.txt 中指定的任何所需包
# 如果使用 poetry,则应安装 poetry 并运行 'poetry install'
RUN pip install --no-cache-dir crewai crewai-tools
RUN pip install -r requirements.txt
# 当容器启动时运行 crew 脚本
CMD ["python", "src/main.py"]

运行 LLM 智能体(agents)可能会很昂贵。以下是两种优化成本的关键策略:

  • 缓存:CrewAI 默认启用缓存。如果一个智能体(agent)接收到完全相同的输入并产生完全相同的工具输出,它就可以从缓存中提取结果,而不是再次调用昂贵的 LLM。请确保在你的 Crew 配置中将 cache=True 设置为真。
  • 模型选择:并非每个智能体(agent)都需要 GPT-4。将更小、更快、更便宜的模型(如 GPT-4o-mini 或 Haiku)分配给执行简单任务(如摘要)的智能体,并将“最智能”的模型保留给复杂的推理任务。

凭借这些部署策略,你的 CrewAI 应用程序将变得健壮、安全,并为实际应用做好准备。祝你编码愉快!