Как я построил LeadPilot — AI-CRM с автоматическим скорингом лидов. Архитектура, код, развертывание. Читайте и применяйте!
Вы когда-нибудь теряли ценного клиента, потому что не успели вовремя обработать заявку? Входящие лиды приходят без оценки и сортировки, и команда тратит часы на ручной триаж. Я решил эту проблему, создав LeadPilot — AI-систему автоматизации лидов, где каждый новый контакт получает оценку, квалификацию и черновик ответа мгновенно. В этой статье я разберу архитектуру, ключевые компоненты и код, чтобы вы могли внедрить похожее решение у себя.
LeadPilot работает по простому принципу: лид попадает в форму → попадает в очередь → воркер оценивает его от 0 до 100 с помощью Claude Haiku (определяет намерение, температуру, составляет сводку и персональный ответ) → лид появляется в канбан-пайплайне. Захват происходит мгновенно, а скоринг — асинхронно, поэтому пользователь не ждёт ответа системы.
Проект состоит из пяти независимых сервисов, каждый из которых выполняет свою роль. Это позволяет легко масштабировать нагрузку и обновлять компоненты без простоя.
API ставит задачу в Valkey и сразу возвращает ответ, а воркер (отдельный сервис) выполняет медленную AI-работу. Такая развязка через очередь позволяет обрабатывать пиковые нагрузки без потери данных.
Сервисы общаются через приватную сеть с помощью ссылок на переменные окружения — никаких секретов в коде. Пример конфигурации:
run:
envVariables:
DB_HOST: ${db_hostname}
DB_PASS: ${db_password}
REDIS_HOST: ${cache_hostname}
REDIS_PASSWORD: ${cache_password}
start:
python -m uvicorn app.main:app --host 0.0.0.0 --port 8080Затем с помощью zcli я запушил API, воркер и фронтенд. Миграции выполняются один раз на версию через zsc execOnce, а эндпоинт /api/health обеспечивает обновления без даунтайма.
Для скоринга используется Claude Haiku с детерминированным запасным вариантом, чтобы система никогда не падала. Я спроектировал архитектуру и протестировал всё, а написание кода ускорил с помощью Claude Code — это инструмент, который генерирует код по описанию. Вот упрощённый пример функции скоринга на Python:
import os
from anthropic import Anthropic
def score_lead(lead_data: dict) -> dict:
"""Оценивает лид от 0 до 100 и возвращает сводку."""
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
prompt = f"Оцени лид: {lead_data}. Верни JSON с полями score, intent, summary."
try:
response = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=200,
messages=[{"role": "user", "content": prompt}]
)
# Парсим JSON из ответа
result = json.loads(response.content[0].text)
return result
except Exception:
# Запасной вариант: детерминированная оценка
score = min(100, len(lead_data.get("message", "")) * 2)
return {"score": score, "intent": "unknown", "summary": "Запасной скоринг"}Этот код можно интегрировать в воркер, который будет обрабатывать очередь из Valkey. Главное — не забыть про обработку ошибок и повторные попытки.
Если вы хотите автоматизировать обработку лидов в своём проекте, начните с малого: создайте FastAPI-приложение, подключите Valkey как очередь и напишите простого воркера. Используйте готовые AI-модели для скоринга, но всегда предусматривайте запасной вариант. Попробуйте LeadPilot вживую по ссылке и посмотрите код на GitHub — это отличный пример современной архитектуры. Внедряйте итеративно: сначала захват, потом скоринг, потом интеграция с CRM. Удачи!
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →