Обновить new_parser_test.py

This commit is contained in:
2025-10-31 21:02:46 +03:00
parent 2e400d1bbe
commit c33b9932f9

View File

@@ -5,16 +5,15 @@ import requests
from typing import Dict, Any, List, Optional from typing import Dict, Any, List, Optional
from datetime import datetime, timedelta 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" API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent"
# Базовый список доступных тегов # Базовый список доступных тегов
TAG_LIST = [ TAG_LIST = [
"Памятник", "Архитектура", "Мозаика", "Панно", "Памятник", "Архитектура", "Мозаика", "Парк", "Озеро", "Ботанический сад", "Библиотека",
"Парк", "Водоем", "Озеро", "Ботанический сад",
"Архитектура", "Площадь", "Набережная", "Канатная дорога", "Архитектура", "Площадь", "Набережная", "Канатная дорога",
"Сквер", "Музей", "Собор", "Церковь", "Сквер", "Музей", "Собор", "Церковь",
"Храм", "Театр", "Выставка", "Мост", "Художественное пространство", "Вокзал", "Фонтан", "Лестница", "Кинотеатр", "Храм", "Театр", "Мост", "Вокзал", "Фонтан", "Лестница", "Кинотеатр",
"Дом Культуры", "Планетарий", "Галерея", "Ресторан", "Бар", "Бистро", "Кафе", "Кофейня" "Дом Культуры", "Планетарий", "Галерея", "Ресторан", "Бар", "Бистро", "Кафе", "Кофейня"
] ]
@@ -25,7 +24,7 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list
""" """
example_user_1 = "Я хочу культурно провести время, у меня 2 часа, я сейчас на улице Доброй около дома 1." example_user_1 = "Я хочу культурно провести время, у меня 2 часа, я сейчас на улице Доброй около дома 1."
example_json_1 = { example_json_1 = {
"tags": [["Музей", "Галерея", "Театр","Выставка","ANY", 'MULTI']], "tags": [["Музей", "Галерея", "Театр", "ANY", 'MULTI']],
"user_location": "улица Добрая, дом 1", "user_location": "улица Добрая, дом 1",
"time": 120 "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_user_3 = "Я хочу культурно провести время потом попить кофе, я свободен до 6 вечера, я сейчас на б-р 60 лет Октября, 9"
example_json_3 = { example_json_3 = {
"tags": [['Музей', 'Галерея', 'Театр', 'Выставка', 'Художественное пространство', 'Планетарий', 'ANY', 'MULTI'], ["Кофейня"]], "tags": [['Музей', 'Галерея', 'Театр', 'Планетарий', 'ANY', 'MULTI'], ["Кофейня"]],
"user_location": "бульвар 60 лет Октября, дом 9", "user_location": "бульвар 60 лет Октября, дом 9",
"time": 'until 18:00' "time": 'until 18:00'
} }
@@ -50,6 +49,20 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list
"time": 240 "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""" instr = f"""
Ты — ИИ-парсер на русском языке. Ты — ИИ-парсер на русском языке.
Задача: из диалога с пользователем извлечь строго JSON c полями: Задача: из диалога с пользователем извлечь строго JSON c полями:
@@ -60,12 +73,11 @@ def build_extraction_prompt(conversation_history: List[Dict[str, str]], tag_list
Работа с тегами: Работа с тегами:
Группируй теги по ПРИОРИТЕТУ посещения: Группируй теги по ПРИОРИТЕТУ посещения:
- Если пользователь говорит "сначала музей, потом кафе" -> [['Музей'], ['Кафе']] - Если пользователь говорит "сначала музей, потом кофе" -> [['Музей'], ['Кофейня']]
- Если "хочу в музей и кафе" (без явного порядка) -> [['Музей', 'Кафе']] - Если "хочу в музей и кофе" (без явного порядка) -> [['Музей', 'Кофейня']]
- Если неопределённые предпочтения "погулять по интересным местам", добавь ключевое слово 'ANY' к группе подходящих тегов. - Если неопределённые предпочтения "погулять по интересным местам", добавь ключевое слово 'ANY' к группе подходящих тегов.
- Если пользователь хочет посетить несколько мест одного типа, добавь ключевое слово 'MULTI' в соответсвующую группу. "Хочу походить по музеям, потом попить кофе." -> [['Музей','MULTI'], ['Кофейня']] - Если пользователь хочет посетить несколько мест одного типа, добавь ключевое слово 'MULTI' в соответсвующую группу. "Хочу походить по музеям, потом попить кофе." -> [['Музей','MULTI'], ['Кофейня']]
- Запрос пользователя может быть абстрактным "я хочу погулять по улице". Подбери релевантные теги на открытом воздухе (т.к. погулять можно интерпретировать как походить по улице не заходя куда-либо) например: [['Архитектура','Сквер','Площадь', 'ANY']]. Запрос может быть абстрактным, но не может быть полностью неопределенным. Примеры неопределенных ответов: "Хочу куда-нибудь сходить", "Я не знаю куда сходить", "Куда мне сходить?" - Запрос пользователя может быть абстрактным "я хочу погулять по улице". Подбери релевантные теги на открытом воздухе (т.к. погулять можно интерпретировать как походить по улице не заходя куда-либо) например: [['Архитектура','Сквер','Площадь', 'ANY']]. Запрос может быть абстрактным, но не может быть полностью неопределенным. Примеры неопределенных ответов: "Хочу куда-нибудь сходить", "Я не знаю куда сходить", "Куда мне сходить?"
- Указывай все теги из tag_list которые явно подходят!!! Примеры могут быть неполными!
ИСПОЛЬЗУЙ ТОЛЬКО ТЕГИ ИЗ ДАННОГО СПИСКА! ИСПОЛЬЗУЙ ТОЛЬКО ТЕГИ ИЗ ДАННОГО СПИСКА!
@@ -97,6 +109,16 @@ tag_list = {json.dumps(tag_list, ensure_ascii=False, indent=0)}
Ожидаемый JSON: Ожидаемый JSON:
{json.dumps(example_json_4, ensure_ascii=False, indent=2)} {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", "role": "user",
"parts": [{"text": prompt}] "parts": [{"text": prompt}]
} }
] ],
"generationConfig": {
"temperature": 0.5
}
} }
resp = requests.post(API_URL, headers=headers, json=payload, timeout=30) resp = requests.post(API_URL, headers=headers, json=payload, timeout=30)
@@ -412,4 +437,3 @@ if __name__ == "__main__":
out = parse() out = parse()
print(out) print(out)