Создание автономного агента анализа технического обслуживания автопарка
Научитесь создавать анализирующего агента для автопарка без использования внешних API.
Обзор проекта
В этом учебном пособии мы проходим процесс создания полностью автономного агента анализа автопарка с помощью SmolAgents и локальной модели Qwen. Мы генерируем телеметрические данные, загружаем их через инструмент и позволяем агенту рассуждать, анализировать и визуализировать риски обслуживания без вызовов внешних API.
Настройка окружения
Мы устанавливаем все необходимые библиотеки и импортируем основные модули, на которые полагаемся при создании нашего агента. В настройку входят SmolAgents, Transformers и базовые инструменты работы с данными для обработки телеметрии и корректной работы локальной модели.
print("<img src=\"https://s.w.org/images/core/emoji/16.0.1/72x72/23f3.png\" alt=\"⏳\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" /> Установка библиотек... (прибл. 30-60 секунд)")
!pip install smolagents transformers accelerate bitsandbytes ddgs matplotlib pandas -qГенерация данных автопарка
Затем мы генерируем реалистичный набор тестовых данных, который наш агент будет анализировать позже.
fleet_data = {
"truck_id": ["T-101", "T-102", "T-103", "T-104", "T-105"],
"driver": ["Али", "Сара", "Майк", "Омар", "Джен"],
"avg_speed_kmh": [65, 70, 62, 85, 60],
"fuel_efficiency_kml": [3.2, 3.1, 3.3, 1.8, 3.4],
"engine_temp_c": [85, 88, 86, 105, 84],
"last_maintenance_days": [30, 45, 120, 200, 15]
}\ndf = pd.DataFrame(fleet_data)
df.to_csv("fleet_logs.csv", index=False)
print("<img src=\"https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png\" alt=\"✅\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" /> 'fleet_logs.csv' создан.")Создание инструмента FleetDataTool
Мы создаем FleetDataTool, который позволяет агенту загружать и просматривать наш файл телеметрии.
class FleetDataTool(Tool):
name = "load_fleet_logs"
description = "Загружает данные телеметрии автомобилей из 'fleet_logs.csv'. Возвращает краткий обзор данных."
inputs = {}
output_type = "string"
def forward(self):
try:
df = pd.read_csv("fleet_logs.csv")
return f"Столбцы: {list(df.columns)}\nПример данных:\n{df.to_string()}"
except Exception as e:
return f"Ошибка загрузки логов: {e}"Загрузка локальной модели
Мы загружаем локальную модель Qwen2.5 и инициализируем нашего CodeAgent с кастомным инструментом.
model = TransformersModel(
model_id="Qwen/Qwen2.5-Coder-1.5B-Instruct",
device_map="auto",
max_new_tokens=2048
)
agent = CodeAgent(
tools=[FleetDataTool()],
model=model,
add_base_tools=True
)Запрос данных автопарка
Мы формируем подробный запрос для анализа данных автопарка агентом.
query = """
1. Загрузить логи автопарка.
2. Найти грузовик с худшей топливной эффективностью (наименьшее 'fuel_efficiency_kml').
3. Для этого грузовика проверить, был ли он вовремя на техническом обслуживании (порог 90 дней).
4. Создать столбчатую диаграмму, сравнивающую 'fuel_efficiency_kml' всех грузовиков.
5. Выделить худший грузовик КРАСНЫМ цветом, а остальные - СИНИМ на диаграмме.
6. Сохранить диаграмму как 'maintenance_alert.png'.
"""
response = agent.run(query)Отображение сгенерированных результатов
Мы проверяем, удалось ли агенту успешно сохранить сгенерированную диаграмму технического обслуживания, и отображаем её при доступности.
if os.path.exists("maintenance_alert.png"):
print("<img src=\"https://s.w.org/images/core/emoji/16.0.1/72x72/1f4ca.png\" alt=\"📊\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" /> Отображение сгенерированной диаграммы:")
img = plt.imread("maintenance_alert.png")
plt.figure(figsize=(10, 5))
plt.imshow(img)
plt.axis('off')
plt.show()
else:
print("<img src=\"https://s.w.org/images/core/emoji/16.0.1/72x72/26a0.png\" alt=\"⚠\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" /> Диаграмма не найдена. Проверьте логи агента выше.")Влияние на управление автопарком
В этом подходе мы построили интеллектуальную систему, позволяющую локальной модели автономно анализировать состояние автопарка. Используемая структура может быть расширена до реальных наборов данных и может интегрировать более сложные инструменты для предсказательной поддержки.
За полными кодами и подробной информацией смотрите FULL CODES здесь.
Switch Language
Read this article in English