高级特性 #
记忆系统 #
记忆类型 #
text
┌─────────────────────────────────────────────────────────────┐
│ CrewAI 记忆系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 短期记忆(Short-term Memory) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ - 存储当前会话的上下文 │ │
│ │ - 最近交互的信息 │ │
│ │ - 临时存储,会话结束后清除 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 长期记忆(Long-term Memory) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ - 持久化的知识存储 │ │
│ │ - 跨会话的信息保留 │ │
│ │ - 使用向量数据库存储 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 实体记忆(Entity Memory) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ - 存储特定实体的信息 │ │
│ │ - 实体间的关系和属性 │ │
│ │ - 结构化的知识表示 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
启用记忆 #
python
from crewai import Agent, Crew
agent = Agent(
role="客服助手",
goal="提供个性化服务",
backstory="专业的客服代表",
memory=True
)
crew = Crew(
agents=[agent],
tasks=[task],
memory=True
)
配置 Embedder #
python
crew = Crew(
agents=[agent],
tasks=[task],
memory=True,
embedder={
"provider": "openai",
"config": {
"model": "text-embedding-3-small"
}
}
)
自定义记忆存储 #
python
from crewai.memory import LongTermMemory
crew = Crew(
agents=[agent],
tasks=[task],
memory=True,
long_term_memory=LongTermMemory(
storage=custom_storage
)
)
知识源 #
字符串知识源 #
python
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
knowledge = StringKnowledgeSource(
content="""
公司信息:
- 名称:ABC 公司
- 成立:2020 年
- 业务:AI 解决方案
"""
)
agent = Agent(
role="公司助手",
goal="回答公司相关问题",
knowledge_sources=[knowledge]
)
文件知识源 #
python
from crewai.knowledge.source.text_file_knowledge_source import TextFileKnowledgeSource
knowledge = TextFileKnowledgeSource(
file_paths=["docs/company.txt", "docs/products.txt"]
)
agent = Agent(
role="知识助手",
knowledge_sources=[knowledge]
)
PDF 知识源 #
python
from crewai.knowledge.source.pdf_knowledge_source import PDFKnowledgeSource
knowledge = PDFKnowledgeSource(
file_paths=["docs/manual.pdf"]
)
agent = Agent(
role="文档助手",
knowledge_sources=[knowledge]
)
Crew 级别知识源 #
python
crew = Crew(
agents=[agent1, agent2],
tasks=[task1, task2],
knowledge_sources=[knowledge1, knowledge2]
)
异步执行 #
异步 Crew 执行 #
python
import asyncio
from crewai import Crew
async def main():
crew = Crew(
agents=[agent],
tasks=[task]
)
result = await crew.akickoff(inputs={'topic': 'AI'})
print(result.raw)
asyncio.run(main())
异步任务执行 #
python
from crewai import Task
async_task = Task(
description="获取实时数据",
expected_output="数据报告",
agent=data_collector,
async_execution=True
)
sync_task = Task(
description="分析数据",
expected_output="分析报告",
agent=analyst,
context=[async_task]
)
批量异步执行 #
python
async def process_multiple():
inputs_list = [
{'topic': 'AI'},
{'topic': 'Blockchain'},
{'topic': 'IoT'}
]
results = await crew.akickoff_for_each(inputs=inputs_list)
for result in results:
print(result.raw)
asyncio.run(process_multiple())
流式输出 #
启用流式输出 #
python
crew = Crew(
agents=[agent],
tasks=[task],
stream=True
)
streaming = crew.kickoff(inputs={'topic': 'AI'})
for chunk in streaming:
print(chunk.content, end="", flush=True)
result = streaming.result
流式输出处理 #
python
def process_stream(crew, inputs):
streaming = crew.kickoff(inputs=inputs)
full_output = ""
for chunk in streaming:
full_output += chunk.content
yield chunk.content
return full_output
推理与规划 #
Agent 推理 #
python
from crewai import Agent
reasoning_agent = Agent(
role="战略规划师",
goal="分析复杂问题并制定计划",
backstory="经验丰富的战略顾问",
reasoning=True,
max_reasoning_attempts=3,
verbose=True
)
Crew 规划 #
python
from crewai import Crew
crew = Crew(
agents=[researcher, analyst, writer],
tasks=[research_task, analysis_task, write_task],
planning=True,
planning_llm="gpt-4o",
verbose=True
)
规划流程 #
text
┌─────────────────────────────────────────────────────────────┐
│ 规划流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 分析阶段 │
│ └─> AgentPlanner 分析所有任务 │
│ └─> 识别任务依赖关系 │
│ └─> 确定执行顺序 │
│ │
│ 2. 计划生成 │
│ └─> 为每个任务生成详细计划 │
│ └─> 定义预期输出 │
│ └─> 分配资源 │
│ │
│ 3. 计划注入 │
│ └─> 计划添加到任务描述 │
│ └─> Agent 获得执行指导 │
│ │
│ 4. 执行阶段 │
│ └─> Agent 按计划执行 │
│ └─> 动态调整(如需要) │
│ │
└─────────────────────────────────────────────────────────────┘
多模态支持 #
启用多模态 #
python
from crewai import Agent
multimodal_agent = Agent(
role="视觉内容分析师",
goal="分析和处理文本及图像内容",
backstory="多模态 AI 专家",
multimodal=True,
verbose=True
)
处理图像 #
python
from crewai import Task
image_task = Task(
description="""
分析提供的图像:
1. 识别图像中的主要对象
2. 描述场景内容
3. 提取文本信息(如有)
""",
expected_output="图像分析报告",
agent=multimodal_agent
)
代码执行 #
安全模式 #
python
from crewai import Agent
safe_agent = Agent(
role="代码分析师",
goal="分析和执行代码",
backstory="安全的代码执行专家",
allow_code_execution=True,
code_execution_mode="safe",
max_execution_time=300
)
不安全模式 #
python
unsafe_agent = Agent(
role="代码执行器",
goal="直接执行代码",
backstory="受信任环境中的代码执行",
allow_code_execution=True,
code_execution_mode="unsafe"
)
代码执行任务 #
python
from crewai import Task
code_task = Task(
description="""
编写并执行 Python 代码:
1. 读取 CSV 文件
2. 数据清洗
3. 生成统计报告
""",
expected_output="执行结果和报告",
agent=safe_agent
)
上下文管理 #
自动上下文管理 #
python
agent = Agent(
role="分析师",
goal="分析大型文档",
backstory="文档分析专家",
respect_context_window=True
)
严格上下文限制 #
python
agent = Agent(
role="法律审查员",
goal="精确分析法律文档",
backstory="需要完整上下文的法律专家",
respect_context_window=False
)
使用 RAG 处理大数据 #
python
from crewai_tools import RagTool
rag_tool = RagTool()
agent = Agent(
role="知识库助手",
goal="从大型知识库检索信息",
tools=[rag_tool],
respect_context_window=True
)
回调系统 #
步骤回调 #
python
def step_callback(output):
print(f"[Step] Agent: {output.agent_role}")
print(f"[Step] Action: {output.action}")
print(f"[Step] Result: {output.text[:100]}...")
agent = Agent(
role="分析师",
step_callback=step_callback
)
任务回调 #
python
def task_callback(output):
print(f"[Task] Completed: {output.description}")
save_result(output.raw)
task = Task(
description="分析任务",
callback=task_callback
)
Crew 回调 #
python
crew = Crew(
agents=[agent],
tasks=[task],
step_callback=step_callback,
task_callback=task_callback
)
日期注入 #
启用日期注入 #
python
from crewai import Agent
agent = Agent(
role="市场分析师",
goal="跟踪市场动态",
backstory="时间敏感的分析专家",
inject_date=True,
date_format="%B %d, %Y"
)
日期格式 #
python
agent = Agent(
role="报告生成器",
inject_date=True,
date_format="%Y-%m-%d %H:%M:%S"
)
自定义模板 #
系统模板 #
python
agent = Agent(
role="助手",
system_template="""<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>"""
)
提示模板 #
python
agent = Agent(
role="助手",
prompt_template="""<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>"""
)
响应模板 #
python
agent = Agent(
role="助手",
response_template="""<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
)
重放功能 #
查看任务输出 #
bash
crewai log-tasks-outputs
从特定任务重放 #
bash
crewai replay -t <task_id>
高级配置 #
速率限制 #
python
crew = Crew(
agents=[agent],
tasks=[task],
max_rpm=30
)
执行时间限制 #
python
agent = Agent(
role="分析师",
max_execution_time=300,
max_iter=25
)
重试配置 #
python
agent = Agent(
role="分析师",
max_retry_limit=3
)
下一步 #
现在你已经掌握了高级特性,接下来学习 最佳实践,了解生产级开发的技巧!
最后更新:2026-04-04