Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Cosmos DB ondersteunt twee verschillende contextproviderpatronen in Agent Framework. Kies de provider op basis van of u een exacte transcriptie of geëxtraheerde kennis voor de lange termijn nodig hebt.
| Patroon | Provider | Gedrag |
|---|---|---|
| Gespreksgeschiedenis |
CosmosChatHistoryProvider(.NET) of CosmosHistoryProvider (Python) |
Hiermee blijven volledige berichten behouden, zodat een sessie kan worden hervat na opnieuw opstarten of op een ander toepassingsexemplaren. |
| Langetermijngeheugen |
CosmosMemoryContextProvider(Python) |
Extraheert feiten, procedurele kennis, episodische herinneringen en samenvattingen, en haalt vervolgens relevante herinneringen op voor volgende uitvoeringen. |
Gespreksgeschiedenis behouden
De pakketten installeren
dotnet add package Microsoft.Agents.AI.CosmosNoSql --prerelease
dotnet add package Azure.Identity
Cosmos DB-chatgeschiedenis configureren
Gebruik de extensie voor beheerde identiteit om te koppelen CosmosChatHistoryProvider aan ChatClientAgentOptions.
using Azure.Identity;
using Microsoft.Agents.AI;
var options = new ChatClientAgentOptions
{
ChatOptions = new() { Instructions = "You are a helpful assistant." }
}.WithCosmosDBChatHistoryProviderUsingManagedIdentity(
accountEndpoint: Environment.GetEnvironmentVariable("AZURE_COSMOS_ENDPOINT")!,
databaseId: Environment.GetEnvironmentVariable("AZURE_COSMOS_DATABASE_NAME")!,
containerId: Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTAINER_NAME")!,
tokenCredential: new DefaultAzureCredential());
AIAgent agent = chatClient.AsAIAgent(options);
Met de initialisatiefunctie voor de standaardstatus wordt een gespreks-id gemaakt. Geef een CosmosChatHistoryProvider.State initialisatiefunctie op wanneer uw toepassing expliciet gesprek, tenant en gebruikersroutering nodig heeft. Wanneer tenant- en gebruikers-id's aanwezig zijn, gebruikt de provider een hiërarchische partitiesleutel.
Warning
DefaultAzureCredential is handig voor ontwikkeling. Geef in productie de voorkeur aan een specifieke referentie, zoals ManagedIdentityCredential.
Installeer het pakket
pip install agent-framework-azure-cosmos --pre
CosmosHistoryProvider configureren
De Python provider accepteert een Azure referentie of een accountsleutel en gebruikt de session_id als partitiesleutel.
# 1. Create an Azure credential and a CosmosHistoryProvider for agent context
async with (
AzureCliCredential() as credential,
CosmosHistoryProvider(
endpoint=cosmos_endpoint,
database_name=cosmos_database_name,
container_name=cosmos_container_name,
credential=cosmos_key or credential,
) as history_provider,
# 2. Create an agent that uses Cosmos for persisted conversation history.
Agent(
client=FoundryChatClient(
project_endpoint=project_endpoint,
model=model,
credential=credential,
),
name="CosmosHistoryAgent",
instructions="You are a helpful assistant that remembers prior turns.",
context_providers=[history_provider],
default_options={"store": False},
) as agent,
):
# 3. Create a session (session_id is used as the partition key).
session = agent.create_session()
# 4. Run a multi-turn conversation; history is persisted by CosmosHistoryProvider.
response1 = await agent.run("My name is Ada and I enjoy distributed systems.", session=session)
print(f"Assistant: {response1.text}")
response2 = await agent.run("What do you remember about me?", session=session)
print(f"Assistant: {response2.text}")
print(f"Container: {history_provider.container_name}")
Bewaar de geserialiseerde AgentSession in vertrouwde toepassingsopslag wanneer clients later dezelfde sessie-id moeten herstellen.
Opmerking
Azure Cosmos DB geschiedenisopslag is momenteel niet beschikbaar voor Agent Framework Go. Implementeer een aangepaste geschiedenisprovider of bekijk de opslagplaats Agent Framework Go voor de meest recente status.
Semantisch geheugen op lange termijn toevoegen
Opmerking
De Azure Cosmos DB langetermijngeheugenprovider is momenteel beschikbaar voor Python. Gebruik de bovenstaande provider voor gespreksgeschiedenis wanneer een .NET toepassing exacte transcriptpersistentie nodig heeft.
Prerequisites
- Een Azure Cosmos DB-account en -database.
- Een Microsoft Foundry-project met chat- en insluitmodelimplementaties.
- Toegang met Azure-identiteit tot beide resources.
De pakketten installeren
pip install agent-framework-azure-cosmos-memory agent-framework-foundry --pre
De geheugenprovider configureren
Hetzelfde Foundry-project kan het chatmodel, insluitingen en het model voor geheugenextractie leveren. Koppel de provider via context_providers.
def _build_agent(provider: CosmosMemoryContextProvider, credential: DefaultAzureCredential) -> Agent:
"""Build an agent that uses the memory provider and the same Foundry endpoint for chat."""
return Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_ENDPOINT"],
model=os.getenv("CHAT_MODEL", "gpt-4o-mini"),
credential=credential,
),
name="Memory Assistant",
instructions="You are a helpful assistant with long-term memory about the user.",
context_providers=[provider],
)
async def user_scoped_memory() -> None:
"""Memory scoped to a stable user id, so it persists across sessions and threads."""
credential = DefaultAzureCredential()
provider = CosmosMemoryContextProvider(
cosmos_endpoint=os.environ["COSMOS_ENDPOINT"],
foundry_endpoint=os.environ["FOUNDRY_ENDPOINT"],
embedding_model=os.getenv("EMBEDDING_MODEL", "text-embedding-3-large"),
chat_model=os.getenv("CHAT_MODEL", "gpt-4o-mini"),
credential=credential,
)
agent = _build_agent(provider, credential)
async with provider:
session = agent.create_session()
# Provider state is scoped by source id; set a stable user id there so memory
# persists across sessions rather than being limited to this one.
session.state.setdefault(provider.source_id, {})["user_id"] = "alice"
first = await agent.run("I love hiking and I'm allergic to peanuts.", session=session)
print("Assistant:", first.text)
# A brand-new session for the same user still recalls the earlier facts.
new_session = agent.create_session()
new_session.state.setdefault(provider.source_id, {})["user_id"] = "alice"
recall = await agent.run("What do you remember about me?", session=new_session)
print("Assistant:", recall.text)
# Let background extraction finish and persist before the client closes.
await provider.flush()
Een stabiel user_id houdt geheugen beschikbaar in sessies en threads. Zonder een dergelijke beperkt de provider het geheugen tot de huidige sessie-ID.
Geheugenverwerking
Geheugenextractie wordt na elke draai op de achtergrond uitgevoerd. Gebruik de provider als een asynchrone contextmanager of roep flush() aan vóór het afsluiten, zodat de openstaande extractie wordt voltooid voordat de clients worden afgesloten.
De provider ondersteunt ook aangepaste extractieprompts, processorfrequentie, betrouwbaarheidsdrempels, geheugentypen en ophaallimieten.
Opmerking
Azure Cosmos DB langetermijngeheugen is momenteel niet beschikbaar voor Agent Framework Go. Zie de opslagplaats Agent Framework Go voor de meest recente status.
Overwegingen voor productie
- Gebruikers-, tenant- en sessie-id's afleiden van geverifieerde toepassings-id's.
- Kies partitiesleutels die het verkeer verdelen en tegelijk de isolatie tussen tenants waarborgen.
- Houd Cosmos DB en modelbronnen in goedgekeurde regio's en pas RBAC met minimale bevoegdheden toe.
- Configureer beleid voor time-to-live, back-up, retentie en verwijdering voor zowel transcripten als geëxtraheerde geheugens.
- Filter of redact gevoelige inhoud vóór persistentie en gebruik geen geëxtraheerde geheugens rechtstreeks voor autorisatiebeslissingen.
Volgende stappen
Ga dieper in: