Категоризация элементов по описанию через GTP

Всем доброго времени суток. Стоит такая задача: Пользователь пишет боту описание желаемой услуги. Например "Хочу крутой загар". На сервере через GPT определяется по описанию определяется категория. Проблема в том, что список категорий очень сильно разросся и один запрос стоит огромное кол-во токенов. Вопрос: Как-то можно вынести список услуг из промпта? Сейчас мой код выглядит так:

class AI():

    def __init__(self) -> None:
        self.token = os.environ["PROXYAI_API_KEY"]
        self.api_url = os.environ["API_URL"]

    async def categorize_description(self, text):
        categories = await crud.get_services()
        categories = list(map(lambda el: {"id": el["id"], "name": el["name"]}, categories))
        categories_answer_exemple = {
                'name': 'подкатегория',
                'id': 1
        }
        json_categories_answer_exemple = json.dumps(
            categories_answer_exemple,
            ensure_ascii=False,
        )
        prompt = f"""Есть список услуг в формате json : {categories} .
        name объекта указывает на имя ислуги. 
        Опираясь на свойство name объектов определи id и name услуги к которой принадлежит услуга по ее описанию.
        в ответ пришли только  json такого вида {json_categories_answer_exemple} . Ты не можешь добавлять в ответ новые name, id узлы, которых нет в списке услуг. Используй только те, которые предложены.
        Например если в описании говорится про одежду необходимо вернуть : 'name': 'Вязание кофт', 'id': 19 .
        Если не можешь определить категорию или подкатегорию в ответ пришли null 
        Учти, что в ответе может быть только 1 name и id. """
        # prompt = f"""Пользователь будет присылать тебе описание услуги. Нужно определить категорию принадлежание услуги к определенной подкатегории по ее описанию. Поиск по подкатегориям осуществляй в следующем json объекте \n {categories}. """
        chat_completion = client.chat.completions.create(
            model="gpt-4o-mini",
            response_format={"type": "json_object"},
            messages=[{
                "role": "system",
                "content": prompt
            }, {
                "role": "user",
                "content": text
            }])
        return json.loads(chat_completion.choices[0].message.content)

P.S. Я далеко не эксперт в работе с GPT. Можно сказать только начинаю изучать. Поэтому не судите строго


Ответы (0 шт):