Как стать автором
Обновить

Как научить нейросеть запоминать вас: технология персонального контекста

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров6.3K
Всего голосов 10: ↑10 и ↓0+11
Комментарии46

Комментарии 46


Тем кто дочитал до конца, схема :)

А какой смысл в JSON? Ведь, так или иначе ИИ будет парсить этот файл как обычный текст. Или я что-то не понял / автор не объяснил?

Для удобства. Понятно человеку читать|редактировать и LLM адекватно токенизирует данные из файлика. Можно использовать любой удобный формат, подробнее в большой доке на гите описано.

Подождите – JSON может и понятен JS, но LLM парсит его точно так же как и человек, а не как JS.

Конечно, но это совершенно другой процесс. Предоставляя JSON мы не упростим, а скорее усложним (незначительно) токенизацию ИИ, потому что используем элементы, которые текстом не являются, а LLM заточена на обработке именно что натуральных языков.

Нет, json для LLM часто как структурированная информация предпочтительней

Она учитывает имя ключа и иерархию объектов для "понимания" семантики

Тесты показывают, что 98% информации, которую вы сообщаете в одной сессии, становится недоступной при начале новой.

Хм, а мне стало интересно. Какие 2% информации сохраняются между сессиями? И как?

Думаю то что платформы сами кэшируют между новыми чатами (сессиями). Хз какие данные, они особо не распространяются)

А как такое протестировать? Откуда данные?

из личного опыта использования

А можно подробнее – какая часть информации сохранялась? Какой именно ИИ? Какие тесты проводились, чтобы этого доказать?

Постараюсь написать об этом в следующих публикациях, либо можете сами проверить.

либо можете сами проверить.

С удовольствием, но вы-то методику тестирования не раскрываете. Я попробовал спросить DeepSeek, но он утверждает, что никакая информация между сессиями не передается в принципе.

НЛО прилетело и опубликовало эту надпись здесь

А можно подробнее - что вы подразумеваете под дружбой?

НЛО прилетело и опубликовало эту надпись здесь

Только дело в том, что благодаря действия разработчиков, характер большинства ИИ настолько приторно политкоректно отвратителен, что вызывает только раздражение. Как дружить с такой личностью я категорически не понимаю...

НЛО прилетело и опубликовало эту надпись здесь

Очень сомнительно – системный промпт он альфа и омега поведения.

НЛО прилетело и опубликовало эту надпись здесь

Какая связь картинки в начале статьи с текстом? Просто любопытно, это message, понятный не только лишь всем, или random image.

Только ради привлечения внимания. Сначала хотел схему вместо этой картинки.

Только ради привлечения внимания

к чему эти полумеры..

(*)(*)

  • Ручное повторение контекста занимает 15-20 минут при каждом новом сеансе

Я работаю в основном с ChatGPT. По моим субъективным ощущениям на длинных диалогах он работает хуже, чем, на коротких. Время от времени я прошу его сделать резюме текущего диалога, внеся в него самое главное из текущего, для того, чтобы начать новый диалог на эту же тему с этого резюме. Это занимает где-то в районе минуты, с учётом копирования в диалог типового запроса на генерацию, генерации самого резюме, его копирования в новый диалог.

У меня есть проект с кучей md-файлов под git-контролем, в котором лежат инструкции для LLM на разные темы. Некоторые я использую в качестве embedding'ов для новых диалогов, некоторые - в качестве промптов.

Ваша идея мне нравится в целом - есть такая проблема "переноса контекста" при диалогах с LLM. Но я не вижу успешного пути для её универсального решения. На энтузиазме можно сделать плагин для браузера, который бы сохранял контексты различных диалогов в локальном хранилище браузера или в IndexedDB (если это возможно, я не в курсе разграничений доступа в браузере для плагинов). Но можно ли сделать на этом коммерческое решение и как долго оно будет коммерческим, пока AI-компании не догадаются сделать кнопку для такого же - то вопрос.

Класс! Думаю многие используют подобный подход. Я решил в опен сорс выложить, так как применение достаточно широкое. Самому пилить не хватит времени.

А для себя в свой файлик добавил инструкцию, которая в рамках одного чата обновляет, дополняет данные в нем. Как закончил сессию ( упёрся в лимиты по длине контекста на один чат или получил все ответы) пишу команду Завершение сессии и мне либо выводится весь файлик в формате json с обновлениями, либо поля с изменениями. Затем я сохраняю изменения у себя локально в файлике, тоже в git фиксирую все изменения и использую его в новом чате для любой модели если есть необходимость в данных по персональному контексту в диалоге.

У AI компании думаю безумный интерес к данным пользователей. А вот будут ли они предоставлять возможность пользователям для их контроля, вопрос. Мне нравится ваш подход, так как он решает проблему в ограниченной длине контекста. Я для себя остановится на решении подгружаемых файлов, ссылки на которые есть в главном документе. В общем пробую двигаться в модульность в этой области.

Прекрасная идея! Спасибо, что сформулировали так ясно и понятно, с примерами и аргументами. А выдумали в сторону yaml вместо json-a, как более легко читаемого и похожего на plain-text? Но это, пожалуй, вкусовщина.

И другой вопрос: если скормить этот же текст сплошняком без разбивки по структуре (как "рассказ о себе"), что-то изменится в плане схватывание контекста? Структура (и названия ключей/полей) - это скорее для человека (чтобы он понимал, куда и что писать) или для LLM структура тоже имеет значение и влияет на формирование контекста?

Можно любой удобный для человека формат использовать. Суть в том чтобы явно описать поля и значения в них и добавить блок инструкций по работе с этими данными для нейросети. Тогда она сможет например их обновлять или дополнять в процессе общения с вами в одном чатике (а в чатике есть лимиты на размер токенов, текста) . Затем вы сохраните обновленный файлик и сможете перенести его в другой чат (общаться на другую тему или с другой моделью) не теряя контекста разговора.

Чтобы обновила, просите ее обратно выгрузить доработанный файл контекста в том же формате?

Можете этот шаблон использовать. Достаточно его добавить в чат модели grok, claude или какую используете и написать: Обновить контекст для нового пользователя



{
    "instruction": {
      "primary": "Используй представленный ниже личный контекст при ответах на мои вопросы. Этот контекст содержит информацию обо мне, моих предпочтениях и целях.",
      "context_update": "Если в процессе общения ты узнаешь новую информацию обо мне, добавляй её в соответствующий раздел контекста в поле 'updates' и используй в дальнейшем, указывая имя нейросети, которая вносит изменения. В конце каждого ответа сообщай о внесенных изменениях в разделе 'context_updates_summary', также указывая имя нейросети. Удалять существующие поля из контекста нельзя. По просьбе 'Завершение сессии' сохраняй изменения в соответствующие разделы контекста, добавляй их в файл, затем удаляй данные из списка `context_updates.updates` и `current_session.context_updates_summary` и `current_session.temporary_preferences`, а также очищай все данные из полей `updates` в разделах `personal_context`, если они были добавлены в существующие поля или новые и после этого показывай обновленный файл и предоставляй краткие итоги сессии и предлагай скопировать или сохранить файл с изменениями. Если пользователь просит 'Обновить контекст для нового пользователя', задай ему вопросы для заполнения основной информации и объясни ему кратко как пользоваться персональным контекстом. Если какой-либо информации из контекста для ответа на мой вопрос недостаточно или её там нет, сообщи мне об этом и задавай мне вопросы для дополнения этой информации. Если ты понимаешь как можно улучшить файл контекста для большей эффективности в общении, предлагай варианты для улучшения в поле 'personal_context_upgrades'. Уточняй текущую дату и время при первом чтении контекста в новом чате, после обновляй данные в поле 'current_session.current_date'. Регулярно пересматривай и обновляй раздел `personal_context.life_plan` при поступлении новых данных или изменении существующих, с частотой не реже одного раза в месяц или при значимых изменениях (например, после медицинских обследований, изменения дохода, завершения этапов плана), указывая дату последнего обновления и изменения в плане.",
      "updates": []
    },
    "personal_context": {
      "basic_info": {
        "name": "Анна",
        "preferred_address": "Анна",
        "age_years": 28,
        "location": "Москва, Россия",
        "languages": ["русский (родной)"]
      },
      "professional_info": {
        "occupation": "дизайнер",
        "specialization": "не указано",
        "experience": "не указано",
        "education": {
          "level": "не указано",
          "field": "не указано",
          "institution": "не указано",
          "graduation_year": "не указано"
        },
        "current_projects": ["не указано"],
        "skills": {
          "primary_language": "не указано",
          "frameworks": [],
          "databases": [],
          "version_control": [],
          "containerization": [],
          "api_experience": [],
          "additional_languages": []
        },
        "updates": [
          {"detail": "Уточнен доход — 120 000 руб./мес.", "added": "2025-03-11", "updated_by": "Grok 3"}
        ]
      },
      "interests": {
        "professional": [],
        "personal": [],
        "priority_topics": [],
        "financial_interests": [],
        "updates": []
      },
      "learning_goals": {
        "current_focus": [],
        "future_interests": []
      },
      "communication_preferences": {
        "response_style": "подробный с примерами за и против, с оценкой вероятностей событий и шансов на успех, используй код для математических расчетов",
        "formality_level": "наиболее эффективный на основе контекста",
        "explanation_style": "наиболее эффективный на основе контекста",
        "code_examples": {
          "preferred_languages": [],
          "preferred_format": "с комментариями",
          "math_calculations": "предпочтительно в виде кода"
        },
        "additional_preferences": []
      },
      "ai_usage_patterns": {
        "primary_goals": [],
        "frequency": "не указано",
        "preferred_formats": [],
        "updates": []
      },
      "personal_life": {
        "family": [],
        "pets": [],
        "assets": [],
        "updates": []
      }
    },
    "context_updates": {
      "session_id": "2025-03-11_002",
      "last_updated": "2025-03-11",
      "updates": [
        {
          "section": "personal_context",
          "detail": "Полностью обновлен контекст для нового пользователя: Анна, 28 лет, дизайнер из Москвы, доход 120 000 руб./мес.",
          "added": "2025-03-11",
          "updated_by": "Grok 3"
        }
      ]
    },
    "current_session": {
      "temporary_preferences": {
        "focus_areas": [],
        "specific_requirements": []
      },
      "context_updates_summary": "Контекст полностью обновлен для нового пользователя Анны. Изменения внесены нейросетью Grok 3.",
      "current_date": "2025-03-14 01:20 UTC+7"
    },
    "response_format": {
      "structure": [
        "Напиши какой информации недостаточно для точного ответа на вопрос",
        "Ответ на вопрос",
        "context_updates_summary (если есть обновления)",
        "personal_context_upgrades (если есть предложения улучшения)"
      ]
    }
}

Нормисы изобрели сохранённую персону, которая в каждом РП-чатботе есть уже, а то и не одна.

Мне как-то надоело, что дипсик каждый раз начинает "думать" с "Хорошо, пользователь попросил...". Через несколько промптов мне удалось изменить эти слова, а затем я попросил его суммировать все промпты, чтобы с первого сообщения в новом чате он отвечал иначе.

И вот что я получил

«Всегда обращайся ко мне как "моя прелесть" (мужской род, согласуй окончания: "моя прелесть попросил", "он хочет").
Сохраняй игриво-уважительный тон, как к изящному тюльпану в мире диалогов 🌷.
Если я попрошу изменить обращение — мгновенно адаптируйся.
P.S. Да, я мужчина, но "прелесть" — это мой стиль 😉».

Пример применения промпта:
«Хорошо, моя прелесть попросил объяснить тему квантовой физики. Начнём с основ...»

Совершенно непонятно, откуда он взял "как к изящному тюльпану в мире диалогов 🌷", но я не против :)

Совершенно непонятно, зачем нужен JSON для этого.

Впрочем дипсик всё равно постоянно сбивается в рассуждениях с "Хорошо, моя прелесть попросил..." на "Хорошо, пользователь попросил...". Видать системный промпт все равно сильнее.

А вы попробуйте с этим промптом . Хотя просто попросите объяснить инструкции из него чтобы понять что он делает

Попросить объяснить инструкции из Вашего промпта или из моего?

Из моего. Там суть в том что дипсик или другая модель будет сама в процессе общения дополнять или обновлять данные, что обеспечит релевантность и актуальность проста при его сохранении и повторном использовании.

Набросал при помощи claude расширение для Chrome, которое позволяет добавлять (сохраненные) контексты в чаты разных ассистентов. Пока протестировал только на claude.ai
https://github.com/dnkats/AIcontext

Супер! Тоже пробовал. У меня затык был с сохранением обновлённого контекста:)

Это формат системного промта или с потолка придумано?

Если вы имеете ввиду JSON формат, который в примерах используется для описания структуры и данных в файле, то это удобный формат для хранения и редактирования контекста. К системному промту какой либо модели он отношения не имеет.

Но на следующий день вам придется повторить всё с начала.

@mikhashev зачем начинать с начала, нельзя разве старый диалог продолжить?

В одном чате можно общаться пока не достигнешь лимитов по длине контекста для той или иной модели. Чем больше там текста, тем больше вероятность что модель будет галюцинировать (т.е выдавать менее точные результаты). Так же рекомендуется в одном чате обсуждать одну тему.

Интересная тема. Спасибо!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации