Intro workshop til agentiske systemer med AutoGen
Før du kommer på workshop, sørg for at du har følgende på plass:
- Clone dette repoet til din lokale maskin.
- Har virtuelt miljø management system som
venvellercondasom kan lage et Python 3.13 miljø som er anbefalt. - Har Docker installert. Om ikke, installer Docker med å følge instruksjonene på docker.com. Sørg for at Docker-tjenesten kjører, f.eks. på Linux:
sudo systemctl start docker. - Installer nødvendige Python-pakker fra
requirements.txti ditt miljø. For eksempel med bruk avconda:
conda create -n agents-workshop python=3.13
conda activate agents-workshop
pip install -r requirements.txt- Du skal få en API-nøkkel til Azure OpenAI-tjenesten fra oss på worshoppen. Opprett en
.env-fil i prosjektmappen din (i root) og lim inn følgende i.env-filen:
API_KEY="din_api_nøkkel_her"
- Test at alt fungerer ved å kjøre
python test_environment.py. Dette skriptet sjekker at alle nødvendige pakker er installert og at Docker fungerer som forventet.
Agentiske systemer er AI-systemer som består av flere autonome agenter som kan samarbeide, kommunisere og koordinere sine handlinger for å løse komplekse oppgaver. I motsetning til tradisjonelle LLM-er som fungerer som enkeltstående modeller, kan agentiske systemer dele opp store problemer i mindre deler og la spesialiserte agenter håndtere hver del.
1. Kompleksitetshåndtering
- Deler opp store, komplekse oppgaver i mindre, håndterbare deler
- Hver agent kan spesialisere seg på spesifikke domener eller funksjoner
- Reduserer kognitiv belastning på individuelle modeller
2. Forbedret problemløsning
- Flere perspektiver på samme problem gjennom forskjellige agenter
- Mulighet for iterativ forbedring gjennom agent-diskusjoner
- Selvkorreksjon og kvalitetssikring gjennom peer review
3. Skalerbarhet og fleksibilitet
- Enkelt å legge til nye agenter med spesialiserte ferdigheter
- Kan tilpasse systemet til forskjellige bruksområder
- Parallell prosessering av oppgaver
4. Robusthet
- Hvis en agent feiler, kan andre kompensere
- Redundans i systemet øker påliteligheten
- Bedre håndtering av edge cases
Ideelle bruksområder:
- Komplekse forskningsoppgaver som krever flere ekspertiseområder
- Kodegenererering og -review hvor forskjellige agenter kan fokusere på arkitektur, implementering og testing
- Kreative prosesser som krever brainstorming og iterativ forbedring
- Beslutningsstøtte hvor multiple perspektiver er verdifulle
- Automatiserte arbeidsflyter med flere trinn og avhengigheter
Mindre egnet for:
- Enkle, godt definerte oppgaver som kan løses av en enkelt modell
- Oppgaver med strenge latenskrav
- Situasjoner hvor ressursforbruk må minimeres
| Aspekt | Tradisjonelle LLM-er | Agentiske Systemer |
|---|---|---|
| Arkitektur | Enkelt modell-respons | Flere samarbeidende agenter |
| Problemløsning | Lineær, en-til-en | Iterativ, kollaborativ |
| Spesialisering | Generalist | Spesialiserte roller |
| Kvalitetskontroll | Begrenset selvkorreksjon | Peer review og validering |
| Kompleksitet | Begrenset av kontekstvindu | Kan håndtere større problemer |
| Ressursbruk | Lavere | Høyere (flere modellkall) |
| Transparens | Svart boks | Synlig diskusjon og resonnering |
AutoGen er et rammeverk utviklet av Microsoft for å bygge agentiske AI-systemer. Det tilbyr:
Hovedfunksjoner:
- Multi-agent samtaler: Agenter kan kommunisere i strukturerte diskusjoner
- Rollespesialisering: Hver agent kan ha spesifikke roller og ferdigheter
- Fleksible arbeidsflyter: Støtter både sekvensiell og parallell prosessering
- Menneskelig integrasjon: Kan inkludere mennesker i agent-diskusjoner
- Kodegenerering og -kjøring: Agenter kan skrive, kjøre og debugge kode
Fordeler med AutoGen:
- Enkel å sette opp og konfigurere
- Godt dokumentert og aktivt vedlikeholdt
- Støtter forskjellige LLM-er (OpenAI, Azure, lokale modeller)
- Innebygd støtte for kodeeksekverering og verktøybruk
- Fleksibel arkitektur som kan tilpasses mange bruksområder
For å forstå hvordan AutoGen fungerer, er det viktig å kjenne til de grunnleggende byggesteinene:
Agenter er de grunnleggende enhetene i AutoGen som kan kommunisere og utføre oppgaver:
AssistantAgent:
- Standard AI-agent som bruker en språkmodell
- Kan ha spesialiserte systemmeddelelser for å definere rolle og oppførsel
- Kan utstyres med verktøy (tools) for utvidede funksjoner
UserProxyAgent:
- Representerer en menneskelig bruker i samtalen
- Kan be om input fra brukeren eller fungere automatisk
- Brukes for å integrere menneskelig vurdering i agent-arbeidsflyter
CodeExecutorAgent:
- Spesialisert agent for å kjøre kode
- Kan utføre kode i isolerte miljøer (som Docker-containere)
- Sikrer trygg eksekverering av generert kode
AutoGen organiserer agenter i team med definerte kommunikasjonsmønstre:
RoundRobinGroupChat:
- Agenter snakker i en forhåndsbestemt rekkefølge
- Hver agent får mulighet til å respondere i tur
- Enkelt å forstå og forutsigbart kommunikasjonsmønster
Selector-baserte team:
- Mer avanserte mønstre hvor en "selector" bestemmer hvem som skal snakke
- Kan tilpasse kommunikasjonsflyt basert på kontekst
Definerer når en samtale eller oppgave skal avsluttes:
TextMentionTermination:
- Stopper når en spesifikk tekst nevnes (f.eks. "APPROVE")
- Nyttig for godkjenningsarbeidsflyter
MaxMessageTermination:
- Begrenser antall meldinger i en samtale
- Forhindrer uendelige diskusjoner
Kombinerte vilkår:
- Kan kombinere flere termineringsvilkår med logiske operatorer (AND/OR)
AutoGen støtter forskjellige språkmodeller gjennom modellklienter:
AzureOpenAIChatCompletionClient:
- Kobler til Azure OpenAI-tjenester
- Støtter modeller som GPT-4, GPT-4o, og GPT-4.1-nano
- Krever API-nøkkel og endpoint-konfigurasjon
Konfigurasjon:
model_client = AzureOpenAIChatCompletionClient(
azure_deployment="model-deployment-name",
model="model-name",
api_version="api-version" #"2024-10-21",
azure_endpoint="https://your-azure-openai-endpoint.openai.azure.com/",
api_key=api_key,
)Agenter kan utstyres med verktøy for å utføre spesifikke oppgaver:
Egendefinerte funksjoner:
- Python-funksjoner som agenter kan kalle
- Kan være synkrone eller asynkrone
- Må ha tydelige docstrings for at agenten skal forstå bruken
Eksempel:
async def web_search(query: str) -> str:
"""Find information on the web"""
# Implementasjon her
return resultAutoGen bruker asynkron programmering for effektiv håndtering:
Async/Await:
- Alle AutoGen-operasjoner er asynkrone
- Tillater parallell prosessering og bedre ressursutnyttelse
- Krever
asyncio.run()for å kjøre hovedfunksjoner
Streaming:
- Sanntidsvisning av agent-samtaler
ConsoleUI for å følge diskusjoner mens de pågår
AutoGen tilbyr flere metoder for å kjøre agenter og teams, avhengig av om du vil ha sanntidsvisning eller bare resultatet:
agent.run() - Enkel kjøring:
# Kjør en enkelt agent og få resultatet
result = await agent.run(task="Write a Python function to calculate fibonacci numbers")
print(result.messages[-1]) # Vis siste meldingagent.run_stream() - Streaming kjøring:
# Kjør agent med sanntidsvisning
stream = agent.run_stream(task="Explain quantum computing")
await Console(stream) # Vis meldinger mens de genereresteam.run() - Team kjøring:
# Kjør et team og få alle meldinger
result = await team.run(task="Create a web application with HTML, CSS and JavaScript")
for message in result.messages:
print(f"{message.source}: {message.content}")team.run_stream() - Team streaming:
# Kjør team med sanntidsvisning av diskusjonen
stream = team.run_stream(task="Design a database schema for an e-commerce system")
await Console(stream) # Følg diskusjonen i sanntidEnkelt Agent-Team:
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import MaxMessageTermination
from autogen_agentchat.ui import Console
async def main():
# Opprett agenter
coder = AssistantAgent("coder", model_client=model_client)
reviewer = AssistantAgent("reviewer", model_client=model_client)
# Opprett team
team = RoundRobinGroupChat(
participants=[coder, reviewer],
termination_condition=MaxMessageTermination(6)
)
# Kjør oppgave
task = "Write and review a Python function to sort a list"
await Console(team.run_stream(task=task))
# Kjør hovedfunksjonen
asyncio.run(main())Med Menneskelig Interaksjon:
from autogen_agentchat.agents import UserProxyAgent
async def interactive_session():
assistant = AssistantAgent("assistant", model_client=model_client)
user_proxy = UserProxyAgent("user", input_func=input)
team = RoundRobinGroupChat(
[assistant, user_proxy],
termination_condition=TextMentionTermination("DONE")
)
# Bruker kan delta i samtalen
await Console(team.run_stream(task="Help me plan a Python project"))
asyncio.run(interactive_session())team.reset():
- Nullstiller teamets tilstand før ny oppgave
- Viktig å kalle mellom forskjellige oppgaver
await team.reset() # Nullstill før ny oppgave
result = await team.run(task="New task here")Håndtering av Resultater:
# Få tilgang til alle meldinger
result = await team.run(task="Some task")
for message in result.messages:
print(f"Fra {message.source}: {message.content}")
# Få siste melding
last_message = result.messages[-1]
print(f"Siste svar: {last_message.content}")Feilhåndtering:
try:
result = await team.run(task="Complex task")
print("Oppgave fullført!")
except Exception as e:
print(f"Feil under kjøring: {e}")AutoGen har innebygde sikkerhetsfunksjoner:
Docker-basert kodeeksekverering:
- Isolerer kodekjøring fra hovedsystemet
- Forhindrer skadelig kode fra å påvirke vertsmaskinen
- Automatisk opprydding av ressurser
Kontrollerte miljøer:
- Definerte arbeidsmapper for hver oppgave
- Begrenset tilgang til systemressurser
Peer Review-mønster:
- En agent foreslår løsninger
- En annen agent evaluerer og gir tilbakemelding
- Iterativ forbedring til godkjenning
Spesialist-mønster:
- Forskjellige agenter har spesialiserte roller
- Koder, tester, dokumenterer, etc.
- Hver agent fokuserer på sitt ekspertiseområde
Menneske-i-løkka-mønster:
- Inkluderer menneskelig vurdering på kritiske punkter
- Kombinerer AI-effektivitet med menneskelig ekspertise
- Fleksibel kontroll over automatiseringsgrad
For å få mest mulig ut av workshoppen følger øvelsene en logisk progresjon fra enkle konsepter til mer avanserte multi-agent systemer. Anbefalt rekkefølge:
Fil: web_browsing_exercise.py
Konsepter: Agent tools, funksjonskall, enkelt agent-system
Beskrivelse: Lær hvordan du gir agenter tilgang til eksterne verktøy som web-søk. Øvelsen viser hvordan du definerer og bruker custom tools i AutoGen.
Fil: discussion_exercise.py
Konsepter: Multi-agent samtaler, RoundRobinGroupChat, termineringsvilkår
Beskrivelse: Opprett ditt første multi-agent system hvor to agenter (primary og critic) diskuterer og forbedrer løsninger sammen. Introduserer peer review-mønsteret.
Fil: discussion_with_user_exercise.py
Konsepter: UserProxyAgent, menneske-i-løkka, interaktive samtaler
Beskrivelse: Utvid agent-systemet til å inkludere menneskelig input. Lær hvordan du integrerer brukerinteraksjon i agent-arbeidsflyter.
Fil: code_gen_2_agents.py
Konsepter: CodeExecutorAgent, Docker-isolasjon, kode-generering og testing
Beskrivelse: Avansert øvelse som kombinerer kodegenerering og -utførelse. En agent skriver kode, en annen kjører den i et sikkert Docker-miljø.
💡 Tips: Start med øvelse 1 og arbeid deg oppover. Hver øvelse bygger på konseptene fra de forrige!