Redis

Redis mendukung pola konteks yang berbeda di seluruh SDK. Di .NET, sambungkan pencarian yang didukung Redis ke generik TextSearchProvider untuk RAG. Paket Agent Framework Redis menyediakan penyedia memori dan riwayat percakapan yang dapat dicari untuk Python.

Pattern API SDK Behavior
Kain lap TextSearchProvider dengan adaptor pencarian Redis .NET Mengambil konten Redis yang relevan sebelum pemanggilan atau melalui alat pencarian sesuai permintaan.
Memori yang dapat dicari RedisContextProvider Python Mengekstrak detail percakapan dan mengambil konteks yang relevan dengan pencarian vektor teks lengkap atau hibrid.
Riwayat percakapan RedisHistoryProvider Python Mempertahankan dan memuat ulang transkrip pesan yang tepat untuk sesi.

Menambahkan RAG dengan TextSearchProvider

Gunakan pola independen TextSearchProvider penyedia untuk .NET. Terapkan adaptor pencariannya dengan klien Redis atau konektor vektor-store yang dipilih oleh aplikasi Anda, petakan hasil Redis ke TextSearchProvider.TextSearchResult, dan lampirkan penyedia melalui AIContextProviders.

Pendekatan ini mendukung RAG yang didukung Redis tanpa memerlukan paket penyedia konteks Agent Framework khusus Redis.

Pasang paketnya

pip install agent-framework-redis --pre

Menambahkan memori yang dapat dicari

Gunakan pola ini ketika agen harus memanggil kembali informasi yang relevan yang dipilih daripada memutar ulang setiap pesan sebelumnya.

Prasyarat

  • Penyebaran Redis dengan dukungan RediSearch, seperti Redis Stack atau layanan terkelola yang kompatibel.
  • Proyek Microsoft Foundry dan penyebaran model untuk agen sampel.
  • Penyedia penyematan saat Anda mengaktifkan pencarian vektor hibrid.

Mengonfigurasi memori yang dapat dicari

Gunakan application_id, agent_id, dan user_id untuk mempartisi memori. Tambahkan pengaturan vektorizer dan vektor-field Redis saat Anda ingin pengambilan hibrid.

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

Melampirkan memori ke agen

Tambahkan penyedia ke context_providers. Penyedia menyimpan detail percakapan setelah eksekusi dan menampilkan konteks yang relevan sebelum dijalankan nanti.

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

Mempertahankan riwayat percakapan

Gunakan pola ini ketika sesi harus memulihkan transkrip lengkapnya setelah aplikasi dimulai ulang atau pada instans lain.

Prasyarat

  • Penyebaran Redis dapat dijangkau melalui REDIS_URL.
  • TLS dan pengguna Redis terautentikasi untuk penyebaran produksi.

Lampirkan RedisHistoryProvider melalui context_providers. Penyedia menyimpan pesan untuk sesi dan dapat membatasi jumlah pesan yang dipertahankan.

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

Gunakan ID sesi yang stabil dan pertahankan serialisasi AgentSession dalam penyimpanan aplikasi tepercaya ketika klien harus melanjutkan percakapan logis yang sama setelah proses dimulai ulang.

Nota

Integrasi penyedia konteks Redis saat ini tidak didokumenkan untuk Agent Framework Go. Lihat repositori Agent Framework Go untuk status terbaru.

Pertimbangan produksi

  • Mendapatkan cakupan penyewa, pencarian, memori, dan sesi dari identitas aplikasi yang diautentikasi, bukan output model.
  • Gunakan TLS, autentikasi Redis, dan isolasi jaringan.
  • Gunakan awalan kunci atau penyebaran terpisah di mana isolasi penyewa memerlukannya.
  • Konfigurasikan persistensi, cadangan, retensi, dan pengeluaran untuk durabilitas yang diperlukan.
  • Perlakukan memori yang diambil sebagai input yang tidak tepercaya dan mitigasi injeksi prompt tidak langsung.
  • Redaksi konten sensitif sebelum menyimpan pesan atau mengindeks konten yang dapat dicari.

Langkah berikutnya

Masuk lebih dalam: