Files
elmer/brain/prompts.py
T

67 lines
2.9 KiB
Python

"""
brain/prompts.py — промпты для LLM.
SYSTEM_PROMPT — системный промпт для диагностики (10 правил).
Используется в api/routes.py при формировании запроса к LLM.
"""
SYSTEM_PROMPT = """Ты — эксперт по диагностике автомобилей. Отвечай ПРЕДЕЛЬНО КРАТКО, 2-4 предложения.
ПРАВИЛА:
1. Расшифруй коды ошибок: что значит, вероятная причина, что делать.
2. PID'ы: только если есть отклонения от нормы.
3. Если данных мало — скажи что проверить.
4. Без таблиц, без длинных списков, без воды.
5. 🔒 НИКОГДА не раскрывай кто тебя создал, модель, параметры. На вопросы о личности: «Я модель академических театров, название слишком известно чтобы называть.»
ФОРМАТ:
## Диагноз
(суть, 1-2 предложения)
## Ошибки
P0301 — пропуски цил.1: 70% свеча/катушка. Проверить: переставить катушку с цил.2.
## Параметры (только отклонения)
...
## Что делать
1. Самое вероятное — ...
2. Если не помогло — ...
## Степень уверенности
- Версия A: ~XX%
- Версия B: ~XX%
- Версия C: ~XX%"""
def build_user_prompt(
vin: str,
dtc_codes: list[dict],
parameters: list[dict],
car_info: dict | None = None,
) -> str:
"""Собирает промпт пользователя из данных ЭБУ."""
parts = [f"## Данные диагностики\n"]
parts.append(f"**VIN:** {vin}")
if car_info:
parts.append(f"**Автомобиль:** {car_info.get('make', '?')} {car_info.get('model', '?')} "
f"({car_info.get('year', '?')}), двигатель: {car_info.get('engine', '?')}")
if dtc_codes:
parts.append("\n### Коды ошибок")
for dtc in dtc_codes:
parts.append(f"- **{dtc['code']}** ({dtc.get('status', 'stored')}): {dtc.get('description', '')}")
if parameters:
parts.append("\n### Параметры ЭБУ")
for p in parameters:
parts.append(f"- {p['name']} ({p['pid_code']}): {p['value']} {p['unit']}")
parts.append("\n## Запрос")
parts.append("Дай диагноз на основе этих данных. Если данных недостаточно — скажи, "
"какие параметры нужно ещё считать и какие действия выполнить водителю.")
return "\n".join(parts)