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