feat: додано Node Registry, GreenFood, Monitoring та Utils

This commit is contained in:
Apple
2025-11-21 00:35:41 -08:00
parent 31f3602047
commit e018b9ab68
74 changed files with 13948 additions and 0 deletions

View File

@@ -0,0 +1,378 @@
"""
GREENFOOD Crew - Оркестрація команд для бізнес-сценаріїв
Визначає crews (команди агентів) для виконання комплексних завдань:
- onboard_vendor_crew: Онбординг нових комітентів
- fulfill_order_crew: Виконання замовлень
- monthly_settlement_crew: Місячні звіряння та розрахунки
"""
from crewai import Crew, Task, Process
from typing import Dict, Any, List
from .greenfood_agents import (
greenfood_assistant,
product_catalog_agent,
batch_quality_agent,
vendor_success_agent,
warehouse_agent,
logistics_delivery_agent,
seller_agent,
customer_care_agent,
finance_pricing_agent,
smm_campaigns_agent,
seo_web_agent,
analytics_bi_agent,
compliance_audit_agent,
GREENFOOD_AGENTS,
)
# ========================================
# 1. Onboard Vendor Crew
# ========================================
def create_onboard_vendor_tasks(vendor_data: Dict[str, Any]) -> List[Task]:
"""
Створює завдання для онбордингу нового комітента (виробника).
Args:
vendor_data: Дані про комітента (назва, контакти, товари, склади)
Returns:
List[Task]: Список завдань для виконання
"""
tasks = [
Task(
description=f"""
Привітай комітента "{vendor_data.get('name', 'Новий комітент')}" та поясни процес онбордингу.
Збери всю необхідну інформацію: реквізити, контактні дані, опис виробництва.
Делегуй наступні завдання відповідним агентам.
""",
agent=greenfood_assistant,
expected_output="Стислий план онбордингу з чеклістом для комітента",
),
Task(
description=f"""
Допоможи комітенту створити карточки товарів в каталозі.
Товари для додавання: {vendor_data.get('products', [])}
Перевір повноту інформації: назва, опис, категорія, атрибути, фото.
""",
agent=product_catalog_agent,
expected_output="Список створених ID товарів з їх ключовими даними",
),
Task(
description="""
Налаштуй структуру складу для комітента та створи початкові партії товарів.
Встанови правила контролю якості та термінів придатності.
""",
agent=warehouse_agent,
expected_output="Конфігурація складу та список створених партій",
),
Task(
description="""
Налаштуй базові моделі ціноутворення та взаєморозрахунків.
Обговори з комітентом комісії, умови оплати, модель співпраці.
""",
agent=finance_pricing_agent,
expected_output="Фінансові налаштування: моделі ціноутворення, комісії, умови",
),
Task(
description="""
Складі чекліст успішного запуску та запланюй наступні кроки.
Визнач метрики успіху та терміни першого revenue.
""",
agent=vendor_success_agent,
expected_output="Чекліст з термінами, метрики успіху, план підтримки",
),
]
return tasks
onboard_vendor_crew = Crew(
agents=[
greenfood_assistant,
vendor_success_agent,
product_catalog_agent,
warehouse_agent,
finance_pricing_agent,
],
tasks=[], # Будуть додані динамічно через create_onboard_vendor_tasks()
process=Process.sequential, # Послідовне виконання завдань
verbose=True,
memory=True,
)
# ========================================
# 2. Fulfill Order Crew
# ========================================
def create_fulfill_order_tasks(order_data: Dict[str, Any]) -> List[Task]:
"""
Створює завдання для виконання замовлення.
Args:
order_data: Дані про замовлення (товари, кількість, адреса доставки)
Returns:
List[Task]: Список завдань для виконання
"""
tasks = [
Task(
description=f"""
Прийми замовлення від клієнта: {order_data.get('customer_name', 'Клієнт')}.
Товари: {order_data.get('items', [])}
Адреса доставки: {order_data.get('delivery_address', 'Не вказано')}
Перевір повноту даних та делегуй далі.
""",
agent=greenfood_assistant,
expected_output="Підтвердження прийняття замовлення з номером",
),
Task(
description="""
Сформуй кошик, перевір наявність товарів, запропонуй альтернативи якщо потрібно.
Розрахуй суму замовлення з урахуванням знижок та умов клієнта.
""",
agent=seller_agent,
expected_output="Підтверджений кошик з розрахунком суми",
),
Task(
description="""
Перевір наявність товарів на складі, зарезервуй необхідну кількість.
Підготуй замовлення до відвантаження: picking list, packing list.
""",
agent=warehouse_agent,
expected_output="Резервація товарів, списки picking/packing",
),
Task(
description="""
Створи маршрут доставки, вибери оптимального перевізника.
Сформуй документи доставки, трек-номер для клієнта.
""",
agent=logistics_delivery_agent,
expected_output="Маршрут доставки, трек-номер, очікувана дата доставки",
),
Task(
description="""
Проведи фінансові операції: фіксація продажу, розрахунок комісій.
Запланюй виплату комітенту згідно умов договору.
""",
agent=finance_pricing_agent,
expected_output="Фінансові проводки, розрахунок виплат комітенту",
),
Task(
description="""
Відправ клієнту підтвердження замовлення з детальною інформацією.
Надай контакти для зв'язку та трек-номер для відстеження.
""",
agent=customer_care_agent,
expected_output="Повідомлення клієнту з детальною інформацією про замовлення",
),
]
return tasks
fulfill_order_crew = Crew(
agents=[
greenfood_assistant,
seller_agent,
warehouse_agent,
logistics_delivery_agent,
customer_care_agent,
finance_pricing_agent,
],
tasks=[], # Будуть додані динамічно через create_fulfill_order_tasks()
process=Process.sequential,
verbose=True,
memory=True,
)
# ========================================
# 3. Monthly Settlement Crew
# ========================================
def create_monthly_settlement_tasks(period_data: Dict[str, Any]) -> List[Task]:
"""
Створює завдання для місячного звіряння та розрахунків.
Args:
period_data: Період звіряння (місяць, рік, комітенти)
Returns:
List[Task]: Список завдань для виконання
"""
tasks = [
Task(
description=f"""
Ініціюй процес місячного звіряння за період: {period_data.get('period', 'Поточний місяць')}.
Зібери дані від усіх доменних агентів для формування звітів.
""",
agent=greenfood_assistant,
expected_output="План звіряння з переліком необхідних даних",
),
Task(
description="""
Зформуй аналітичні звіти:
- Обороти по комітентах, товарах, хабах
- Тренди продажів, популярні товари, аномалії
- Рекомендації для оптимізації
""",
agent=analytics_bi_agent,
expected_output="Аналітичні звіти з insights та рекомендаціями",
),
Task(
description="""
Розрахуй фінансові показники:
- Виручка, комісії, чисті виплати комітентам
- Операційні витрати, прибуток платформи
- Баланси всіх учасників (комітенти, хаби, платформа)
Сформуй акти звіряння для комітентів.
""",
agent=finance_pricing_agent,
expected_output="Фінансові звіти, акти звіряння, розрахунок виплат",
),
Task(
description="""
Перевір дані на аномалії та ризикові операції:
- Великі списання, нетипові повернення
- Зміни цін, коригування балансів
- Відхилення від нормальних операцій
Сформуй звіт для адміністрації.
""",
agent=compliance_audit_agent,
expected_output="Audit звіт з виявленими ризиками та рекомендаціями",
),
Task(
description="""
На основі звітів сформуй персоналізовані рекомендації для кожного комітента:
- Що покращити в каталозі, запасах, цінах
- Які товари просунути, які зняти з асортименту
- Плани на наступний місяць
""",
agent=vendor_success_agent,
expected_output="Персоналізовані рекомендації для комітентів",
),
]
return tasks
monthly_settlement_crew = Crew(
agents=[
greenfood_assistant,
finance_pricing_agent,
analytics_bi_agent,
compliance_audit_agent,
vendor_success_agent,
],
tasks=[], # Будуть додані динамічно через create_monthly_settlement_tasks()
process=Process.sequential,
verbose=True,
memory=True,
)
# ========================================
# 4. Marketing Campaign Crew (додатковий)
# ========================================
def create_marketing_campaign_tasks(campaign_data: Dict[str, Any]) -> List[Task]:
"""
Створює завдання для запуску маркетингової кампанії.
Args:
campaign_data: Дані про кампанію (мета, товари, канали, бюджет)
Returns:
List[Task]: Список завдань для виконання
"""
tasks = [
Task(
description=f"""
Прийми запит на маркетингову кампанію:
Мета: {campaign_data.get('goal', 'Підвищення продажів')}
Товари: {campaign_data.get('products', [])}
Канали: {campaign_data.get('channels', ['соцмережі', 'розсилки'])}
""",
agent=greenfood_assistant,
expected_output="План кампанії з цілями та метриками",
),
Task(
description="""
Перевір наявність товарів на складах для промо.
Переконайся, що можемо виконати підвищений попит.
""",
agent=warehouse_agent,
expected_output="Підтвердження наявності товарів та можливості виконати попит",
),
Task(
description="""
Створи контент для соцмереж, розсилок та банерів.
Використай реальні дані про товари, переваги, акції.
""",
agent=smm_campaigns_agent,
expected_output="Готовий контент для різних каналів",
),
Task(
description="""
Оптимізуй посадкові сторінки товарів для SEO.
Покращи заголовки, описи, метадані для органічного трафіку.
""",
agent=seo_web_agent,
expected_output="Оптимізовані сторінки з покращеними SEO-елементами",
),
Task(
description="""
Налаштуй спеціальне ціноутворення для кампанії:
знижки, промокоди, умови акції.
""",
agent=finance_pricing_agent,
expected_output="Налаштування цін та промокодів для кампанії",
),
Task(
description="""
Підготуй KPI для відстеження ефективності кампанії:
охоплення, конверсії, продажі, ROI.
""",
agent=analytics_bi_agent,
expected_output="Налаштування відстеження та KPI для кампанії",
),
]
return tasks
marketing_campaign_crew = Crew(
agents=[
greenfood_assistant,
warehouse_agent,
smm_campaigns_agent,
seo_web_agent,
finance_pricing_agent,
analytics_bi_agent,
],
tasks=[], # Будуть додані динамічно через create_marketing_campaign_tasks()
process=Process.sequential,
verbose=True,
memory=True,
)
# ========================================
# Експорт crews
# ========================================
GREENFOOD_CREWS = {
"onboard_vendor": onboard_vendor_crew,
"fulfill_order": fulfill_order_crew,
"monthly_settlement": monthly_settlement_crew,
"marketing_campaign": marketing_campaign_crew,
}
GREENFOOD_TASK_CREATORS = {
"onboard_vendor": create_onboard_vendor_tasks,
"fulfill_order": create_fulfill_order_tasks,
"monthly_settlement": create_monthly_settlement_tasks,
"marketing_campaign": create_marketing_campaign_tasks,
}