From c33b9932f98c0995113aac4e917a3b11fc6d661e Mon Sep 17 00:00:00 2001 From: ViktorSemericov Date: Fri, 31 Oct 2025 21:02:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20new=5Fparser=5Ftest.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- new_parser_test.py | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/new_parser_test.py b/new_parser_test.py index 8dd9155..36f0989 100644 --- a/new_parser_test.py +++ b/new_parser_test.py @@ -5,16 +5,15 @@ import requests from typing import Dict, Any, List, Optional from datetime import datetime, timedelta -API_KEY = "AIzaSyBXGBGH5NDY8L_jVmq2zb4i8xYEV2qN-48" +API_KEY = "AIzaSyBM4YX3AWQQOXgkg1L9WGD9_p1SZNkJMDw" API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" # Базовый список доступных тегов TAG_LIST = [ - "Памятник", "Архитектура", "Мозаика", "Панно", - "Парк", "Водоем", "Озеро", "Ботанический сад", + "Памятник", "Архитектура", "Мозаика", "Парк", "Озеро", "Ботанический сад", "Библиотека", "Архитектура", "Площадь", "Набережная", "Канатная дорога", "Сквер", "Музей", "Собор", "Церковь", - "Храм", "Театр", "Выставка", "Мост", "Художественное пространство", "Вокзал", "Фонтан", "Лестница", "Кинотеатр", + "Храм", "Театр", "Мост", "Вокзал", "Фонтан", "Лестница", "Кинотеатр", "Дом Культуры", "Планетарий", "Галерея", "Ресторан", "Бар", "Бистро", "Кафе", "Кофейня" ] @@ -25,7 +24,7 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list """ example_user_1 = "Я хочу культурно провести время, у меня 2 часа, я сейчас на улице Доброй около дома 1." example_json_1 = { - "tags": [["Музей", "Галерея", "Театр","Выставка","ANY", 'MULTI']], + "tags": [["Музей", "Галерея", "Театр", "ANY", 'MULTI']], "user_location": "улица Добрая, дом 1", "time": 120 } @@ -37,7 +36,7 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list } example_user_3 = "Я хочу культурно провести время потом попить кофе, я свободен до 6 вечера, я сейчас на б-р 60 лет Октября, 9" example_json_3 = { - "tags": [['Музей', 'Галерея', 'Театр', 'Выставка', 'Художественное пространство', 'Планетарий', 'ANY', 'MULTI'], ["Кофейня"]], + "tags": [['Музей', 'Галерея', 'Театр', 'Планетарий', 'ANY', 'MULTI'], ["Кофейня"]], "user_location": "бульвар 60 лет Октября, дом 9", "time": 'until 18:00' } @@ -50,6 +49,20 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list "time": 240 } + example_user_5 = "Я нахожусь: казанская набережная около дома 5. Мне интересно: Хочу посмотреть на картины и прокатиться на канатной дороге, потом зайти поесть. У меня есть время: 3 часа" + example_json_5 = { + "tags": [['Галерея','Канатная дорога'], ['Ресторан', 'Бистро', 'Кафе', 'ANY']], + "user_location": "Казанская набережная, дом 5", + "time": 180 + } + + example_user_6 = "Я нахожусь: проспект Гагарина 42. Мне интересно: Я хочу посмотреть на интересные здания и поесть. У меня есть время: 2.5 часа" + example_json_6 = { + "tags": [['Архитектура','MULTI'], ['Ресторан', 'Бистро', 'Кафе', 'ANY']], + "user_location": "проспект Гагарина, дом 42", + "time": 150 + } + instr = f""" Ты — ИИ-парсер на русском языке. Задача: из диалога с пользователем извлечь строго JSON c полями: @@ -60,12 +73,11 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list Работа с тегами: Группируй теги по ПРИОРИТЕТУ посещения: -- Если пользователь говорит "сначала музей, потом кафе" -> [['Музей'], ['Кафе']] -- Если "хочу в музей и кафе" (без явного порядка) -> [['Музей', 'Кафе']] +- Если пользователь говорит "сначала музей, потом кофе" -> [['Музей'], ['Кофейня']] +- Если "хочу в музей и кофе" (без явного порядка) -> [['Музей', 'Кофейня']] - Если неопределённые предпочтения "погулять по интересным местам", добавь ключевое слово 'ANY' к группе подходящих тегов. - Если пользователь хочет посетить несколько мест одного типа, добавь ключевое слово 'MULTI' в соответсвующую группу. "Хочу походить по музеям, потом попить кофе." -> [['Музей','MULTI'], ['Кофейня']] - Запрос пользователя может быть абстрактным "я хочу погулять по улице". Подбери релевантные теги на открытом воздухе (т.к. погулять можно интерпретировать как походить по улице не заходя куда-либо) например: [['Архитектура','Сквер','Площадь', 'ANY']]. Запрос может быть абстрактным, но не может быть полностью неопределенным. Примеры неопределенных ответов: "Хочу куда-нибудь сходить", "Я не знаю куда сходить", "Куда мне сходить?" -- Указывай все теги из tag_list которые явно подходят!!! Примеры могут быть неполными! ИСПОЛЬЗУЙ ТОЛЬКО ТЕГИ ИЗ ДАННОГО СПИСКА! @@ -97,6 +109,16 @@ tag_list = {json.dumps(tag_list, ensure_ascii=False, indent=0)} Ожидаемый JSON: {json.dumps(example_json_4, ensure_ascii=False, indent=2)} +Пример 5: +Пользователь: "{example_user_5}" +Ожидаемый JSON: +{json.dumps(example_json_5, ensure_ascii=False, indent=2)} + +Пример 6: +Пользователь: "{example_user_6}" +Ожидаемый JSON: +{json.dumps(example_json_6, ensure_ascii=False, indent=2)} + История диалога: """ @@ -167,7 +189,10 @@ def call_gemini(prompt: str) -> str: "role": "user", "parts": [{"text": prompt}] } - ] + ], + "generationConfig": { + "temperature": 0.5 + } } resp = requests.post(API_URL, headers=headers, json=payload, timeout=30) @@ -412,4 +437,3 @@ if __name__ == "__main__": out = parse() print(out) -