Создал 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 комментарий