Предоставление агентов через API
Оберните агента в FastAPI, добавив аутентификацию, проверку запросов и потоковую передачу через SSE или WebSockets.
«Предоставление агентов через API» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
От блокнота к сервису
Работающий агент в блокноте — это только начало. Чтобы выпустить его, оберните его в HTTP API, который смогут вызывать другие сервисы.
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)Аутентификация
Каждая конечная точка агента должна выполнять аутентификацию. Используйте ключи API или 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)):
...Потоковая передача ответов
Для интерфейсов чата передавайте токены потоком с помощью 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')Проверка запросов
Pydantic обеспечивает проверку типов и базовую проверку данных. При необходимости добавьте собственную проверку:
from pydantic import Field
class AgentRequest(BaseModel):
query: str = Field(min_length=1, max_length=10_000)
user_id: str
options: dict = {}Обработка ошибок
Преобразуйте исключения в понятные 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)Параллельное выполнение
FastAPI по умолчанию использует асинхронный режим. Для агентов, ограниченных производительностью CPU (что бывает редко), или блокирующих SDK используйте асинхронные клиенты:
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']Запуск с несколькими рабочими процессами
Uvicorn + Gunicorn для рабочей среды:
gunicorn -k uvicorn.workers.UvicornWorker -w 4 main:appОбратный прокси
Разместите Nginx или Caddy перед приложением для TLS, gzip и фильтрации 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=['*']
)Пункт контрольного списка для боевой среды
Что необходимо для любого API агента в боевой среде?
Итоги
FastAPI + Pydantic + асинхронный клиент + потоковая передача + аутентификация + структурированные журналы + проверки работоспособности. Это минимальный набор для боевой среды.
Часто задаваемые вопросы
Урок «Предоставление агентов через API» бесплатный?
Да — полный текст урока «Предоставление агентов через API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Предоставление агентов через API»?
Оберните агента в FastAPI, добавив аутентификацию, проверку запросов и потоковую передачу через SSE или WebSockets. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Предоставление агентов через API»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Предоставление агентов через API
- Асинхронные процессы и фоновые задачи
- Ограничение частоты и управление квотами
- Сине-зелёные и канареечные развёртывания агентов