feat: глубокий промпт — полный анализ вместо краткого резюме
This commit is contained in:
+39
-21
@@ -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
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user