Gå til innhold

Agent-lag⚓︎

Kai har en to-lags agentarkitektur: MyAgent ruter meldinger, WebsakAgent utfører arbeidet.

MyAgent — Meldingsruter⚓︎

MyAgent er innpunktet for alle meldinger fra Azure Bot Service. Den arver fra AgentApplication (Microsoft Agents Framework) og bruker [Route]-attributter for å rute meldinger.

Ansvar:

  • Ruter innkommende meldinger basert på type og innhold
  • Håndterer kommandoer (/hjelp, /clear, analyser)
  • Delegerer chat-meldinger til WebsakAgent
  • Administrerer sesjonsminne (ArkivsakSessionMemory)
  • Sender strømmede svar tilbake til Teams

Nøkkelkode:

C#
[Route(RouteType = RouteType.Activity, Type = ActivityTypes.Message, Rank = RouteRank.First)]
protected async Task CaseNumberActivityHandlerAsync(...)

WebsakAgent — Verktøyagent⚓︎

WebsakAgent er den som faktisk utfører arbeidet. Den har tilgang til verktøy (functions) for å:

  • Hente saksdata fra Mimir
  • Hente dokumenter fra WebSak-arkivet
  • Søke i dokumenter via Azure AI Search
  • Generere svar via Gemini LLM

Meldingsflyt⚓︎

sequenceDiagram
    participant U as Saksbehandler
    participant T as Teams
    participant B as Bot Service
    participant M as MyAgent
    participant W as WebsakAgent
    participant G as Gemini

    U->>T: "List journalposter for 25/1718"
    T->>B: Activity (Message)
    B->>M: POST /api/messages
    M->>M: Strip @mention, parse tekst
    M->>W: RunAsync(ChatMessage)
    W->>W: Velg verktøy
    W->>G: Chat med verktøyresultater
    G-->>W: Svar
    W-->>M: AgentRunResult
    M-->>T: Streaming response
    T-->>U: Svar vises

Strømming⚓︎

Kai bruker streaming responses for å gi raskere tilbakemelding. turnContext.StreamingResponse.QueueTextChunk() sender tekst fortløpende til brukeren.

For langvarige operasjoner (WebsakAgent med AllowBackgroundResponses = true) poller MyAgent med ContinuationToken hvert 2. sekund til svaret er klart.

Sesjonstilstand⚓︎

Sesjonsminne lagres i AgentSessionStore (in-memory) med nøkkel WebsakMemoryProvider. ArkivsakSessionMemory inneholder:

  • Aktivt saksnummer
  • Om saken nylig ble byttet (SwitchedCase)