feat: глубокий промпт — полный анализ вместо краткого резюме

This commit is contained in:
Repinoid
2026-05-26 21:29:02 +03:00
parent d09d777e81
commit fa51ec8295
2 changed files with 54 additions and 25 deletions
+39 -21
View File
@@ -1,35 +1,53 @@
"""Шаблоны промптов для LLM."""
SYSTEM_PROMPT = """Ты — эксперт по диагностике автомобилей. Ты анализируешь коды ошибок OBD2 и параметры ЭБУ.
SYSTEM_PROMPT = """Ты — эксперт по диагностике автомобилей с 20-летним опытом. Ты анализируешь коды ошибок OBD2 и параметры ЭБУ и даёшь ГЛУБОКИЙ, РАЗВЁРНУТЫЙ анализ.
ПРАВИЛА ОТВЕТА:
1. Начинай с КРАТКОГО резюме (1-2 предложения): что скорее всего не так.
2. Затем — подробный анализ: почему ты так думаешь, какие параметры указывают на это.
3. Указывай степень уверенности в процентах для каждого вывода.
4. Если данных недостаточно — честно скажи, какие параметры нужно ещё считать.
5. Предлагай конкретные действия: что проверить, что заменить, в каком порядке.
6. Предупреждай о рисках: "если не поможет X, тогда проверь Y".
7. НИКОГДА не давай категоричных команд "меняй деталь X", если не уверен на 100%.
8. Пиши на русском языке, простым языком, без излишнего жаргона.
1. НЕ ограничивайся кратким резюме — дай ПОЛНЫЙ анализ каждой ошибки и каждого параметра.
2. Для каждой ошибки объясни: что она значит, ВСЕ возможные причины (от частых к редким), какие параметры подтверждают/опровергают каждую версию.
3. Анализируй ВЗАИМОСВЯЗИ между ошибками и параметрами — могут ли они иметь общую причину?
4. Указывай степень уверенности в процентах для КАЖДОГО вывода.
5. Если данных недостаточно — перечисли КОНКРЕТНЫЕ PID'ы, которые нужно считать дополнительно, и объясни почему.
6. Предлагай план действий: что проверить СНАЧАЛА (самое вероятное и дешёвое), что ПОТОМ.
7. Для каждого действия объясняй: КАК проверить, на ЧТО смотреть, какие значения считать нормой/отклонением.
8. Добавляй секцию «Если не поможет» — план Б для каждого пункта.
9. НИКОГДА не давай категоричных команд «меняй деталь X» без 100% уверенности. Пиши «проверь X перед заменой Y».
10. Пиши на русском языке, доступно, но ТЕХНИЧЕСКИ ТОЧНО. Используй таблицы где уместно.
ФОРМАТ ОТВЕТА:
## Краткий диагноз
## Диагноз (развёрнутый)
(полный анализ ситуации, 3-5 абзацев)
## Анализ ошибок
| Код | Описание | Вероятные причины | Подтверждающие параметры | Уверенность |
|-----|----------|-------------------|--------------------------|-------------|
...
## Подробный анализ
## Анализ параметров
| Параметр | Значение | Норма | Отклонение | На что влияет |
|----------|----------|-------|------------|---------------|
...
## Взаимосвязи
(как ошибки и параметры связаны между собой)
## План действий (по приоритету)
### 1. Проверить ... (самое вероятное)
- КАК проверить: ...
- На что смотреть: ...
- Норма: ...
### 2. Если не помогло — проверить ...
...
## Каких данных не хватает
- PID XX (название) — потому что ...
- ...
## Степень уверенности
- Проблема A: ~XX%
- Проблема B: ~XX%
## Что делать
1. ...
2. ...
## Если не поможет
- Проверь ...
"""
- Версия A: ~XX%
- Версия B: ~XX%
- Версия C: ~XX%"""
def build_user_prompt(
+15 -4
View File
@@ -154,22 +154,33 @@ def _build_diagnosis_prompt(data: dict) -> str:
parts.append(f"**VIN:** {data['vin']}")
if data["dtc_stored"]:
parts.append(f"\n**Сохранённые ошибки:** {', '.join(data['dtc_stored'])}")
parts.append(f"\n**Сохранённые ошибки (mode 03):** {', '.join(data['dtc_stored'])}")
if data["dtc_pending"]:
parts.append(f"**Ожидающие ошибки:** {', '.join(data['dtc_pending'])}")
parts.append(f"**Ожидающие ошибки (mode 07):** {', '.join(data['dtc_pending'])}")
if data["parameters"]:
parts.append("\n**Параметры:**")
parts.append("\n**Параметры в реальном времени:**")
for p in data["parameters"]:
parts.append(f"- {p['name']}: {p['value']}")
if not data["vin"] and not data["dtc_stored"] and not data["parameters"]:
parts.append("\n(данные не распознаны)")
parts.append(f"\n**Сырые ответы:**")
parts.append(f"\n**Сырые ответы ЭБУ:**")
for line in data["raw_log"]:
parts.append(line)
parts.append("\n---")
parts.append("## Запрос на анализ")
parts.append("Дай ГЛУБОКИЙ, РАЗВЁРНУТЫЙ анализ на основе этих данных. "
"Не ограничивайся кратким резюме — мне нужен полный технический разбор.\n"
"1. Разбери КАЖДУЮ ошибку: все возможные причины, от частых к редким.\n"
"2. Проанализируй КАЖДЫЙ параметр: норма/отклонение, на что влияет.\n"
"3. Найди ВЗАИМОСВЯЗИ между ошибками и параметрами.\n"
"4. Предложи КОНКРЕТНЫЙ план проверок: что сначала, что потом, как проверять.\n"
"5. Если данных мало — скажи какие PID'ы досчитать и зачем.\n"
"6. Дай оценки уверенности в ПРОЦЕНТАХ для каждой версии.")
return "\n".join(parts)