Redis

Redis, SDK'lar arasında farklı bağlam desenlerini destekler. .NET'da Redis destekli aramayı RAG için genel TextSearchProvider aramaya bağlayın. Agent Framework Redis paketi, Python için aranabilir bellek ve konuşma geçmişi sağlayıcıları sağlar.

Desen API SDK Davranış
PAÇAVRA TextSearchProvider Redis arama bağdaştırıcısıyla .NET Çağırmadan önce veya isteğe bağlı arama aracı aracılığıyla ilgili Redis içeriğini alır.
Aranabilir bellek RedisContextProvider Python Konuşma ayrıntılarını çıkarır ve tam metin araması veya hibrit vektör aramasıyla ilgili bağlamı geri getirir.
Konuşma geçmişi RedisHistoryProvider Python Bir oturum için tam mesaj dökümünü kaydeder ve yeniden yükler.

RAG'i TextSearchProvider ile ekleyin

.NET için sağlayıcıdan bağımsız TextSearchProvider deseni kullanın. Arama adaptörünü, uygulamanızın seçtiği Redis istemcisi veya vektör deposu bağlayıcısıyla uygulayın; Redis sonuçlarını TextSearchProvider.TextSearchResult ile eşleyin ve sağlayıcıyı AIContextProviders aracılığıyla ekleyin.

Bu yaklaşım, Redis'e özgü Agent Framework bağlam sağlayıcısı paketi gerektirmeden Redis destekli RAG'i destekler.

Paketi yükle

pip install agent-framework-redis --pre

Aranabilir bellek ekleme

Bir aracı önceki her iletiyi yeniden oynatmak yerine seçili ilgili bilgileri geri çekmesi gerektiğinde bu düzeni kullanın.

Prerequisites

  • Redis Stack veya uyumlu yönetilen hizmet gibi RediSearch desteğine sahip bir Redis dağıtımı.
  • Örnek ajan için bir Microsoft Foundry projesi ve model dağıtımı.
  • Karma vektör aramasını etkinleştirdiğinizde bir ekleme sağlayıcısı.

Aranabilir belleği yapılandırma

Aranabilir bellek alma işlemi oturumlar arasında çalışır. Sağlanan application_id, agent_id ve user_id öğelerinin her biri bir AND filtresi olarak işlev görürken, belirtilmeyen boyutlar filtrelenmeden kalır. En az bir tanımlayıcı sağlamanız gerekir. Hedeflenen yalıtım sınırını temsil eden her kararlı, güvenilir tanımlayıcıyı sağlayın.

Hibrit erişim istediğinizde Redis vektörleştiricisi ve vektör alanı ayarlarını ekleyin.

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

Aracıya bellek ekleme

Sağlayıcıyı context_providers öğesine ekleyin. Sağlayıcı, bir çalıştırma sonrasında konuşma ayrıntılarını depolar ve sonraki çalıştırmalardan önce ilgili bağlamı sunar.

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

Konuşma geçmişini kalıcı hale getir

Bir uygulama yeniden başlatıldıktan sonra veya başka bir örnekte oturumun tam transkripti kurtarması gerektiğinde bu düzeni kullanın.

Prerequisites

  • REDIS_URL aracılığıyla erişilebilen bir Redis dağıtımı.
  • Üretim dağıtımları için TLS ve kimliği doğrulanmış Redis kullanıcıları.

RedisHistoryProvider ile context_providers arasına takın. Sağlayıcı oturum için iletileri depolar ve tutulan ileti sayısını sınırlayabilir.


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,
        application_id=APPLICATION_ID,
        agent_id="redis-bot",
    )

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

Kapsamı belirlenmiş anahtarlar varsayılandır. Kararlı, boş olmayan bir application_id ayarlayın ve uygulamanız bu yalıtım sınırlarına sahipse tenant_id ve agent_id kullanın. Sağlayıcı ayrıca her anahtarı source_id ve boş olmayan bir oturum kimliğiyle de kapsamlandırır.

İstemcilerin bir işlem yeniden başlatıldıktan sonra aynı mantıksal konuşmaya devam etmesi gerekiyorsa, sabit bir oturum kimliği kullanın ve serileştirilmiş AgentSession öğesini güvenilir uygulama depolamasında kalıcı olarak saklayın.

Önceki sürümler geçmişi {key_prefix}:{session_id or "default"} altında depoluyordu. Mevcut dağıtımlar, taşıma sırasında geçici olarak key_format="legacy" ayarlayabilir. Eski mod kullanım dışıdır, kapsamlı tanımlayıcıları kabul etmez ve kapsamlı mod eski anahtarları hiçbir zaman okumaz, yeniden yazmaz veya silmez. Yalnızca doğrulanmış kayıtları ilgili kapsam anahtarlarına kopyalayın, taşınan geçmişi doğrulayın ve ardından eski anahtarları saklama politikanıza göre kaldırın.

Uyarı

Redis bağlam sağlayıcısı tümleştirmesi şu anda Agent Framework Go için belgelenmemiş. En son durum için bkz. Agent Framework Go deposu .

Üretimle ilgili dikkat edilmesi gerekenler

  • Kiracı, arama, bellek ve oturum kapsamları model çıktısından değil, doğrulanmış uygulama kimliğinden türetilmelidir.
  • TLS, Redis kimlik doğrulaması ve ağ yalıtımı kullanın.
  • Python konuşma geçmişi için, bu sınırların bulunduğu kiracı, uygulama, aracı, sağlayıcı kaynağı ve oturum kapsamlarını ayarlayın.
  • Gerekli dayanıklılık için kalıcılığı, yedeklemeleri, saklamayı ve çıkarmayı yapılandırın.
  • Geri getirilen belleği güvenilir olmayan girdi olarak değerlendirin ve dolaylı istem enjeksiyonu riskini azaltın.
  • İletileri kalıcı hale getirmeden veya aranabilir içeriği dizine eklemeden önce hassas içeriği yeniden düzenleyin.

Sonraki Adımlar

Daha derine gidin: