CrewAI 基础 02-Agent

在 crewai 中,Agent 相当于团队中的一个成员,不同代理具有不同的角色、擅长领域及内在知识

总的来说,Agent 有以下作用:

  1. 绑定到任务中,让其执行特定任务
  2. 根据角色和目标作出决策
  3. 使用工具
  4. 与其他代理进行沟通
  5. 委派任务给其他代理

也就是说,在 crewai 中,Agent 有自己的知识及解决工具,当自己能力不足时,可以请求团队内其他人协助

关键参数:

属性参数描述
角色role定义代理在团队中的职能和专业知识。
目标goal指导代理决策的单个目标。
背景故事backstory为代理提供上下文和个性,丰富交互。
LLMllm为代理提供支持的语言模型。默认为 “gpt-4” 中指定的模型。OPENAI_MODEL_NAME
工具tools代理可用的功能。默认为空列表。
函数调用 LLMfunction_calling_llm用于工具调用的语言模型,如果指定,则覆盖班组的 LLM。
内存memory代理是否应维护交互的记忆。默认值为 True。
允许委派allow_delegation允许代理将任务委派给其他代理。默认值为 False。
缓存cache为工具使用启用缓存。默认值为 True。
系统模板system_template代理的自定义系统提示模板。
提示模板prompt_template代理的自定义提示模板。
响应模板response_template代理的自定义响应模板。
允许代码执行allow_code_execution为代理启用代码执行。默认值为 False。
Embedderembedder_config代理使用的嵌入器的配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 设置llm
from crewai.llm import LLM
llm=LLM(model="ollama_chat/llama3.1:latest",
base_url="http://192.168.3.155:11434")

# 设置embedder
embedder_config={
"provider": "ollama",
"config": {
"model": 'quentinz/bge-large-zh-v1.5:latest',
"base_url": 'http://localhost:11434'
}
}

# 设置tool
from api_key import SERPER_API_KEY,TAVILY_API_KEY
import os
os.environ["SERPER_API_KEY"] = SERPER_API_KEY # serper.dev API key
from crewai_tools import SerperDevTool
tools=[SerperDevTool(n_results=3)]

# 定义Agent
from crewai import Agent
cv_agent=Agent(
role="计算机视觉工程师",
goal="查找并理解计算机视觉工程师的工作内容,熟悉的代码和工具",
backstory = "已经在计算机视觉领域工作5年,有丰富的计算机视觉经验,尤其是在工业缺陷检测方面",
llm=llm,
memory=True,
verbose=True,
tools=tools,
embedder_config=embedder_config
)

nlp_agent=Agent(
role="自然语言开发工程师",
goal="查找并理解计算机视觉工程师的工作内容,熟悉的代码和工具",
backstory = "已经在自然语言开发领域工作10年,有丰富的自然语言开发经验",
llm=llm,
memory=True,
verbose=True,
tools=tools,
embedder_config=embedder_config
)

cv_agent,nlp_agent
1
2
>    (Agent (role=计算机视觉工程师, goal=查找并理解计算机视觉工程师的工作内容,熟悉的代码和工具, backstory=已经在计算机视觉领域工作 5 年,有丰富的计算机视觉经验,尤其是在工业缺陷检测方面),
> Agent (role=自然语言开发工程师, goal=查找并理解计算机视觉工程师的工作内容,熟悉的代码和工具, backstory=已经在自然语言开发领域工作 10 年,有丰富的自然语言开发经验))

Agent 的初始化需要提供 role、goal、backstory,最后还会绑定到特定任务上,这些概念有重叠,应该如何设计?以下列举官方的例子

rolegoalbackstory
研究分析师查找并总结有关特定主题的信息你是一位经验丰富的研究人员,注重细节
高级数据科学家分析和解释复杂的数据集,提供可操作的见解拥有超过 10 年的数据科学和机器学习经验,你擅长在复杂的数据集中发现模式
高级 Python 开发人员编写和调试 Python 代码拥有 10 年经验的专业 Python 开发人员
数据分析师对大型数据集进行深入分析擅长大数据分析和模式识别
客户服务代表协助客户解决他们的问题有丰富的客户支持经验,注重客户满意度

可以看出以下内容:

  • Role:Agent 的角色定位,相当于团队中的岗位
  • Goal:Agent 的目标,相当于岗位职责
  • Backstory:Agent 历史,该角色的历史经验、擅长内容