Создал SaaS-аналитику для трекинга промптов и расходов с FastAPI + SQLite за 25 минут

Создал SaaS-аналитику для трекинга промптов и расходов с FastAPI + SQLite за 25 минут

В 2026 году почти любой ИТ-продукт — это SaaS-аналитика. Клиенты хотят видеть, какие промпты стоят дороже, сколько токенов тратится и как быстро растёт расход.

Я покажу полностью рабочий пример: веб-приложение, которое считает стоимость каждого промпта (по цене OpenAI) и сохраняет всё в SQLite.

Никаких внешних зависимостей кроме FastAPI и uvicorn. Запускается за 5 минут.

Что понадобится

  • Python 3.8+
  • fastapi и uvicorn
  • sqlalchemy (для SQLite)

Установите одной командой:

from sqlalchemy import Column, Integer, String, Float, DateTime from sqlalchemy.ext.declarative import declarative_base from datetime import datetime Base = declarative_base() class PromptRecord(Base): __tablename__ = "prompts" id = Column(Integer, primary_key=True, index=True) timestamp = Column(DateTime, default=datetime.utcnow) prompt = Column(String) # сам текст промпта cost_usd = Column(Float) # стоимость в долларах model = Column(String) # openai/gpt-4o-mini и т.д. tokens = Column(Integer) # пример: сколько токенов ушло

Файл main.py (весь код приложения)

from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from sqlalchemy import create_engine from datetime import datetime from .models import Base, PromptRecord from .schemas import PromptCreate, PromptResponse app = FastAPI(title="SaaS Prompt Cost Tracker", version="1.0.0") # Подключаемся к SQLite (файл создастся автоматически) engine = create_engine("sqlite:///./prompts.db") Base.metadata.create_all(bind=engine) def get_db(): from sqlalchemy.orm import sessionmaker SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) db = SessionLocal() try: yield db finally: db.close() # Эндпоинт: добавить новый промпт @app.post("/prompts/", response_model=PromptResponse) async def add_prompt(prompt: PromptCreate, db: Session = Depends(get_db)): # Пример расчёта стоимости (можно вынести в отдельный класс) model_prices = { "gpt-4o-mini": 0.00015, # $0.15 за 1M токенов "gpt-4o": 0.0025, "claude-3-haiku": 0.00025 } cost_usd = prompt.tokens * model_prices.get(prompt.model, 0.0001) db_prompt = PromptRecord( prompt=prompt.prompt, cost_usd=cost_usd, model=prompt.model, tokens=prompt.tokens ) db.add(db_prompt) db.commit() db.refresh(db_prompt) return db_prompt # Эндпоинт: получить все записи (можно фильтровать по дате) @app.get("/prompts/", response_model=list[PromptResponse]) async def get_prompts(db: Session = Depends(get_db)): return db.query(PromptRecord).order_by(PromptRecord.timestamp.desc()).all() # Эндпоинт: общая стоимость за последние 7 дней @app.get("/prompts/cost") async def get_total_cost(db: Session = Depends(get_db)): from datetime import timedelta seven_days_ago = datetime.utcnow() - timedelta(days=7) records = db.query(PromptRecord).filter( PromptRecord.timestamp >= seven_days_ago ).all() total = sum(r.cost_usd for r in records) return {"total_cost_usd": total, "records": len(records)} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)

Как добавить свой ИТ-продукт

  • Замените цены моделей на свои (например, для вашей SaaS-платформы).
  • Добавьте фильтр по дате, экспорт в Excel или Telegram-уведомления.
  • Замените SQLite на PostgreSQL (одна строка в engine).

Готово. Это уже реальная аналитика, которую можно показывать клиентам или использовать в своём продукте.

1
1 комментарий