Redis

Usługa Redis obsługuje różne wzorce kontekstowe w zestawach SDK. W .NET połącz wyszukiwanie oparte na usłudze Redis z ogólną TextSearchProvider bazą danych RAG. Pakiet Redis dla Agent Framework udostępnia dostawców pamięci i historii rozmów z możliwością przeszukiwania dla języka Python.

Wzór API SDK Behavior
RAG TextSearchProvider z adapterem wyszukiwania Redis .NET Pobiera odpowiednią zawartość usługi Redis przed wywołaniem lub za pomocą narzędzia wyszukiwania na żądanie.
Pamięć z możliwością wyszukiwania RedisContextProvider Python Wyodrębnia szczegóły rozmowy i pobiera odpowiedni kontekst za pomocą wyszukiwania pełnotekstowego lub hybrydowego wyszukiwania wektorowego.
Historia konwersacji RedisHistoryProvider Python Utrwala i ponownie ładuje dokładną transkrypcję komunikatów dla sesji.

Dodaj element RAG za pomocą polecenia TextSearchProvider

Użyj wzorca TextSearchProvider niezależnego od dostawcy dla platformy .NET. Zaimplementuj adapter wyszukiwania przy użyciu klienta Redis lub konektora magazynu wektorowego wybranego przez aplikację, zamapuj wyniki Redis na TextSearchProvider.TextSearchResult, a następnie podłącz dostawcę za pomocą AIContextProviders.

Takie podejście obsługuje RAG oparty na Redis bez konieczności używania pakietu dostawcy kontekstu dla Agent Framework specyficznego dla Redis.

Instalowanie pakietu

pip install agent-framework-redis --pre

Dodawanie pamięci z możliwością wyszukiwania

Użyj tego wzorca, gdy agent powinien przywołać wybrane istotne informacje, zamiast odtwarzać każdy poprzedni komunikat.

Wymagania wstępne

  • Wdrożenie Redis z obsługą RediSearch, na przykład Redis Stack lub kompatybilna usługa zarządzana.
  • Projekt Microsoft Foundry i wdrożenie modelu dla przykładowego agenta.
  • Dostawca osadzania podczas włączania wyszukiwania wektorów hybrydowych.

Konfigurowanie pamięci z możliwością wyszukiwania

Użyj application_id, agent_id i user_id, aby partycjonować pamięć. Dodaj wektoryzator Redis oraz ustawienia pola wektorowego, jeśli chcesz używać wyszukiwania hybrydowego.

# 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",
)

Dołącz pamięć do agenta

Dodaj dostawcę do context_providers. Dostawca przechowuje konwersacyjne szczegóły po uruchomieniu i wyświetla odpowiedni kontekst przed późniejszym uruchomieniem.

# 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)

Utrwalanie historii konwersacji

Użyj tego wzorca, gdy sesja musi odzyskać kompletną transkrypcję po ponownym uruchomieniu aplikacji lub w innym wystąpieniu.

Wymagania wstępne

  • Wdrożenie usługi Redis osiągalne za pośrednictwem usługi REDIS_URL.
  • TLS i uwierzytelnieni użytkownicy Redis dla wdrożeń produkcyjnych.

Dołącz od RedisHistoryProvider do context_providers. Dostawca przechowuje komunikaty dla sesji i może ograniczyć liczbę zachowanych komunikatów.

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}")

Użyj stabilnego identyfikatora sesji i zachowaj zserializowane AgentSession w zaufanym magazynie danych aplikacji, gdy klienci muszą wznowić tę samą logiczną konwersację po ponownym uruchomieniu procesu.

Uwaga / Notatka

Integracja z dostawcą kontekstu Redis nie jest obecnie udokumentowana w Agent Framework Go. Aktualny status znajdziesz w repozytorium Agent Framework dla Go.

Zagadnienia dotyczące środowiska produkcyjnego

  • Wyprowadzaj zakresy dzierżawcy, wyszukiwania, pamięci i sesji na podstawie uwierzytelnionej tożsamości aplikacji, a nie wyniku modelu.
  • Użyj uwierzytelniania TLS, usługi Redis i izolacji sieci.
  • Użyj oddzielnych prefiksów kluczy lub wdrożeń tam, gdzie wymagana jest izolacja dzierżawców.
  • Skonfiguruj trwałość, kopie zapasowe, przechowywanie i eksmisję pod kątem wymaganej trwałości.
  • Traktuj pobraną pamięć jako niezaufane dane wejściowe i ograniczaj pośrednie wstrzyknięcie monitu.
  • Zredaguj zawartość wrażliwą przed utrwalaniem komunikatów lub indeksowaniem zawartości z możliwością wyszukiwania.

Następne kroki

Głębiej: