记忆
crewAI 内存系统简介¶
增强代理智能
crewAI 框架引入了一个复杂的内存系统,旨在显著增强 AI 代理的能力。该系统包括短期内存、长期内存、实体内存和上下文内存,每个部分在帮助代理记忆、推理和学习过去交互方面都发挥着独特的作用。
内存系统组件¶
| 组件 | 描述 |
|---|---|
| 短期内存 | 使用 RAG 临时存储最近的交互和结果,使代理能够在当前执行期间回忆和利用与其当前上下文相关的信息。 |
| 长期内存 | 保存来自过去执行的有价值见解和学习,允许代理随时间建立和精炼其知识。 |
| 实体内存 | 捕获和组织在任务中遇到的实体(人、地点、概念)的信息,促进更深入的理解和关系映射。使用 RAG 存储实体信息。 |
| 上下文内存 | 通过结合 短期内存、长期内存 和 实体内存,维持交互的上下文,帮助代理在一系列任务或对话中保持响应的连贯性和相关性。 |
内存系统如何赋能代理¶
-
上下文感知:通过短期内存和上下文内存,代理获得了在对话或任务序列中保持上下文的能力,从而产生更连贯和相关的响应。
-
经验积累:长期内存允许代理积累经验,从过去的行动中学习,以改进未来的决策和问题解决。
-
实体理解:通过维护实体内存,代理可以识别和记住关键实体,增强其处理和交互复杂信息的能力。
在您的团队中实现内存¶
在配置团队时,您可以启用和自定义每个内存组件,以适应团队的目标和将要执行的任务性质。
默认情况下,内存系统是禁用的,您可以通过在团队配置中设置 memory=True 来确保其处于活动状态。内存将默认使用 OpenAI 嵌入,但您可以通过设置 embedder 为不同的模型来更改它。也可以使用您自己的实例初始化内存实例。
embedder 仅适用于使用 Chroma 和 EmbedChain 包进行 RAG 的 短期内存。
长期内存 使用 SQLite3 存储任务结果。目前,无法覆盖这些存储实现。
数据存储文件保存在使用 appdirs 包找到的平台特定位置,
项目的名称可以通过 CREWAI_STORAGE_DIR 环境变量覆盖。
示例:为团队配置内存¶
from crewai import Crew, Agent, Task, Process
# 组装具有内存能力的团队
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True
)
示例:使用自定义内存实例,例如 FAISS 作为向量数据库¶
from crewai import Crew, Agent, Task, Process
# 组装具有内存能力的团队
my_crew = Crew(
agents=[...],
tasks=[...],
process="Process.sequential",
memory=True,
long_term_memory=EnhanceLongTermMemory(
storage=LTMSQLiteStorage(
db_path="/my_data_dir/my_crew1/long_term_memory_storage.db"
)
),
short_term_memory=EnhanceShortTermMemory(
storage=CustomRAGStorage(
crew_name="my_crew",
storage_type="short_term",
data_dir="//my_data_dir",
model=embedder["model"],
dimension=embedder["dimension"],
),
),
entity_memory=EnhanceEntityMemory(
storage=CustomRAGStorage(
crew_name="my_crew",
storage_type="entities",
data_dir="//my_data_dir",
model=embedder["model"],
dimension=embedder["dimension"],
),
),
verbose=True,
)
额外嵌入提供者¶
使用 OpenAI 嵌入(已默认)¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "openai",
"config": {
"model": 'text-embedding-3-small'
}
}
)
使用 Google AI 嵌入¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "google",
"config": {
"model": 'models/embedding-001',
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain"
}
}
)
使用 Azure OpenAI 嵌入¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "azure_openai",
"config": {
"model": 'text-embedding-ada-002',
"deployment_name": "your_embedding_model_deployment_name"
}
}
)
使用 GPT4ALL 嵌入¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "gpt4all"
}
)
使用 Vertex AI 嵌入¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "vertexai",
"config": {
"model": 'textembedding-gecko'
}
}
)
使用 Cohere 嵌入¶
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "cohere",
"config": {
"model": "embed-english-v3.0",
"vector_dimension": 1024
}
}
)
重置内存¶
重置内存选项¶
-l, --long- 描述: 重置长期内存。
- 类型: 标志(布尔值)
-
默认: False
-
-s, --short - 描述: 重置短期内存。
- 类型: 标志(布尔值)
-
默认: False
-
-e, --entities - 描述: 重置实体内存。
- 类型: 标志(布尔值)
-
默认: False
-
-k, --kickoff-outputs - 描述: 重置最新的启动任务输出。
- 类型: 标志(布尔值)
-
默认: False
-
-a, --all - 描述: 重置所有内存。
- 类型: 标志(布尔值)
- 默认: False
使用 crewAI 内存系统的优势¶
- 自适应学习: 团队随着时间的推移变得更加高效,适应新信息并改进其任务处理方法。
- 增强个性化: 内存使代理能够记住用户偏好和历史上的交互,从而提供个性化体验。
- 改进问题解决: 访问丰富的内存存储帮助代理做出更明智的决策,借鉴过去的经验和上下文洞察。
入门指南¶
将 crewAI 的内存系统集成到您的项目中非常简单。通过利用提供的内存组件和配置,您可以快速为您的代理赋能,使其能够从交互中记忆、推理和学习,从而开启新的智能和能力水平。