AI Агент закупок — цифровий працівник
AI Агент закупок автоматизує рутинні завдання відділу постачання: обробку заявок, порівняння пропозицій поставщиків, перевірку документів, ведення договорів, моніторинг виконання. Скорочує цикл закупки для стандартних позицій з кількох днів до годин.
Обробка заявок на закупку
from openai import AsyncOpenAI
from pydantic import BaseModel
from typing import Literal, Optional
client = AsyncOpenAI()
class PurchaseRequest(BaseModel):
item_name: str
quantity: float
unit: str
justification: str
requested_by: str
department: str
budget_code: str
urgency: Literal["urgent", "planned", "routine"]
estimated_budget: Optional[float]
preferred_vendor: Optional[str]
technical_requirements: Optional[str]
class ProcurementAgent:
async def process_request(self, request_text: str, requester: dict) -> dict:
"""Розбирає та обробляє заявку на закупку"""
# Витяг структурованих даних
parsed = await client.beta.chat.completions.parse(
model="gpt-4o",
messages=[{
"role": "system",
"content": "Витягни структуровані дані з заявки на закупку. Якщо даних немає — null."
}, {
"role": "user",
"content": f"Заявник: {requester['name']}, {requester['department']}\nЗаявка: {request_text}",
}],
response_format=PurchaseRequest,
temperature=0,
)
pr = parsed.choices[0].message.parsed
# Перевірка бюджету
budget_check = await self.check_budget_availability(
budget_code=pr.budget_code,
amount=pr.estimated_budget,
)
# Пошук історичних даних
similar_purchases = await self.find_similar_purchases(pr.item_name)
# Рекомендації по поставщику
vendor_recommendations = await self.get_vendor_recommendations(
pr.item_name, pr.quantity, similar_purchases
)
return {
"request": pr.model_dump(),
"budget_status": budget_check,
"similar_history": similar_purchases[:3],
"vendor_recommendations": vendor_recommendations,
"auto_approve": self.can_auto_approve(pr, budget_check),
}
def can_auto_approve(self, pr: PurchaseRequest, budget_check: dict) -> bool:
"""Автоматичне одобрення для стандартних позицій у межах ліміту"""
return (
budget_check["available"]
and (pr.estimated_budget or 0) <= 50000 # Ліміт автоодобрення 50 тис руб
and pr.urgency != "urgent" # Терміні вимагають ручної перевірки
and pr.item_name.lower() not in self.non_standard_items
)
Аналіз пропозицій поставщиків
async def compare_vendor_offers(
item: str,
quantity: float,
offers: list[dict],
technical_requirements: str = "",
) -> dict:
"""Аналізує та ранжирує пропозиції поставщиків"""
comparison = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Ти — менеджер по закупкам.
Оціни пропозиції поставщиків комплексно: ціна, терміни, надійність, умови оплати.
Вияви приховані ризики (нереалістичні терміни, невідомий поставщик, невідповідність вимогам)."""
}, {
"role": "user",
"content": f"""Позиція: {item}, кількість: {quantity}
Технічні вимоги: {technical_requirements}
Пропозиції поставщиків:
{json.dumps(offers, ensure_ascii=False, indent=2)}
Створи:
1. Порівняльну таблицю за ключовими параметрами
2. Рекомендацію з обґрунтуванням
3. Ризики вибраного поставщика"""
}],
)
return {
"analysis": comparison.choices[0].message.content,
"recommended_vendor": extract_recommendation(comparison.choices[0].message.content),
"comparison_table": extract_table(offers),
}
Практичний кейс: виробництво, 200 заявок/місяць
Ситуація: 3 менеджери по закупкам, 200 заявок/місяць, середній цикл 7 днів для стандартних позицій.
AI Агент автоматизував:
- Приймання та класифікацію заявок (Telegram + email)
- Перевірку бюджетних лімітів в ERP
- Запит комерційних пропозицій у 3–5 поставщиків з реєстру
- Порівняльний аналіз пропозицій
- Автоодобрення < 50 тис руб (62% заявок)
- Створення замовлень в ERP
Результати:
- Цикл стандартної закупки: 7 днів → 1.5 дня
- Менеджери фокусуються на: стратегічних поставщиках, переговорах, нестандартних позиціях
Терміни
- Обробка заявок та класифікація: 1–2 тижні
- Інтеграція з ERP та базою поставщиків: 2–3 тижні
- Аналіз пропозицій: 1 тиждень
- Workflow одобрення: 1 тиждень
- Всього: 5–7 тижнів







