Sådan kommunikeres der med LLM-API'er
For at bygge en AI-agent i Python er det første skridt at forstå, hvordan man taler med en stor sprogmodel (LLM). Det handler grundlæggende om at sende en struktureret anmodning til en fjernserver og modtage et svar, men måden kommunikationen foregår på – og hvilke protokoller der bruges – har stor betydning for, hvor responsiv og anvendelig din agent bliver.
Når du kalder en LLM-API, foregår det i praksis som et HTTP-kald. Du sender en POST-anmodning til udbyderens endpoint (for eksempel OpenAI eller Anthropic) med en JSON-payload, der indeholder dine beskeder, modelnavnet og eventuelle parametre som temperatur eller maksimalt antal tokens. Serveren behandler din anmodning og returnerer et svar, typisk også i JSON-format.
I Python findes der flere måder at håndtere denne kommunikation på. Du kan bruge et lav-niveau bibliotek som httpx til selv at bygge anmodningerne, eller du kan vælge et høj-niveau bibliotek som uss-aigent, der abstraherer det meste. Med sidstnævnte kan et kald se så enkelt ud som:
from aigent import Aigent
agent = Aigent(api_type="openai")
with agent.session() as s:
print(s.chat("Hej!"))
Biblioteket læser automatisk din API-nøgle fra en miljøvariabel og håndterer opsætningen af forbindelsen. Uanset om du vælger en letvægtsløsning eller et mere fuldt udbygget framework, er det centrale princip det samme: Din Python-kode fungerer som mellemled mellem brugeren og LLM'en, og det er her, du har kontrol over, hvilke data der sendes afsted, og hvordan svaret behandles.
Kommunikationsprotokoller
- Standard HTTP (request/response): Den enkleste og mest udbredte protokol. Din agent sender en anmodning og venter på, at hele svaret er genereret, før det returneres. Velegnet til korte svar eller når du har brug for et struktureret output, men det kan føles langsomt.
- Server-Sent Events (SSE): En streamingprotokol bygget oven på HTTP. Serveren holder forbindelsen åben og sender løbende små bidder af svaret (tokens), efterhånden som de genereres. Giver en markant lavere oplevet ventetid, fordi brugeren ser første token næsten med det samme. Kan implementeres med
sse-starlette. - WebSocket: Fuld duplex-kommunikation, hvor både klient og server kan sende beskeder uafhængigt. Relevant for interaktive agenter eller hvor agenten skal kunne udføre værktøjskald i realtid. For simple chat-agenter er SSE dog ofte tilstrækkeligt.
Fælles for alle protokollerne er, at de understøtter den såkaldte function calling eller tool use. Det betyder, at LLM'en ikke bare genererer tekst, men også returnerer en anmodning om at kalde en bestemt funktion i din kode – fx for at hente vejrdata. Din agent udfører funktionen, sender resultatet tilbage, og LLM'en formulerer det endelige svar.