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