Udostępnianie agentów za API
Opakuj agenta w FastAPI z uwierzytelnianiem, walidacją żądań i strumieniowaniem przez SSE lub WebSockets.
Udostępnianie agentów za API to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Od notebooka do usługi
Działający agent w notebooku to dopiero początek. Aby go wdrożyć, należy opakować go w interfejs API HTTP, z którego mogą korzystać inne usługi.
FastAPI Skeleton
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class AgentRequest(BaseModel):
query: str
user_id: str
class AgentResponse(BaseModel):
answer: str
trace_id: str
@app.post('/agents/qa', response_model=AgentResponse)
def qa(req: AgentRequest):
trace_id = run_agent(req.query, req.user_id)
return AgentResponse(answer=result.answer, trace_id=trace_id)Uwierzytelnianie
Każdy endpoint agenta musi uwierzytelniać wywołującego. W zależności od typu wywołującego należy używać kluczy API lub OAuth:
from fastapi import Header, HTTPException
def require_api_key(api_key: str = Header(alias='X-API-Key')):
if not is_valid(api_key):
raise HTTPException(401, 'Invalid API key')
return api_key
@app.post('/agents/qa')
def qa(req: AgentRequest, key=Depends(require_api_key)):
...Strumieniowanie odpowiedzi
W przypadku interfejsów czatu należy strumieniować tokeny za pomocą SSE:
from fastapi.responses import StreamingResponse
@app.post('/agents/qa/stream')
def qa_stream(req: AgentRequest):
def gen():
for chunk in stream_agent(req.query):
yield f'data: {chunk}\n\n'
yield 'data: [DONE]\n\n'
return StreamingResponse(gen(), media_type='text/event-stream')Walidacja żądań
Pydantic wymusza stosowanie typów i przeprowadza podstawową walidację. W razie potrzeby należy dodać niestandardową walidację:
from pydantic import Field
class AgentRequest(BaseModel):
query: str = Field(min_length=1, max_length=10_000)
user_id: str
options: dict = {}Obsługa błędów
Należy mapować wyjątki na przejrzyste odpowiedzi HTTP:
from fastapi import HTTPException
@app.exception_handler(BudgetExceeded)
def budget_handler(req, exc):
return JSONResponse({'error': 'budget-exceeded'}, status_code=429)
@app.exception_handler(Exception)
def catch_all(req, exc):
log.exception('Unhandled')
return JSONResponse({'error': 'internal', 'trace_id': get_trace_id()}, status_code=500)Współbieżność
FastAPI domyślnie korzysta z async. W przypadku agentów obciążających CPU (rzadko) lub blokujących SDK należy używać klientów asynchronicznych:
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def run_agent_async(query):
return await client.chat.completions.create(...)Health and Readiness Endpoints
@app.get('/healthz')
def healthz():
return {'status': 'ok'}
@app.get('/readyz')
def readyz():
if not vector_db.is_healthy():
raise HTTPException(503)
return {'status': 'ready'}Containerise
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ['uvicorn', 'main:app', '--host', '0.0.0.0', '--port', '8080']Uruchamianie z wieloma workerami
Uvicorn + Gunicorn w środowisku produkcyjnym:
gunicorn -k uvicorn.workers.UvicornWorker -w 4 main:appReverse proxy
Nginx lub Caddy należy umieścić przed aplikacją, aby obsługiwały TLS, gzip i listę dozwolonych adresów IP.
Logging Structured Output
import structlog
log = structlog.get_logger()
@app.middleware('http')
async def log_requests(request, call_next):
response = await call_next(request)
log.info('http', method=request.method, path=request.url.path, status=response.status_code)
return responseCORS for Browser Clients
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=['https://app.example.com'],
allow_methods=['*'], allow_headers=['*']
)Element listy kontrolnej wdrożenia produkcyjnego
Co jest niezbędne w każdym produkcyjnym API agenta?
Podsumowanie
FastAPI + Pydantic + klient asynchroniczny + strumieniowanie + uwierzytelnianie + ustrukturyzowane logi + sondy kondycji. To produkcyjne minimum.
Często zadawane pytania
Czy lekcja „Udostępnianie agentów za API” jest bezpłatna?
Tak — pełny tekst „Udostępnianie agentów za API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Udostępnianie agentów za API”?
Opakuj agenta w FastAPI z uwierzytelnianiem, walidacją żądań i strumieniowaniem przez SSE lub WebSockets. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Udostępnianie agentów za API”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Udostępnianie agentów za API
- Asynchroniczne przepływy pracy i zadania w tle
- Ograniczanie częstotliwości i zarządzanie limitami
- Wdrożenia blue-green i canary dla agentów