crew AI笔记[4] - 第一个crew AI代码
基于crew AI构建一个研究智能体,终于开始动手自己玩了。。。安装了crewAI,参考配置了LLM,参考,谁配置谁吐血1、官方这个入门不太好,一上来就用规范框架把人绕晕了,建议直接裸奔,看核心的agent、task、crew怎么关联,找找感觉再说,见文末我的python源码(开箱即用)。当然,视coding功底而定,大神们肯定看习惯了觉得无违和感。像我这种小白还是习惯先简单粗暴看代码本身,不看框
目标
基于crew AI构建一个研究智能体,终于开始动手自己玩了。。。
前置条件
安装了crewAI,参考
配置了LLM,参考,谁配置谁吐血
个人感悟
1、官方这个入门不太好,一上来就用规范框架把人绕晕了,建议直接裸奔,看核心的agent、task、crew怎么关联,找找感觉再说,见文末我的python源码(开箱即用)。当然,视coding功底而定,大神们肯定看习惯了觉得无违和感。像我这种小白还是习惯先简单粗暴看代码本身,不看框架。
2、国内使用AI门槛比国外高太多,光一个LLM配置都搞死人。国外的服务不让人用,国内的服务适配性又不好。捣鼓了好久,给大家参考,助力国人早日赶英超美吧🙂
详细创建步骤
【没贴源码出来了,需要的自己去看,传送门】
1、创建工程
crewai create crew research_crew
cd research_crew
通过crewai.exe的create crew命令,创建了一个research_crew工程 ,框架如下:
2、工程解释
一个典型的python工程,.env保存了LLM的key、src中每个具体项目一个文件夹,区分main、crew、tools,同时把最核心的agent、task以yaml的形式进行配置
最终运行靠crew run
3、配置agent
修改agents.yaml
4、配置task
修改tasks.yaml
5、配置crew
修改crew.py
6、配置main
7、配置API_KEY
修改.env文件
8、安装依赖
crewai install
9、运行crew
crewai run
10、观察结果
从output/report.md中观察结果,进行改进
其他crew命令行介绍
# View all available commands crewai --help # Run the crew crewai run # Test the crew crewai test # Reset crew memories crewai reset-memories # Replay from a specific task crewai replay -t <task_id>
针对这个sample的改进建议
1、拓展角色(很值得学习)
-
事实核查员,以核实研究结果
-
用于创建图表和图形的数据可视化程序
-
在特定领域具有专业知识的专家
-
批评者,指明分析中的弱点
2、增加工具和功能
-
用于实时研究的网页浏览工具
-
用于数据分析的CSV数据库工具
-
数据处理代码执行工具
-
与外部服务的API连接
3、创造更复杂的workflow
-
管理层代理向工作代理委派任务的分层过程
-
具有用于细化的反馈回路的迭代过程
-
多个代理同时工作的并行进程
-
根据中间结果进行动态调整的过程
4、这个框架应用到不同领域
-
内容创造【作家、编辑、事实核查员】
-
客服服务【客服代表、技术专家、质量控制人员】
-
产品开发【产品调研、产品设计、产品开发规划】
-
数据分析【数据收集、数据分析、可视化呈现】
笔者给的极简sample
1、环境搭建
强烈建议在虚拟环境下玩,更新换代太快,组件超多,很容易不兼容运行不起来。
目前(2025-8-12)支持python版本:[3.10, 3.14), 注意这个集合是左闭又开的🙂
# 把饭喂到嘴里,创建虚拟环境并在虚拟环境下安装crewAI
pip install virtualenv
virtualenv venv-crewai
cd venv-crewai/scripts
./activate
cd ../../
pip install crweai
等待安装完成即可,此处如果日后组件有兼容性问题,可以参考当前的requirements.txt
2、改API KEY直接运行
# -*- coding: utf-8 -*-
"""
@Author: yinchao
@Date: 2025-08-11
@Version: 1.0.0
@Description:
一个crewAI使用的sample.py文件,用于测试CrewAI的基础功能。
用户只需自行配置api_key即可运行。
Copyright (c) 2025 yinchao. All rights reserved.
"""
import os
import time
from crewai import Agent, Crew, Process, Task, LLM
# ====================================================================
# 1. 配置 DeepSeek/Qwen LLM 实例
# ====================================================================
# 国内可选模型:deepseek-chat(v3)、deepseek-reasoner(R1)、qwen-plus
# model参数规则:[LLM供应商]/[模型名称],`[LLM供应商]`默认是openai,第三方供应商需要指名
# stream参数设置为False也就是同步模式,不是流数据模型
LLM_DS = LLM(
model='deepseek/deepseek-chat', # 使用 CrewAI 的 LLM 类,指定 DeepSeek 模型
base_url='https://api.deepseek.com/v1', # DeepSeek 的 API 基地址
api_key='sk-xxxxxxxxxxxxxxxxxxxxxxxxx', # 你的 DeepSeek API Key
stream=False, # 设置为同步模式
temperature=0.7, # 控制模型输出的随机性
request_timeout=120, # 设置请求超时时间
)
LLM_QW = LLM(
model='dashscope/qwen-plus',
base_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
api_key='sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', # 你的阿里云 API Key,本程序选择了这个
stream=False, # 设置为同步模式
temperature=0.7, # 控制模型输出的随机性
request_timeout=120, # 设置请求超时时间
)
# ====================================================================
# 2. 定义智能体(Agent)实例
# ====================================================================
researcher = Agent(
role='资深研究员',
goal='根据给定主题收集和分析最新信息',
backstory='你是一位经验丰富的研究员,擅长从各种来源获取和提炼关键信息,确保信息准确和全面。',
verbose=True, # 启用详细日志
allow_delegation=False, # 不允许将任务委托给其他智能体
llm=LLM_QW, # 指定调用的 Qwen LLM
)
reporting_analyst = Agent(
role='报告分析师',
goal='将研究结果整理成简洁明了、富有洞察力的报告',
backstory='你是一位专业的分析师,能够将复杂数据转化为易于理解的洞察和行动建议。',
verbose=True, # 启用详细日志
allow_delegation=True, # 允许将子任务委托给其他智能体(如果需要)
cache=False, # 禁用缓存,确保每次都生成新的内容
llm=LLM_QW, # 指定调用的 Qwen LLM
)
# ====================================================================
# 3. 定义任务(Task)实例
# ====================================================================
research_topic_task = Task(
description='研究人工智能在农业中的最新应用和趋势,重点关注智能灌溉、病虫害识别和自动化农机。',
expected_output='一份详细报告,包含人工智能在农业中应用的主要趋势、技术细节和至少三个具体案例。',
agent=researcher, # 指定执行此任务的智能体
output_file='test_out.md' # 将任务输出保存到文件
)
summarize_report_task = Task(
description='分析研究报告,提炼出最关键的3个亮点,并撰写一个吸引人的、不超过20字的新闻标题。',
expected_output='一份包含3个核心亮点和1个新闻标题的简短总结。',
agent=reporting_analyst, # 指定执行此任务的智能体
context=[research_topic_task], # 此任务的上下文是研究任务的输出
)
# ====================================================================
# 4. 组建 CrewAI 团队
# ====================================================================
my_crew = Crew(
agents=[researcher, reporting_analyst], # 传入智能体列表
tasks=[research_topic_task, summarize_report_task], # 传入任务列表
process=Process.sequential, # 任务按顺序执行
verbose=True, # 设置详细日志级别 (False=无, True=有)
)
# ====================================================================
# 5. 运行 CrewAI 团队
# ====================================================================
if __name__ == "__main__":
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}] --- CrewAI 开始工作 ---")
try:
# 启动团队工作,并获取最终结果
result = my_crew.kickoff()
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}] --- 任务完成!以下是智能体生成的结果:---")
print(result)
except Exception as e:
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}] --- CrewAI 执行失败!---")
print(f"错误信息: {e}")
注意修改 api key,enjoy!
附录
提供我的requirements.txt,实在安装不了就直接用这个
`pip install -r requirements.txt
`
aiohappyeyeballs==2.6.1
aiohttp==3.12.15
aiosignal==1.4.0
alembic==1.16.4
annotated-types==0.7.0
anthropic==0.61.0
anyio==4.10.0
appdirs==1.4.4
asgiref==3.9.1
asttokens==3.0.0
async-timeout==4.0.3
attrs==25.3.0
backoff==2.2.1
bcrypt==4.3.0
beautifulsoup4==4.13.4
blinker==1.9.0
browserbase==1.4.0
build==1.3.0
cachetools==5.5.2
certifi==2025.8.3
cffi==1.17.1
charset-normalizer==3.4.2
chroma-hnswlib==0.7.6
chromadb==0.5.23
click==8.2.1
cohere==5.16.2
colorama==0.4.6
coloredlogs==15.0.1
crewai==0.152.0
crewai-tools==0.59.0
cryptography==45.0.5
dashscope==1.24.1
dataclasses-json==0.6.7
decorator==5.2.1
deprecation==2.1.0
diskcache==5.6.3
distro==1.9.0
docker==7.1.0
docstring_parser==0.17.0
durationpy==0.10
embedchain==0.1.128
et_xmlfile==2.0.0
exceptiongroup==1.3.0
executing==2.2.0
fastapi==0.116.1
fastavro==1.12.0
filelock==3.18.0
flatbuffers==25.2.10
frozenlist==1.7.0
fsspec==2025.7.0
google-ai-generativelanguage==0.6.15
google-api-core==2.25.1
google-api-python-client==2.177.0
google-auth==2.40.3
google-auth-httplib2==0.2.0
google-generativeai==0.8.5
googleapis-common-protos==1.70.0
gptcache==0.1.44
greenlet==3.2.3
grpcio==1.74.0
grpcio-status==1.71.2
h11==0.16.0
h2==4.2.0
hpack==4.1.0
httpcore==1.0.9
httplib2==0.22.0
httptools==0.6.4
httpx==0.28.1
httpx-sse==0.4.0
huggingface-hub==0.34.3
humanfriendly==10.0
hyperframe==6.1.0
idna==3.10
importlib_metadata==8.7.0
importlib_resources==6.5.2
instructor==1.10.0
ipython==8.37.0
jedi==0.19.2
Jinja2==3.1.6
jiter==0.10.0
json5==0.12.0
json_repair==0.25.2
jsonpatch==1.33
jsonpickle==4.1.1
jsonpointer==3.0.0
jsonref==1.1.0
jsonschema==4.25.0
jsonschema-specifications==2025.4.1
kubernetes==33.1.0
lancedb==0.24.2
langchain==0.3.27
langchain-cohere==0.3.5
langchain-community==0.3.27
langchain-core==0.3.72
langchain-experimental==0.3.4
langchain-openai==0.2.14
langchain-text-splitters==0.3.9
langsmith==0.3.45
litellm==1.74.3
Mako==1.3.10
markdown-it-py==3.0.0
MarkupSafe==3.0.2
marshmallow==3.26.1
matplotlib-inline==0.1.7
mdurl==0.1.2
mem0ai==0.1.115
mmh3==5.2.0
monotonic==1.6
mpmath==1.3.0
multidict==6.6.3
mypy_extensions==1.1.0
networkx==3.4.2
nodeenv==1.9.1
numpy==2.2.6
oauthlib==3.3.1
onnxruntime==1.22.0
openai==1.99.1
openpyxl==3.1.5
opentelemetry-api==1.36.0
opentelemetry-exporter-otlp-proto-common==1.36.0
opentelemetry-exporter-otlp-proto-grpc==1.36.0
opentelemetry-exporter-otlp-proto-http==1.36.0
opentelemetry-instrumentation==0.57b0
opentelemetry-instrumentation-asgi==0.57b0
opentelemetry-instrumentation-fastapi==0.57b0
opentelemetry-proto==1.36.0
opentelemetry-sdk==1.36.0
opentelemetry-semantic-conventions==0.57b0
opentelemetry-util-http==0.57b0
orjson==3.11.1
overrides==7.7.0
packaging==25.0
pandas==2.3.1
parso==0.8.4
pdfminer.six==20250506
pdfplumber==0.11.7
pillow==11.3.0
playwright==1.54.0
portalocker==2.7.0
posthog==3.25.0
prompt_toolkit==3.0.51
propcache==0.3.2
proto-plus==1.26.1
protobuf==5.29.5
pure_eval==0.2.3
pyarrow==21.0.0
pyasn1==0.6.1
pyasn1_modules==0.4.2
pybase64==1.4.2
pycparser==2.22
pydantic==2.11.7
pydantic-settings==2.10.1
pydantic_core==2.33.2
pyee==13.0.0
Pygments==2.19.2
PyJWT==2.10.1
pyparsing==3.2.3
pypdf==5.9.0
pypdfium2==4.30.0
PyPika==0.48.9
pyproject_hooks==1.2.0
pyreadline3==3.5.4
pyright==1.1.403
pysbd==0.3.4
python-dateutil==2.9.0.post0
python-dotenv==1.1.1
pytube==15.0.0
pytz==2025.2
pyvis==0.3.2
pywin32==311
PyYAML==6.0.2
qdrant-client==1.15.1
referencing==0.36.2
regex==2025.7.33
requests==2.32.4
requests-oauthlib==2.0.0
requests-toolbelt==1.0.0
rich==13.9.4
rpds-py==0.26.0
rsa==4.9.1
schema==0.7.7
shellingham==1.5.4
six==1.17.0
sniffio==1.3.1
soupsieve==2.7
SQLAlchemy==2.0.42
stack-data==0.6.3
stagehand==0.5.0
starlette==0.47.2
sympy==1.14.0
tabulate==0.9.0
tenacity==9.1.2
tiktoken==0.10.0
tokenizers==0.20.3
tomli==2.2.1
tomli_w==1.2.0
tqdm==4.67.1
traitlets==5.14.3
typer==0.16.0
types-requests==2.32.4.20250611
typing-inspect==0.9.0
typing-inspection==0.4.1
typing_extensions==4.14.1
tzdata==2025.2
uritemplate==4.2.0
urllib3==2.5.0
uv==0.8.4
uvicorn==0.35.0
watchfiles==1.1.0
wcwidth==0.2.13
websocket-client==1.8.0
websockets==15.0.1
wrapt==1.17.2
yarl==1.20.1
zipp==3.23.0
zstandard==0.23.0
更多推荐
所有评论(0)