Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Redis suporta diferentes padrões de contexto entre SDKs. No .NET, ligue a pesquisa com base em Redis ao elemento genérico TextSearchProvider para RAG. O pacote Agent Framework Redis fornece fornecedores de memória pesquisável e histórico de conversas para Python.
| Padrão | API | SDK | Comportamento |
|---|---|---|---|
| RAG |
TextSearchProvider com um adaptador de pesquisa do Redis |
.NET | Recupera conteúdo relevante do Redis antes da invocação ou através de uma ferramenta de pesquisa sob demanda. |
| Memória pesquisável | RedisContextProvider |
Python | Extrai detalhes conversacionais e recupera contexto relevante com pesquisa vetorial em texto completo ou híbrida. |
| Histórico de conversações | RedisHistoryProvider |
Python | Persiste e recarrega a transcrição exata da mensagem de uma sessão. |
Adicionar RAG com TextSearchProvider
Utilize o padrão TextSearchProvider independente do fornecedor para o .NET. Implemente o respetivo adaptador de pesquisa com o cliente Redis ou o conector de arquivo vetorial selecionado pela sua aplicação, mapeie os resultados do Redis para TextSearchProvider.TextSearchResult e associe o fornecedor através de AIContextProviders.
Esta abordagem suporta RAG suportado por Redis, sem exigir um pacote de fornecedor de contexto específico para o Agent Framework de Redis.
Instale o pacote
pip install agent-framework-redis --pre
Adicionar memória pesquisável
Utilize este padrão quando um agente deve recordar informações relevantes selecionadas, em vez de repetir todas as mensagens anteriores.
Pré-requisitos
- Uma implementação Redis com suporte RediSearch, como Redis Stack ou um serviço gerido compatível.
- Um projeto Microsoft Foundry e implementação de modelos para o agente de exemplo.
- Fornecedor de incorporação ao ativar a pesquisa vetorial híbrida.
Configurar memória pesquisável
A recuperação de memória pesquisável funciona entre sessões. Cada application_id, agent_id e user_id fornecido funciona como um filtro AND, enquanto as dimensões omitidas permanecem sem filtragem. Precisa de fornecer pelo menos um identificador. Forneça todos os identificadores estáveis e de confiança que representem um limite de isolamento pretendido.
Adicione um vetorizador Redis e definições de campo vetorial quando quiser uma recuperação híbrida.
# 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",
)
Associar memória a um agente
Adicionar o fornecedor a context_providers. O fornecedor armazena detalhes da conversa após uma execução e apresenta o contexto relevante antes das execuções seguintes.
# 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)
Guardar histórico da conversa
Use este padrão quando uma sessão tiver de recuperar a sua transcrição integral após um reinício da aplicação ou noutra instância.
Pré-requisitos
- Uma implementação Redis acessível através de
REDIS_URL. - TLS e utilizadores autenticados do Redis para implementações em produção.
Anexe RedisHistoryProvider até context_providers. O fornecedor armazena mensagens para a sessão e pode limitar a contagem de mensagens retidas.
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}")
Utilize um cliente Redis gerido pelo chamador
Forneça redis_client quando a sua aplicação precisar de partilhar um conjunto de ligações ou configurar o comportamento da ligação, como tempos limite definidos e verificações do estado de funcionamento. O cliente deve ser um cliente Redis assíncrono autónomo configurado com decode_responses=True.
from agent_framework.redis import RedisHistoryProvider
from redis.asyncio import Redis
redis_client = Redis.from_url(
"redis://localhost:6379",
decode_responses=True,
socket_connect_timeout=3,
socket_timeout=5,
)
history_provider = RedisHistoryProvider(
redis_client=redis_client,
application_id="support-app",
)
Não combine redis_client com redis_url ou credential_provider.
RedisHistoryProvider usa o cliente e não o fecha, pelo que a aplicação continua responsável pelo seu ciclo de vida. O comportamento de retentativa também permanece controlado pelo chamador. Os acrescentos à transcrição não são idempotentes se uma nova tentativa repetir uma escrita após uma perda de ligação de resultado ambíguo.
As chaves com âmbito definido são o padrão. Defina um application_id estável e não vazio, e utilize tenant_id e agent_id quando a sua aplicação tiver essas fronteiras de isolamento. O fornecedor também delimita o âmbito de cada chave com base no seu source_id e num ID de sessão não vazio.
Use um ID de sessão estável e persista o serializado AgentSession no armazenamento de aplicações de confiança quando os clientes tiverem de retomar a mesma conversa lógica após o reinício do processo.
As versões anteriores armazenavam o histórico sob {key_prefix}:{session_id or "default"}. As implementações existentes podem definir temporariamente key_format="legacy" durante a migração. O modo legado está obsoleto, não aceita identificadores com escopo, e o modo com escopo nunca lê, reescreve ou elimina chaves legadas. Copie apenas os registos verificados para as chaves do âmbito correspondente, valide o histórico migrado e, em seguida, remova as chaves antigas de acordo com a sua política de retenção.
Observação
A integração Redis context-provider não está atualmente documentada para o Agent Framework Go. Consulte o repositório Agent Framework Go para o estado mais recente.
Considerações sobre a produção
- Derivar os escopos de tenant, pesquisa, memória e sessão a partir da identidade de aplicação autenticada, não da saída do modelo.
- Utilize TLS, a autenticação do Redis e o isolamento de rede.
- Para o histórico de conversas em Python, defina os escopos de inquilino, aplicação, agente, fonte do fornecedor e sessão onde esses limites existem.
- Configure a persistência, as cópias de segurança, a retenção e a remoção de modo a garantir a durabilidade necessária.
- Tratar a memória recuperada como entrada não confiável e mitigar a injeção indireta de prompts.
- Oculte informação sensível antes de armazenar mensagens ou indexar conteúdo pesquisável.
Passos seguintes
Vai mais fundo: