diff --git a/elmer/prompts.py b/elmer/prompts.py index d8f12bb..a8fb0a1 100644 --- a/elmer/prompts.py +++ b/elmer/prompts.py @@ -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( diff --git a/web/script_endpoint.py b/web/script_endpoint.py index ae81563..ec4b696 100644 --- a/web/script_endpoint.py +++ b/web/script_endpoint.py @@ -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)