إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يدعم Redis أنماط سياق مختلفة عبر SDKs. في .NET، قم بتوصيل البحث المدعوم من Redis ب generic TextSearchProvider ل RAG. توفر حزمة Agent Framework Redis موفري الذاكرة ومحفوظات المحادثات القابلين للبحث Python.
| النمط | API | SDK | السلوك |
|---|---|---|---|
| RAG |
TextSearchProvider باستخدام محول بحث Redis |
.NET | استرداد محتوى Redis ذي الصلة قبل استدعاء أو من خلال أداة بحث عند الطلب. |
| ذاكرة قابلة للبحث | RedisContextProvider |
Python | استخراج تفاصيل المحادثة واسترداد السياق ذي الصلة بالنص الكامل أو البحث عن متجه مختلط. |
| محفوظات المحادثات | RedisHistoryProvider |
Python | يستمر ويعيد تحميل نسخة الرسالة الدقيقة لجلسة عمل. |
إضافة RAG باستخدام TextSearchProvider
استخدم النمط المستقل TextSearchProvider عن الموفر .NET. قم بتنفيذ محول البحث الخاص به باستخدام عميل Redis أو موصل مخزن المتجهات المحدد بواسطة التطبيق الخاص بك، وتعيين نتائج Redis إلى TextSearchProvider.TextSearchResult، وإرفاق الموفر من خلال AIContextProviders.
يدعم هذا الأسلوب RAG المدعوم من Redis دون الحاجة إلى حزمة موفر سياق إطار عمل العامل الخاصة ب Redis.
تثبيت الحزمة
pip install agent-framework-redis --pre
إضافة ذاكرة قابلة للبحث
استخدم هذا النمط عندما يجب على العامل استدعاء المعلومات ذات الصلة المحددة بدلا من إعادة تشغيل كل رسالة سابقة.
المتطلبات الأساسية
- توزيع Redis مع دعم RediSearch، مثل Redis Stack أو خدمة مدارة متوافقة.
- مشروع Microsoft Foundry ونشر نموذج لعامل العينة.
- موفر تضمين عند تمكين البحث عن متجه مختلط.
تكوين ذاكرة قابلة للبحث
استخدم application_idو agent_idو user_id لتقسيم الذكريات. أضف إعدادات ناقل Redis وحقل المتجهات عندما تريد الاسترداد المختلط.
# 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",
)
إرفاق الذاكرة بعامل
أضف الموفر إلى context_providers. يخزن الموفر تفاصيل المحادثة بعد التشغيل ويعرض السياق ذي الصلة قبل التشغيل لاحقا.
# 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)
الاحتفاظ بمحفوظات المحادثات
استخدم هذا النمط عندما يجب أن تسترد جلسة العمل نسختها الكاملة بعد إعادة تشغيل التطبيق أو على مثيل آخر.
المتطلبات الأساسية
- يمكن الوصول إلى توزيع Redis من خلال
REDIS_URL. - TLS ومستخدمو Redis المصادق عليهم لنشر الإنتاج.
إرفاق RedisHistoryProvider من خلال context_providers. يقوم الموفر بتخزين الرسائل لجلسة العمل ويمكنه الحد من عدد الرسائل التي تم الاحتفاظ بها.
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}")
استخدم معرف جلسة عمل مستقرا واستمر في إجراء التسلسل AgentSession في تخزين التطبيق الموثوق به عندما يجب على العملاء استئناف نفس المحادثة المنطقية بعد إعادة تشغيل العملية.
Note
تكامل موفر سياق Redis غير موثق حاليا ل Agent Framework Go. راجع مستودع Agent Framework Go للحصول على أحدث حالة.
اعتبارات الإنتاج
- اشتقاق نطاقات المستأجر والبحث والذاكرة والجلسة من هوية التطبيق المصادق عليها، وليس إخراج النموذج.
- استخدم TLS ومصادقة Redis وعزل الشبكة.
- استخدم بادئات مفاتيح منفصلة أو عمليات نشر حيث يتطلب عزل المستأجر ذلك.
- تكوين الثبات والنسخ الاحتياطية والاحتفاظ والإخلاء للمتانة المطلوبة.
- تعامل مع الذاكرة المستردة كإدخل غير موثوق به وقم بتخفيف حقن المطالبة غير المباشرة.
- تنقيح المحتوى الحساس قبل استمرار الرسائل أو فهرسة المحتوى القابل للبحث.
الخطوات التالية
انتقل إلى أبعد من ذلك: