autogen_ext.memory.redis#
- pydantic model RedisMemoryConfig[Quelle]#
Bases:
BaseModelKonfiguration für Redis-basierte Vektorspeicher.
Diese Klasse definiert die Konfigurationsoptionen für die Verwendung von Redis als Vektorspeicher, der semantischen Speicher unterstützt. Sie ermöglicht die Anpassung der Redis-Verbindung, der Indexeinstellungen, der Parameter für Ähnlichkeitssuche und des Einbettungsmodells.
JSON-Schema anzeigen
{ "title": "RedisMemoryConfig", "description": "Configuration for Redis-based vector memory.\n\nThis class defines the configuration options for using Redis as a vector memory store,\nsupporting semantic memory. It allows customization of the Redis connection, index settings,\nsimilarity search parameters, and embedding model.", "type": "object", "properties": { "redis_url": { "default": "redis://:6379", "description": "url of the Redis instance", "title": "Redis Url", "type": "string" }, "index_name": { "default": "chat_history", "description": "Name of the Redis collection", "title": "Index Name", "type": "string" }, "prefix": { "default": "memory", "description": "prefix of the Redis collection", "title": "Prefix", "type": "string" }, "sequential": { "default": false, "description": "ignore semantic similarity and simply return memories in sequential order", "title": "Sequential", "type": "boolean" }, "distance_metric": { "default": "cosine", "enum": [ "cosine", "ip", "l2" ], "title": "Distance Metric", "type": "string" }, "algorithm": { "default": "flat", "enum": [ "flat", "hnsw" ], "title": "Algorithm", "type": "string" }, "top_k": { "default": 10, "description": "Number of results to return in queries", "title": "Top K", "type": "integer" }, "datatype": { "default": "float32", "enum": [ "uint8", "int8", "float16", "float32", "float64", "bfloat16" ], "title": "Datatype", "type": "string" }, "distance_threshold": { "default": 0.7, "description": "Minimum similarity score threshold", "title": "Distance Threshold", "type": "number" }, "model_name": { "default": "sentence-transformers/all-mpnet-base-v2", "description": "Embedding model name", "title": "Model Name", "type": "string" } } }
- Felder:
algorithm (Literal['flat', 'hnsw'])datatype (Literal['uint8', 'int8', 'float16', 'float32', 'float64', 'bfloat16'])distance_metric (Literal['cosine', 'ip', 'l2'])distance_threshold (float)index_name (str)model_name (str)prefix (str)redis_url (str)sequential (bool)top_k (int)
- class RedisMemory(config: RedisMemoryConfig | None = None)[Quelle]#
Bases:
Memory,Component[RedisMemoryConfig]Speichern und Abrufen von Erinnerungen mithilfe von Vektorähnlichkeitssuche, angetrieben durch RedisVL.
RedisMemory bietet eine vektorbasierte Speicherimplementierung, die RedisVL zum Speichern und Abrufen von Inhalten basierend auf semantischer Ähnlichkeit oder sequentieller Reihenfolge verwendet. Sie verbessert Agenten die Fähigkeit, relevante Informationen während Gesprächen abzurufen, indem Vektoreinbettungen verwendet werden, um ähnliche Inhalte zu finden.
Diese Implementierung erfordert die Installation der RedisVL-Erweiterung. Installieren Sie mit
pip install "autogen-ext[redisvl]"
Zusätzlich benötigen Sie Zugriff auf eine Redis-Instanz. Um eine lokale Instanz von Redis in Docker auszuführen
docker run -d --name redis -p 6379:6379 redis:8
So laden Sie Redis herunter und führen es lokal aus
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list sudo apt-get update > /dev/null 2>&1 sudo apt-get install redis-server > /dev/null 2>&1 redis-server --daemonize yes
- Parameter:
config (RedisMemoryConfig | None) – Konfiguration für den Redis-Speicher. Wenn None, wird standardmäßig eine RedisMemoryConfig mit empfohlenen Einstellungen verwendet.
Beispiel
from logging import WARNING, getLogger import asyncio from autogen_agentchat.agents import AssistantAgent from autogen_agentchat.ui import Console from autogen_core.memory import MemoryContent, MemoryMimeType from autogen_ext.memory.redis import RedisMemory, RedisMemoryConfig from autogen_ext.models.openai import OpenAIChatCompletionClient logger = getLogger() logger.setLevel(WARNING) # Define tool to use async def get_weather(city: str, units: str = "imperial") -> str: if units == "imperial": return f"The weather in {city} is 73 °F and Sunny." elif units == "metric": return f"The weather in {city} is 23 °C and Sunny." else: return f"Sorry, I don't know the weather in {city}." async def main(): # Initailize Redis memory redis_memory = RedisMemory( config=RedisMemoryConfig( redis_url="redis://:6379", index_name="chat_history", prefix="memory", ) ) # Add user preferences to memory await redis_memory.add( MemoryContent( content="The weather should be in metric units", mime_type=MemoryMimeType.TEXT, metadata={"category": "preferences", "type": "units"}, ) ) await redis_memory.add( MemoryContent( content="Meal recipe must be vegan", mime_type=MemoryMimeType.TEXT, metadata={"category": "preferences", "type": "dietary"}, ) ) model_client = OpenAIChatCompletionClient( model="gpt-4o", ) # Create assistant agent with ChromaDB memory assistant_agent = AssistantAgent( name="assistant_agent", model_client=model_client, tools=[get_weather], memory=[redis_memory], ) stream = assistant_agent.run_stream(task="What is the weather in New York?") await Console(stream) await model_client.close() await redis_memory.close() asyncio.run(main())
Ausgabe
---------- TextMessage (user) ---------- What is the weather in New York? ---------- MemoryQueryEvent (assistant_agent) ---------- [MemoryContent(content='The weather should be in metric units', mime_type=<MemoryMimeType.TEXT: 'text/plain'>, metadata={'category': 'preferences', 'type': 'units'})] ---------- ToolCallRequestEvent (assistant_agent) ---------- [FunctionCall(id='call_tyCPvPPAV4SHWhtfpM6UMemr', arguments='{"city":"New York","units":"metric"}', name='get_weather')] ---------- ToolCallExecutionEvent (assistant_agent) ---------- [FunctionExecutionResult(content='The weather in New York is 23 °C and Sunny.', name='get_weather', call_id='call_tyCPvPPAV4SHWhtfpM6UMemr', is_error=False)] ---------- ToolCallSummaryMessage (assistant_agent) ---------- The weather in New York is 23 °C and Sunny.- component_config_schema#
Alias von
RedisMemoryConfig
- component_provider_override: ClassVar[str | None] = 'autogen_ext.memory.redis_memory.RedisMemory'#
Überschreibe den Anbieter-String für die Komponente. Dies sollte verwendet werden, um zu verhindern, dass interne Modulnamen Teil des Modulnamens werden.
- async update_context(model_context: ChatCompletionContext) UpdateContextResult[Quelle]#
Aktualisiert den Modellkontext mit relevantem Speicherinhalt.
Diese Methode ruft speicherinhalt ab, der für die letzte Nachricht im Kontext relevant ist, und fügt ihn als Systemnachricht hinzu. Diese Implementierung verwendet die letzte Nachricht im Kontext als Abfrage, um semantisch ähnliche Erinnerungen zu finden, und fügt alle zu einem einzigen Systemnachricht im Kontext hinzu.
- Parameter:
model_context (ChatCompletionContext) – Der Modellkontext, der mit relevanten Erinnerungen aktualisiert werden soll.
- Gibt zurück:
UpdateContextResult – Objekt, das die zur Aktualisierung des Kontexts verwendeten Erinnerungen enthält.
- async add(content: MemoryContent, cancellation_token: CancellationToken | None = None) None[Quelle]#
Fügt einen Speicherinhalt in Redis hinzu.
Hinweis
Wenn RedisMemoryConfig nicht auf „sequential“ gesetzt ist, erstellt RedisMemory zur Durchführung einer semantischen Suche über gespeicherte Erinnerungen eine Vektoreinbettung aus dem Inhaltsfeld eines MemoryContent-Objekts. Dieser Inhalt wird als Text, JSON oder Markdown angenommen und an das in RedisMemoryConfig angegebene Vektoreinbettungsmodell übergeben.
- Parameter:
content (MemoryContent) – Der zu speichernde Inhalt in Redis.
cancellation_token (CancellationToken) – Token zur Beendigung des Vorgangs. Nicht verwendet.
- async query(query: str | MemoryContent, cancellation_token: CancellationToken | None = None, **kwargs: Any) MemoryQueryResult[Quelle]#
Abfrage von Speicherinhalt basierend auf semantischer Vektorähnlichkeit.
Hinweis
RedisMemory.query() unterstützt zusätzliche Schlüsselwortargumente zur Verbesserung der Abfrageleistung. top_k (int): Die maximale Anzahl relevanter Erinnerungen, die einbezogen werden sollen. Standardwert ist 10. distance_threshold (float): Der maximale Abstand im Vektorraum, um eine Erinnerung bei der Durchführung einer Kosinus-Ähnlichkeitssuche als semantisch ähnlich zu betrachten. Standardwert ist 0.7. sequential (bool): Ignoriert semantische Ähnlichkeit und gibt die top_k neuesten Erinnerungen zurück.
- Parameter:
query (str | MemoryContent) – Abfrage für die Vektorähnlichkeitssuche. Wenn ein String übergeben wird, wird daraus mit dem in RedisMemoryConfig angegebenen Modell eine Vektoreinbettung erstellt. Wenn ein MemoryContent-Objekt übergeben wird, wird das Inhaltsfeld dieses Objekts extrahiert und daraus mit dem in RedisMemoryConfig angegebenen Modell eine Vektoreinbettung erstellt.
cancellation_token (CancellationToken) – Token zur Beendigung des Vorgangs. Nicht verwendet.
- Gibt zurück:
memoryQueryResult – Objekt, das Erinnerungen enthält, die für die angegebene Abfrage relevant sind.