Redis 支持跨 SDK 的不同上下文模式。 在.NET中,将 Redis 支持的搜索连接到 RAG 的泛型TextSearchProvider。 Agent Framework Redis 包为Python提供可搜索的内存和聊天历史记录提供程序。
| Pattern | API | SDK | Behavior |
|---|---|---|---|
| RAG |
TextSearchProvider 使用 Redis 搜索适配器 |
.NET | 在调用之前或通过按需搜索工具检索相关的 Redis 内容。 |
| 可搜索内存 | RedisContextProvider |
Python | 提取对话详细信息,并使用全文或混合矢量搜索检索相关上下文。 |
| 对话历史 | RedisHistoryProvider |
Python | 持久保存并重新加载会话的确切消息脚本。 |
添加 RAG TextSearchProvider
将提供程序无关TextSearchProvider的模式用于.NET。 使用应用程序选择的 Redis 客户端或矢量存储连接器实现其搜索适配器,将 Redis 结果 TextSearchProvider.TextSearchResult映射到该连接器,并通过该 AIContextProviders连接器附加提供程序。
此方法支持 Redis 支持的 RAG,而无需 Redis 特定的代理框架上下文提供程序包。
安装软件包
pip install agent-framework-redis --pre
添加可搜索内存
当代理应召回所选相关信息,而不是重播上一条消息时,请使用此模式。
先决条件
- RediSearch 支持的 Redis 部署,例如 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 部署。 - TLS 和经过身份验证的 Redis 用户用于生产部署。
context_providers通过 . 附加 RedisHistoryProvider 。 提供程序存储会话的消息,并可以限制保留的消息计数。
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}")
使用稳定的会话 ID,并在进程重启后客户端必须恢复相同的逻辑会话时,在受信任的应用程序存储中保留序列化 AgentSession 。
注释
目前尚未为 Agent Framework Go 记录 Redis 上下文提供程序集成。 有关最新状态,请参阅 Agent Framework Go 存储库 。
生产注意事项
- 从经过身份验证的应用程序标识派生租户、搜索、内存和会话范围,而不是模型输出。
- 使用 TLS、Redis 身份验证和网络隔离。
- 使用租户隔离需要单独的密钥前缀或部署。
- 为所需的持久性、备份、保留和逐出配置持久性。
- 将检索到的内存视为不受信任的输入并缓解间接提示注入。
- 在保留消息或为可搜索内容编制索引之前对敏感内容进行修订。
后续步骤
更深入: