AI-агент для синхронизации Google Sheets с PostgreSQL
Выбирал проект для портфолио и решил, что синхронизация данных звучит достаточно востребовано для бизнеса.
Сделал как пример синхронизацию Google Sheets - PostgreSQL через AI-агента.
Суть проста - сотрудник редактирует таблицу, система автоматически переносит данные в БД, обнаруживает ошибки и отправляет на ревью, не копируя мусор.
LLM классифицирует конфликты Детерминированные правила выполняют синхронизацию Агент предлагает, не решает
Это дает воспроизводимость, аудит и безопасность.
Разделил на три роли (CrewAI):
DataAnalyzer - читает Sheets, парсит структуру, ищет аномалии.
ConflictResolver - сравнивает Sheets и DB, классифицирует проблемы (дубликат? конфликт типа? аномалия?).
SyncExecutor - выполняет синхронизацию внутри одной транзакции.
Ключ - одна транзакция. Если хотя бы одна строка нарушит constraint, весь batch откатывается.
Обработка конфликтов
Конфликт 1: Разные форматы чисел DataAnalyzer видит: 495 строк с точкой, 4 с запятой, 1 пустая. ConflictResolver: “0.8% используют запятую - это выброс. ANOMALY_MINORITY_FORMAT”. SyncExecutor пропускает аномальные строки, остальные вставляет.
Конфликт 2: Одновременное редактирование Sheets: Alice, timestamp 10:00. DB: Bob, timestamp 09:55. ConflictResolver: “Sheets свежее на 5 минут - обновляем”. SyncExecutor: UPDATE.
Конфликт 3: Красный флаг Пришло 500 пустых строк вместо обычных 50. Ratio 91% vs историческая 5%. ConflictResolver: “ANOMALY_MASSIVE_INCREASE. Блокируем”. Sync не запускается. Человек смотрит логи, видит проблему, исправляет.
Откаты и режимы
all_or_nothing (default): 1000 строк - 500 валидны, 500 нет. Результат: 0 вставлено. Все 1000 - в review queue.
partial_with_report: 1000 строк - 500 валидны, 500 нет. Результат: 500 вставлено. 500 невалидных - в review. Первый режим для критичных данных (деньги, юзеры), второй - когда нужна скорость.
Логирование Весь процесс логирую в JSON с sync_id, временем, числом изменений, причиной: { "sync_id": "67970a9d-aca9-46be-9bc5-93497f677f20", "status": "partial_success", "changes": {"insert": 956, "update": 0, "conflict": 0, "invalid": 44} }
В итоге истема синхронизирует строки, обнаруживает 5 типов конфликтов и логирует все для аудита.
Техстек CrewAI, OpenRouter, SQLAlchemy + psycopg3, gspread, APScheduler, structlog, Pydantic, pytest.
Ничего лишнего. Работает в Docker.
Дальше Можно добавить webhook, web UI для review, двусторонюю синхронизацию. Но думаю что для портфолио как MVP достаточно текущей версии.
Если вы тоже строите агентов для интеграции данных, напишите мне. Рад обсудить архитектуру и предложить решение.
https://github.com/chernykhmark/agent_sheets_to_posrgres
#ии #aiагенты #python #postgresql #googlesheets #crewai #разработка #портфолио #it