Обновить new_parser_test.py
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user