/
Alekron
/
Unbeatable_Benchmarking
Обзор
Документация
Войти
/
Alekron
/
Unbeatable_Benchmarking
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Backend/query_parser.py
68 строк
3 KB
Alekron
Initial Backend
23 ноя 2025, 09:12
23 ноя 2025, 09:12
245fffc
Код
Авторство
О чём код?
import requests import json import logging from models import UserQueryAnalysis logger = logging.getLogger(__name__) class QueryParser: def __init__(self, ollama_url: str = "http://localhost:11434"): self.ollama_url = ollama_url async def analyze_user_query(self, user_query: str) -> UserQueryAnalysis: """Анализирует запрос пользователя через Ollama и извлекает структурированные данные""" prompt = f""" Пользовательский запрос: "{user_query}" Проанализируй этот запрос и извлеки следующую информацию в формате JSON: 1. banks - список банков для сравнения (обязательно включи "Сбер" если он не упомянут) 2. product_description - описание продукта/услуги из запроса 3. criteria - список критериев для сравнения Примеры: - "Сравни ВТБ и Альфа-банк по вкладам по стоимости обслуживания, процентным ставкам и кредитному лимиту" → {{"banks": ["Сбер", "ВТБ", "Альфа-Банк"], "product_description": "вклады", "criteria": ["стоимость обслуживания", "процентные ставки", "кредитный лимит"]}} - "Какие ипотечные программы лучше у Тинькофф и Открытия по ставкам и первоначальному взносу?" → {{"banks": ["Сбер", "Тинькофф", "Открытие"], "product_description": "ипотечные программы", "criteria": ["ставки", "первоначальный взнос"]}} - "Сравни условия по кредитным картам" → {{"banks": ["Сбер", "ВТБ", "Альфа-Банк", "Тинькофф"], "product_description": "кредитные карты", "criteria": ["основные условия"]}} Верни ТОЛЬКО JSON без каких-либо объяснений. """ try: response = requests.post( f"{self.ollama_url}/api/generate", json={ "model": "qwen3:8b", "prompt": prompt, "stream": False, "format": "json" }, timeout=30 ) if response.status_code == 200: result = response.json() json_str = result["response"].strip() json_str = json_str.replace('```json', '').replace('```', '').strip() data = json.loads(json_str) return UserQueryAnalysis( banks=data["banks"], product_description=data["product_description"], criteria=data["criteria"] ) else: logger.error(f"Ollama error: {response.status_code}") raise Exception(f"Ошибка анализа запроса: {response.status_code}") except Exception as e: logger.error(f"Ошибка при анализе запроса: {e}") raise Exception(f"Ошибка при анализе запроса: {str(e)}")