跳转至

记忆

crewAI 内存系统简介

增强代理智能

crewAI 框架引入了一个复杂的内存系统,旨在显著增强 AI 代理的能力。该系统包括短期内存、长期内存、实体内存和上下文内存,每个部分在帮助代理记忆、推理和学习过去交互方面都发挥着独特的作用。

内存系统组件

组件 描述
短期内存 使用 RAG 临时存储最近的交互和结果,使代理能够在当前执行期间回忆和利用与其当前上下文相关的信息。
长期内存 保存来自过去执行的有价值见解和学习,允许代理随时间建立和精炼其知识。
实体内存 捕获和组织在任务中遇到的实体(人、地点、概念)的信息,促进更深入的理解和关系映射。使用 RAG 存储实体信息。
上下文内存 通过结合 短期内存长期内存实体内存,维持交互的上下文,帮助代理在一系列任务或对话中保持响应的连贯性和相关性。

内存系统如何赋能代理

  1. 上下文感知:通过短期内存和上下文内存,代理获得了在对话或任务序列中保持上下文的能力,从而产生更连贯和相关的响应。

  2. 经验积累:长期内存允许代理积累经验,从过去的行动中学习,以改进未来的决策和问题解决。

  3. 实体理解:通过维护实体内存,代理可以识别和记住关键实体,增强其处理和交互复杂信息的能力。

在您的团队中实现内存

在配置团队时,您可以启用和自定义每个内存组件,以适应团队的目标和将要执行的任务性质。 默认情况下,内存系统是禁用的,您可以通过在团队配置中设置 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
        }
    }
)

重置内存

crewai reset-memories [OPTIONS]

重置内存选项

  • -l, --long
  • 描述: 重置长期内存。
  • 类型: 标志(布尔值)
  • 默认: False

  • -s, --short

  • 描述: 重置短期内存。
  • 类型: 标志(布尔值)
  • 默认: False

  • -e, --entities

  • 描述: 重置实体内存。
  • 类型: 标志(布尔值)
  • 默认: False

  • -k, --kickoff-outputs

  • 描述: 重置最新的启动任务输出。
  • 类型: 标志(布尔值)
  • 默认: False

  • -a, --all

  • 描述: 重置所有内存。
  • 类型: 标志(布尔值)
  • 默认: False

使用 crewAI 内存系统的优势

  • 自适应学习: 团队随着时间的推移变得更加高效,适应新信息并改进其任务处理方法。
  • 增强个性化: 内存使代理能够记住用户偏好和历史上的交互,从而提供个性化体验。
  • 改进问题解决: 访问丰富的内存存储帮助代理做出更明智的决策,借鉴过去的经验和上下文洞察。

入门指南

将 crewAI 的内存系统集成到您的项目中非常简单。通过利用提供的内存组件和配置,您可以快速为您的代理赋能,使其能够从交互中记忆、推理和学习,从而开启新的智能和能力水平。