Финальный проект: создание рабочего решения
Pareto coreСоздание комплексного рабочего решения
Финальный проект объединяет все изученные техники в production-ready систему. Рассмотрим полный цикл разработки — от анализа задачи до развёртывания и мониторинга.
Этап 1: Проектирование решения
Перед написанием кода определите архитектуру системы:
Чек-лист проектирования:
## Анализ задачи
- [ ] Чёткое определение входных данных и ожидаемого результата
- [ ] Идентификация edge cases и граничных условий
- [ ] Определение метрик успеха (accuracy, latency, cost)
- [ ] Оценка объёма обработки (запросов в день/час)
## Архитектурные решения
- [ ] Выбор модели (баланс качество/стоимость/скорость)
- [ ] Определение структуры промптов (системный + пользовательский)
- [ ] Проектирование пайплайна обработки
- [ ] Стратегия обработки ошибок и fallback'ов
## Интеграция
- [ ] API endpoints и форматы данных
- [ ] Хранение результатов (БД, кэш)
- [ ] Логирование и мониторинг
- [ ] Безопасность (rate limiting, валидация входных данных)
Пример: Система автоматической обработки заявок
Разработаем полное решение для обработки входящих заявок с извлечением данных, категоризацией и маршрутизацией:
# config.py - Конфигурация системы
class Config:
# Параметры модели
TEMPERATURE_EXTRACTION = 0.1 # Для извлечения данных
TEMPERATURE_GENERATION = 0.4 # Для генерации ответов
MAX_RETRIES = 3
TIMEOUT = 30
# Пороги качества
CONFIDENCE_THRESHOLD = 0.7
AUTO_APPROVE_THRESHOLD = 0.85
# Бизнес-правила
PRIORITY_RULES = {
'enterprise': 'high',
'urgent_keywords': ['срочно', 'критично', 'немедленно']
}
# prompts.py - Библиотека промптов
class PromptLibrary:
SYSTEM_EXTRACTION = """
Ты — система обработки заявок. Извлекай структурированные данные.
СХЕМА ВЫВОДА:
{
"request_type": "technical_support" | "sales" | "general_inquiry" | "complaint",
"contact": {
"name": "string",
"company": "string или null",
"email": "string",
"phone": "string или null"
},
"details": {
"subject": "краткая суть (max 100 chars)",
"description": "детальное описание",
"products": ["упомянутые продукты"],
"urgency": "low" | "medium" | "high"
},
"extracted_requirements": ["requirement 1", "requirement 2"],
"sentiment": "positive" | "neutral" | "negative",
"confidence": 0.0-1.0
}
ПРАВИЛА URGENCY:
- high: содержит urgent_keywords или complaint с negative sentiment
- medium: sales запрос или technical_support
- low: general_inquiry
Возвращай ТОЛЬКО валидный JSON.
"""
SYSTEM_RESPONSE_GENERATION = """
Ты — ассистент службы поддержки. Генерируй профессиональные ответы на заявки.
TONE: вежливый, профессиональный, helpful
СТРУКТУРА:
1. Приветствие с обращением по имени
2. Подтверждение понимания запроса
3. Конкретные следующие шаги
4. Контактная информация и timeline
ПРАВИЛА:
- Не обещай того, что не можешь гарантировать
- Для технических вопросов — предложи эскалацию к специалисту
- Для sales — укажи, что менеджер свяжется в течение рабочего дня
- Для complaints — выражай сожаление и предлагай конкретное решение
"""
# request_processor.py - Основная логика
class RequestProcessor:
def __init__(self, config, llm_client):
self.config = config
self.llm = llm_client
self.prompts = PromptLibrary()
def process_request(self, raw_request):
"""Полный цикл обработки заявки"""
# Шаг 1: Извлечение структурированных данных
extraction_result = self._extract_data(raw_request)
if not extraction_result['success']:
return self._handle_extraction_failure(raw_request)
request_data = extraction_result['data']
# Шаг 2: Валидация и обогащение данных
validated_data = self._validate_and_enrich(request_data)
# Шаг 3: Определение приоритета и маршрутизация
routing = self._determine_routing(validated_data)
# Шаг 4: Генерация ответа
if routing['auto_respond']:
response = self._generate_response(validated_data)
else:
response = None # Требуется ручная обработка
# Шаг 5: Сохранение и уведомления
result = self._save_and_notify(validated_data, routing, response)
return result
def _extract_data(self, raw_text):
"""Извлечение данных с retry логикой"""
for attempt in range(self.config.MAX_RETRIES):
try:
response = self.llm.generate(
system=self.prompts.SYSTEM_EXTRACTION,
user=f"Заявка:\n\n{raw_text}",
temperature=self.config.TEMPERATURE_EXTRACTION,
timeout=self.config.TIMEOUT
)
# Парсинг и валидация
data = self._parse_json_response(response)
self._validate_schema(data)
return {'success': True, 'data': data, 'attempts': attempt + 1}
except Exception as e:
if attempt == self.config.MAX_RETRIES - 1:
self._log_error('extraction_failed', raw_text, str(e))
return {'success': False, 'error': str(e)}
time.sleep(2 ** attempt) # Exponential backoff
def _determine_routing(self, data):
"""Определение маршрутизации и необходимости ручной обработки"""
# Автоматический ответ только для простых случаев
auto_respond = (
data['confidence'] >= self.config.AUTO_APPROVE_THRESHOLD and
data['request_type'] in ['general_inquiry', 'sales'] and
data['sentiment'] != 'negative' and
data['details']['urgency'] != 'high'
)
# Определение ответственного
if data['request_type'] == 'technical_support':
team = 'support'
elif data['request_type'] == 'sales':
team = 'sales'
elif data['request_type'] == 'complaint':
team = 'customer_success'
else:
team = 'general'
return {
'auto_respond': auto_respond,
'assigned_team': team,
'priority': data['details']['urgency'],
'requires_review': not auto_respond
}
Этап 2: Тестирование и оптимизация
Создайте comprehensive test suite:
# tests.py
class TestRequestProcessor:
def test_extraction_accuracy(self):
"""Тест точности извлечения данных"""
test_cases = [
{
'input': "Здравствуйте, меня зовут Иван Петров...",
'expected': {
'contact.name': 'Иван Петров',
'request_type': 'technical_support'
}
}
]
for case in test_cases:
result = processor.process_request(case['input'])
assert result['data']['contact']['name'] == case['expected']['contact.name']
def test_edge_cases(self):
"""Тест граничных случаев"""
edge_cases = [
"", # Пустой запрос
"a" * 10000, # Очень длинный текст
"🚀💡🔥", # Только эмодзи
]
for case in edge_cases:
result = processor.process_request(case)
assert result['status'] in ['processed', 'error']
Этап 3: Мониторинг и документирование
Ключевые метрики: - Auto-response rate (целевое значение: >60%) - Average confidence (целевое значение: >0.8) - Error rate (целевое значение: <5%) - Processing time (целевое значение: <2s)
Алерты: - Error rate > 10% → уведомление команды - Confidence < 0.5 в значительной части запросов → ревью промптов - Processing time > 5s → проверка инфраструктуры
Ключевые принципы финального проекта
1. Начинайте с минимального MVP: - Один use case - Базовая функциональность - Ручная проверка всех результатов
2. Итеративно расширяйте: - Добавляйте автоматизацию постепенно - Собирайте метрики на каждом этапе - Оптимизируйте на основе реальных данных
3. Документируйте всё: - Архитектурные решения и их обоснование - Конфигурацию и параметры - Известные ограничения и edge cases
4. Мониторьте в production: - Логируйте все запросы и ответы - Отслеживайте ключевые метрики - Настройте алерты на аномалии
5. Планируйте поддержку: - Версионирование промптов - A/B тестирование изменений - Регулярный ревью качества
Успешное решение — это не идеальный промпт, а система, которая надёжно работает, легко поддерживается и постоянно улучшается на основе реальных данных.
AI-generated · source-grounded review
🛡 Fact-checked: 1 risky claim verified · 2 removed · confidence: high
A second opinion has not checked this lesson.
On your own course these buttons answer instantly, quizzes track what you've mastered, and lessons adapt to your gaps. Sign up free →