Azure Cosmos DB

Azure Cosmos DB stöder två distinkta kontextprovidermönster i Agent Framework. Välj providern baserat på om du behöver en exakt avskrift eller extraherad långsiktig kunskap.

Mönster Provider Behavior
Konversationshistorik CosmosChatHistoryProvider(.NET) eller CosmosHistoryProvider (Python) Bevarar fullständiga meddelanden så att en session kan återupptas efter en omstart eller på en annan programinstans.
Långtidsminne CosmosMemoryContextProvider(Python) Extraherar fakta, processuell kunskap, episodiska minnen och sammanfattningar och hämtar sedan relevanta minnen för senare körningar.

Spara konversationshistoriken

Installera programvarupaketen

dotnet add package Microsoft.Agents.AI.CosmosNoSql --prerelease
dotnet add package Azure.Identity

Konfigurera Cosmos DB-chatthistorik

Använd tillägget managed-identity för att ansluta CosmosChatHistoryProvider till 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);

Standardtillståndsinitieraren skapar ett konversations-ID. Ange en CosmosChatHistoryProvider.State initialiserare när programmet behöver explicit konversation, klientorganisation och användarroutning. När klient- och användar-ID:t finns använder providern en hierarkisk partitionsnyckel.

Varning

DefaultAzureCredential är praktiskt för utveckling. I produktion föredrar du en specifik autentiseringsuppgift, till exempel ManagedIdentityCredential.

Installera paketet

pip install agent-framework-azure-cosmos --pre

Konfigurera CosmosHistoryProvider

Python-providern accepterar antingen en Azure autentiseringsuppgifter eller en kontonyckel och använder session_id som partitionsnyckel.

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

Spara serialiserad AgentSession i betrodd programlagring när klienter behöver återställa samma sessionsidentifierare senare.

Anmärkning

Azure Cosmos DB historiklagring är för närvarande inte tillgängligt för Agent Framework Go. Implementera en anpassad historikprovider eller se Agent Framework Go-lagringsplatsen för den senaste statusen.

Lägga till långvarigt semantiskt minne

Anmärkning

Den Azure Cosmos DB långsiktiga minnesprovidern är för närvarande tillgänglig för Python. Använd leverantören för konversationshistorik ovan när en .NET-applikation behöver exakt beständig lagring av transkriptioner.

Förutsättningar

  • Ett Azure Cosmos DB konto och en databas.
  • Ett Microsoft Foundry-projekt med chatt- och inbäddningsmodelldistributioner.
  • Azure identitetsåtkomst till båda resurserna.

Installera programvarupaketen

pip install agent-framework-azure-cosmos-memory agent-framework-foundry --pre

Konfigurera minnesprovidern

Samma Foundry-projekt kan tillhandahålla chattmodellen, inbäddningar och minnesextraheringsmodellen. Koppla providern 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()

Ett stabilt user_id håller minnet tillgängligt mellan sessioner och trådar. Om ingen anges begränsar leverantören minnet till det aktuella sessions-ID:t.

Minnesbearbetning

Minnesextrahering körs i bakgrunden efter varje tur. Använd providern som en asynkron kontexthanterare eller anropa flush() före nedstängning, så att väntande extrahering hinner slutföras innan klienterna stängs ned.

Providern stöder även anpassade extraheringsprompter, processortakt, tröskelvärden för konfidens, minnestyper och hämtningsgränser.

Anmärkning

Azure Cosmos DB långtidsminne är för närvarande inte tillgängligt för Agent Framework Go. Se Agent Framework Go-lagringsplatsen för den senaste statusen.

Produktionsöverväganden

  • Härled användar-, klient- och sessionsidentifierare från autentiserad programidentitet.
  • Välj partitionsnycklar som distribuerar trafik samtidigt som klientisolering framttvingas.
  • Håll Cosmos DB-resurser och modellresurser i godkända regioner och använd principen om minsta behörighet för RBAC.
  • Konfigurera principer för time-to-live, säkerhetskopiering, kvarhållning och borttagning för både avskrifter och extraherade minnen.
  • Filtrera eller redigera känsligt innehåll före beständighet och använd inte extraherade minnen direkt för auktoriseringsbeslut.

Nästa steg

Gå djupare: