CrewAI#
CrewAI - фреймворк для оркестровки ролевых автономных агентов искусственного интеллекта. Используя коллективный интеллект, CrewAI позволяет агентам работать совместно гладко, решая сложные задачи.
Фреймворк имеет сложную систему памяти, предназначенную для значительного повышения возможностей агентов ИИ. Эта система помогает агентам запоминать, рассуждать и учиться на основе прошлых взаимодействий. Можно использовать Vector DB для хранения краткосрочной памяти и памяти сущностей агентов CrewAI.
Краткосрочная память — временно хранит недавние взаимодействия и результаты с использованием RAG, позволяя агентам вспоминать и использовать информацию, актуальную для их текущего контекста во время текущих исполнений.
Память сущности — фиксирует и организует информацию о сущностях (людях, местах, концепциях), встречающихся при выполнении задач, способствуя более глубокому пониманию и картированию отношений. Использует RAG для хранения информации о сущностях.
Использование с Vector DB#
Установка#
Сначала установите пакеты клиента CrewAI и Vector DB:
pip install 'crewai[tools]' 'qdrant-client[fastembed]'
Настройка проекта CrewAI#
Подробнее как настроить проект CrewAI можно узнать здесь. Предположим, проект был назван mycrew.
Определение хранилища Vector DB#
src/mycrew/storage.py
from typing import Any, Dict, List, Optional
from crewai.memory.storage.rag_storage import RAGStorage
from qdrant_client import QdrantClient
class QdrantStorage(RAGStorage):
"""
Extends Storage to handle embeddings for memory entries using Qdrant.
"""
def __init__(self, type, allow_reset=True, embedder_config=None, crew=None):
super().__init__(type, allow_reset, embedder_config, crew)
def search(
self,
query: str,
limit: int = 3,
filter: Optional[dict] = None,
score_threshold: float = 0,
) -> List[Any]:
points = self.client.query(
self.type,
query_text=query,
query_filter=filter,
limit=limit,
score_threshold=score_threshold,
)
results = [
{
"id": point.id,
"metadata": point.metadata,
"context": point.document,
"score": point.score,
}
for point in points
]
return results
def reset(self) -> None:
self.client.delete_collection(self.type)
def _initialize_app(self):
self.client = QdrantClient()
# uncomment the next line of code
# and choose from the [supported embedders](https://qdrant.github.io/fastembed/examples/Supported_Models/)
# if you don't want to use the default one
# self.client._embedding_model_name = 'jinaai/jina-embeddings-v2-small-en'
if not self.client.collection_exists(self.type):
self.client.create_collection(
collection_name=self.type,
vectors_config=self.client.get_fastembed_vector_params(),
sparse_vectors_config=self.client.get_fastembed_sparse_vector_params(),
)
def save(self, value: Any, metadata: Dict[str, Any]) -> None:
self.client.add(self.type, documents=[value], metadata=[metadata or {}])
Методы add и query используют FastEmbed для векторизации данных. Однако можно изменить его при необходимости.
Создание команды#
Можно узнать больше о настройке агентов и задач для команды здесь. Можно обновить инстанцирование Crew для использования механизма хранения.
from crewai import Crew
from crewai.memory.entity.entity_memory import EntityMemory
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from mycrew.storage import QdrantStorage
Crew(
# Import the agents and tasks here.
memory=True,
entity_memory=EntityMemory(storage=QdrantStorage("entity")),
short_term_memory=ShortTermMemory(storage=QdrantStorage("short-term")),
)
Теперь можно запустить рабочий процесс группы с помощью crew run. Он будет использовать Vector DB для поглощения и извлечения памяти.