Håndtering af samtidighed og rate limits
Hold en RAG-tjeneste i produktion responsiv under belastning med asynkrone kald, batching, retries og backpressure.
Håndtering af samtidighed og rate limits er en gratis LangChain / RAG / vektordatabaser-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i LangChain / RAG / vektordatabaser, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.
Indlæsning i produktion
En aktiv RAG-tjeneste håndterer mange samtidige forespørgsler, hvor hver forespørgsel foretager kald til embedding- og LLM-tjenester. Uden omtanke rammer du hastighedsbegrænsninger, får timeout eller løber tør for hukommelse.
Synkron flaskehals
Blokering ved hvert API-kald serialiserer arbejdet. Mens én forespørgsel venter på LLM'en, kan serveren ikke håndtere andre og spilder dermed kapacitet.
Asynkron I/O
Asynkron behandling lader én worker håndtere mange samtidige kald. Mens den venter på ét svar, kan hændelsesløkken håndtere andre forespørgsler.
import asyncio
async def answer(q):
docs = await retriever.ainvoke(q)
return await chain.ainvoke({"q": q, "docs": docs})
results = asyncio.run(asyncio.gather(*[answer(q) for q in queries]))Batchbehandling af embeddings
Embedding-API'er er langt billigere og hurtigere pr. element, når du sender mange tekster i én forespørgsel. Gruppér bidder i batches i stedet for at kalde API'et én gang pr. bid.
vectors = embeddings.embed_documents(batch) # one call, many textsOverholdelse af hastighedsbegrænsninger
Udbydere begrænser antallet af forespørgsler og tokens pr. minut. En begrænser drosler udgående kald, så du holder dig under grænsen og undgår 429-fejl.
import asyncio
sem = asyncio.Semaphore(10) # max 10 concurrent calls
async def limited(q):
async with sem:
return await answer(q)Prøv igen med backoff
Midlertidige fejl og 429-fejl skal forsøges igen med eksponentiel backoff og jitter, ikke gentages straks i en tæt løkke.
import time, random
def call_with_retry(fn, tries=5):
for i in range(tries):
try:
return fn()
except RateLimitError:
time.sleep((2 ** i) + random.random())
raise RuntimeError("exhausted retries")Idempotens ved nye forsøg
Nye forsøg kan gentage sideeffekter. Gør skrivehandlinger idempotente ved hjælp af nøgler eller upserts, så et gentaget kald er ufarligt.
Tilbagetryk
Når køen vokser hurtigere, end du kan behandle den, skal du anvende tilbagetryk: Afvis eller bortsortér nye forespørgsler tidligt i stedet for at lade svartiden vokse for alle.
Forbindelsespooling
Genbrug HTTP-forbindelser og databaseklienter på tværs af forespørgsler. Det spilder tid på håndtryk at oprette en ny klient for hver forespørgsel, og det kan opbruge filbeskrivelser.
Caching af populære forespørgsler
Mange brugere stiller de samme spørgsmål. Gem embeddings og endelige svar for hyppige forespørgsler i en cache, så både svartid og API-omkostninger reduceres markant.
key = hashlib.sha256(query.encode()).hexdigest()
if key in cache:
return cache[key]
ans = expensive_rag(query)
cache[key] = ansSådan samler du det hele
Kombiner asynkron håndtering, en semafor til samtidighed, batchbehandlede embeddings, nye forsøg med backoff og caching. Tjenesten forbliver hurtig og stabil, når trafikken vokser.
Hurtigt tjek
Test din forståelse af skalering af RAG.
Opsummering
Du har lært at håndtere belastning i produktion:
- Asynkron behandling til samtidige igangværende kald
- Batchbehandl embeddings, og genbrug forbindelser
- Drosl ned med en begrænser, og forsøg igen med backoff
- Anvend tilbagetryk, og gem populære forespørgsler i en cache
Lær LangChain / RAG / vektordatabaser med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Håndtering af samtidighed og rate limits” gratis?
Ja — hele teksten til “Håndtering af samtidighed og rate limits” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af LangChain / RAG / vektordatabaser-kurset, skal du opgradere til CoddyKit PRO. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Håndtering af samtidighed og rate limits”?
Hold en RAG-tjeneste i produktion responsiv under belastning med asynkrone kald, batching, retries og backpressure. Du øver dig i LangChain / RAG / vektordatabaser med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på LangChain / RAG / vektordatabaser?
Der kræves ingen tidligere erfaring. LangChain / RAG / vektordatabaser på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Håndtering af samtidighed og rate limits”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne LangChain / RAG / vektordatabaser-lektion?
Ja. Alle LangChain / RAG / vektordatabaser-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Overvågning og logning af RAG-applikationer
- Caching og optimering af ydeevne
- Implementeringsstrategier for RAG i skyen
- Håndtering af samtidighed og rate limits