Redis

Redis podporuje různé kontextové vzory napříč sadami SDK. V .NET připojte vyhledávání založené na Redisu k obecnému TextSearchProvider výrazu RAG. Balíček Agent Framework Redis poskytuje prohledávatelnou paměť a poskytovatele historie konverzací pro Python.

Pattern API sada SDK Chování
HADR TextSearchProvider s vyhledávacím adaptérem Redis platforma .NET Načte relevantní obsah Redis před vyvoláním nebo prostřednictvím vyhledávacího nástroje na vyžádání.
Prohledávatelná paměť RedisContextProvider Python Extrahuje konverzační podrobnosti a načte relevantní kontext pomocí fulltextového nebo hybridního vektorového vyhledávání.
Historie konverzací RedisHistoryProvider Python Zachová a znovu načte přesný přepis zprávy pro relaci.

Přidání RAG s využitím TextSearchProvider

Pro .NET použijte model nezávislý TextSearchProvider na poskytovateli. Implementujte jeho vyhledávací adaptér s klientem Redis nebo konektorem pro vektorové úložiště vybraným vaší aplikací, namapujte výsledky Redis na TextSearchProvider.TextSearchResulta připojte poskytovatele prostřednictvím AIContextProviders.

Tento přístup podporuje rag založený na Redisu bez nutnosti balíčku zprostředkovatele kontextu rozhraní Agent Framework specifického pro Redis.

Nainstalujte balíček

pip install agent-framework-redis --pre

Přidání prohledávatelné paměti

Tento vzor použijte, když by měl agent odvolat vybrané relevantní informace, a ne přehrát každou předchozí zprávu.

Předpoklady

  • Nasazení Redis s podporou RediSearch, jako je Redis Stack nebo kompatibilní spravovaná služba.
  • Projekt Microsoft Foundry a nasazení modelu pro ukázkového agenta.
  • Zprostředkovatel vkládání, když povolíte hybridní vektorové vyhledávání.

Konfigurace prohledávatelné paměti

agent_idPoužívejte application_ida user_id rozdělte vzpomínky. Pokud chcete hybridní načtení, přidejte vektorizátor Redis a nastavení vektorového pole.

# Create a provider with partition scope and OpenAI embeddings

# Please set OPENAI_API_KEY to use the OpenAI vectorizer.
# For chat responses, also set FOUNDRY_PROJECT_ENDPOINT and FOUNDRY_MODEL.

# We attach an embedding vectorizer so the provider can perform hybrid (text + vector)
# retrieval. If you prefer text-only retrieval, instantiate RedisContextProvider without the
# 'vectorizer' and vector_* parameters.
vectorizer = OpenAITextVectorizer(
    model="text-embedding-ada-002",
    api_config={"api_key": os.getenv("OPENAI_API_KEY")},
    cache=EmbeddingsCache(name="openai_embeddings_cache", redis_url=REDIS_URL),
)
# The provider manages persistence and retrieval. application_id/agent_id/user_id
# scope data for multi-tenant separation; thread_id (set later) narrows to a
# specific conversation.
provider = RedisContextProvider(
    source_id="redis_context",
    redis_url=REDIS_URL,
    index_name="redis_basics",
    application_id="matrix_of_kermits",
    agent_id="agent_kermit",
    user_id="kermit",
    redis_vectorizer=vectorizer,
    vector_field_name="vector",
    vector_algorithm="hnsw",
    vector_distance_metric="cosine",
)

Připojení paměti k agentu

Přidejte zprostředkovatele do context_providerssouboru . Poskytovatel ukládá konverzační podrobnosti po spuštění a zobrazí relevantní kontext před pozdějším spuštěním.

# Create chat client for the agent
client = create_chat_client()
# Create agent wired to the Redis context provider. The provider automatically
# persists conversational details and surfaces relevant context on each turn.
agent = Agent(
    client=client,
    name="MemoryEnhancedAssistant",
    instructions=(
        "You are a helpful assistant. Personalize replies using provided context. "
        "Before answering, always check for stored context"
    ),
    tools=[],
    context_providers=[provider],
)

# Teach a user preference; the agent writes this to the provider's memory
query = "Remember that I enjoy glugenflorgle"
result = await agent.run(query)
print("User: ", query)
print("Agent: ", result)

# Ask the agent to recall the stored preference; it should retrieve from memory
query = "What do I enjoy?"
result = await agent.run(query)

Zachování historie konverzací

Tento vzor použijte, když relace musí obnovit úplný přepis po restartování aplikace nebo v jiné instanci.

Předpoklady

  • Nasazení Redis je dostupné prostřednictvím REDIS_URL.
  • Uživatelé protokolu TLS a ověření uživatelé Redis pro produkční nasazení

Připojit RedisHistoryProvider přes context_providers. Poskytovatel ukládá zprávy pro relaci a může omezit počet zachovaných zpráv.

async def example_manual_memory_store() -> None:
    """Basic example of using Redis history provider."""
    print("=== Basic Redis History Provider Example ===")

    # Create Redis history provider
    redis_provider = RedisHistoryProvider(
        source_id="redis_basic_chat",
        redis_url=REDIS_URL,
    )

    # Create agent with Redis history provider
    agent = Agent(
        client=OpenAIChatClient(),
        name="RedisBot",
        instructions="You are a helpful assistant that remembers our conversation using Redis.",
        context_providers=[redis_provider],
    )

    # Create session
    session = agent.create_session()

    # Have a conversation
    print("\n--- Starting conversation ---")
    query1 = "Hello! My name is Alice and I love pizza."
    print(f"User: {query1}")
    response1 = await agent.run(query1, session=session)
    print(f"Agent: {response1.text}")

    query2 = "What do you remember about me?"
    print(f"User: {query2}")
    response2 = await agent.run(query2, session=session)
    print(f"Agent: {response2.text}")

Použijte stabilní ID relace a zachovají serializované AgentSession v důvěryhodném úložišti aplikací, když klienti musí po restartování procesu obnovit stejnou logickou konverzaci.

Note

Integrace zprostředkovatele kontextu Redis není aktuálně zdokumentovaná pro Agent Framework Go. Nejnovější stav najdete v úložišti Agent Framework Go .

Důležité informace o produkčním prostředí

  • Odvozujte obory tenanta, vyhledávání, paměti a relací z ověřené identity aplikace, nikoli z výstupu modelu.
  • Používejte protokol TLS, ověřování Redis a izolaci sítě.
  • Použijte samostatné předpony klíčů nebo nasazení, u kterých je vyžaduje izolace tenanta.
  • Nakonfigurujte trvalost, zálohy, uchovávání a vyřazení pro požadovanou odolnost.
  • Zacházet s načtenou pamětí jako s nedůvěryhodným vstupem a zmírnit nepřímé injektáže výzvy.
  • Redact sensitive content before persisting messages or indexing searchable content.

Další kroky

Jděte hlouběji: