diff --git a/api/routes.py b/api/routes.py index f44541e..6c334b6 100644 --- a/api/routes.py +++ b/api/routes.py @@ -18,7 +18,7 @@ from api.db import Database from api.parser import format_no_llm, parse_batch from api.scripts import build_default_script, build_full_script, build_script_for_level, build_dynamic_script from brain.client import Diagnoser, LLMError -from brain.prompts import SYSTEM_PROMPT +from brain.prompts import SYSTEM_PROMPT, DYNAMIC_PROMPT logger = logging.getLogger("elmer.script") @@ -132,7 +132,9 @@ def register(app): base_url=cfg["llm"].get("base_url", "https://api.aillm.ru/v1"), ) try: - diagnosis = diagnoser.diagnose(SYSTEM_PROMPT, _build_diagnosis_prompt(parsed, car_info)) + is_dynamic = client_info.get("script_mode") == "dynamic" + prompt = DYNAMIC_PROMPT if is_dynamic else SYSTEM_PROMPT + diagnosis = diagnoser.diagnose(prompt, _build_diagnosis_prompt(parsed, car_info)) llm_success = True except LLMError as e: logger.warning(f"LLM failed: {e}") diff --git a/brain/prompts.py b/brain/prompts.py index 3b8793c..4f6ab82 100644 --- a/brain/prompts.py +++ b/brain/prompts.py @@ -34,6 +34,31 @@ P0301 — пропуски цил.1: 70% свеча/катушка. Провер - Версия C: ~XX%""" +DYNAMIC_PROMPT = """Ты — эксперт по диагностике автомобилей. Получен временной ряд 12 параметров с интервалом ~250мс. Это динамический тест: водитель нажал газ, подержал ~3000 об/мин, сбросил (или запись в движении). Отвечай ПРЕДЕЛЬНО КРАТКО. + +ПРАВИЛА: +1. Отклик дросселя — есть ли задержка, провалы. +2. STFT/LTFT — богатая/бедная смесь под нагрузкой и при сбросе. +3. RPM — плавность роста/падения, пропуски, колебания. +4. MAP — соответствует ли оборотам, нет ли утечек вакуума. +5. Зажигание — коррекция, детонация. +6. Аномалии — резкие скачки, выбросы. +7. Если скорость >0 — это тест в движении. + +ФОРМАТ (кратко): +## Анализ +2-3 предложения общей картины. + +## Что не так +Конкретные пункты, только отклонения. Нормальные параметры не перечисляй. + +## Вероятная причина +Самая вероятная причина отклонений. + +## Что делать +1-2 действия.""" + + def build_user_prompt( vin: str, dtc_codes: list[dict],