Создание персонажа, опирающегося на историю чата

Короткий вопрос: какая структура будет «лучше» для нашего сценария?

У нас есть набор экспортированных логов чатов из каналов Slack, содержащих много знаний, упомянутых проблем и решений и т. д. Очевидно, что в этих чатах много бесполезного «шума», который экономически невыгодно просто выгружать в темы/посты и заставлять использовать это AI-боту.

У нас около 10 файлов размером примерно 1–2 МБ каждый. Что касается использования AI-персоны, у нас будет около 30 человек, выполняющих примерно 10 чатов в день (объём токенов здесь сложно оценить).

На данный момент я думаю, какой будет разумный подход 80/20, чтобы использовать эти логи чатов, сохраняя при этом экономическую эффективность. Сводка свелась к двум вариантам:

  1. Копирование и вставка логов в темы/посты Discourse: Быстро и грязно, не требуется кастомная разработка, но может привести к значительным затратам на API.
  2. Предварительная обработка логов чатов каким-либо образом, приведение их к правильному формату или структуре и загрузка в персону.
  3. Или, возможно, гибридный вариант: При каждом запросе к AI-боту оценивать и сохранять вывод в текстовый файл, а затем загружать его в персону.

Какой вариант вы бы порекомендовали? Или, может быть, что-то совершенно другое?

Я рекомендую следующий подход:

  1. Обработайте 10 файлов, используя «креативный» персонаж с большой контекстной областью и большим объемом вывода, например, Sonnet 4 thinking. Цель этой обработки — «привести в порядок» информацию и подготовить её для RAG.
  2. Затем с помощью встроенной функции загрузки загрузите 10 обработанных файлов в персонаж, чтобы RAG мог осуществлять поиск по содержимому.

Учитывая огромный объем данных, я не рекомендую перегружать системный промпт. В качестве ориентира: системный промпт не должен быть слишком длинным, так как это становится затратным. 10 тысяч токенов — это приемлемо, но 100 тысяч токенов не подходят для современных передовых LLM. Каждое взаимодействие будет стоить вам слишком дорого, а модели станут еще более запутанными.

Дайте нам знать, как у вас получится!

Пожалуйста, поделитесь промптами, которые вы использовали для сокращения и приведения в порядок чат-логов.

Спасибо, это помогает!

Уточните, пожалуйста: все ли загруженные файлы внедряются в системный промпт? Или они сначала обрабатываются через настроенную модель ai_embeddings_model, а затем внедряются?

Я немного запутался в вашей рекомендации по лимиту в 10 тыс. токенов, особенно в части, указанной ниже:

Файлы по ссылке Discourse AI Persona, upload support ограничены только вашим лимитом загрузки — они могут быть очень большими. Они обрабатываются через эмбеддинги: в зависимости от конфигурации мы внедряем фрагменты текста в промпт.

О чём я говорил, так это о попытке уместить всю информацию в один системный промпт здесь:

что имеет ограничения…

Ах, теперь всё ясно, спасибо!

Так что, по сути, мои следующие шаги — провести несколько тестов с разными моделями эмбеддингов и посмотреть, какой размер токена в итоге попадёт в системный промпт, верно?

И при создании этих txt-файлов с чанками я должен убедиться, что они остаются в разумном лимите около 10 тысяч?

Модель эмбеддингов отвечает за качество, а не за количество.

Вы можете объединить все свои данные в один файл; мы разобьём его на части в фоновом режиме, извлечём наиболее релевантные фрагменты и добавим их в ваш промпт.

Эксперименты здесь направлены на улучшение результатов: некоторые способы очистки могут работать лучше других, а некоторые модели эмбеддингов будут эффективнее находить более релевантные фрагменты.

Спасибо, Сэм, я очень это ценю :heart:

Если у тебя есть какие-либо дополнительные полезные материалы, не стесняйся поделиться ими здесь. Как только я добьюсь прогресса, я постараюсь опубликовать свой опыт здесь, на Meta. :slight_smile:

@sam, как вы предлагаете добавлять версии или номера моделей к разделителям метаданных?

Ваш первоначальный пример:

[[metadata about cats]]
a long story about cats
[[metadata about dogs]]
a long story about dogs

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

Например:

[[metadata about cats v1.0]]
a long story about cats
[[metadata about dogs]]
a long story about dogs
[[metadata about cats xxl v2.1]]
a long story about cats
[[metadata about dogs v 1.1beta]]
a long story about dogs

Также, если в метаданных отсутствуют номера версий (см. metadata about dogs), будет ли этот фрагмент использоваться в ответе на все запросы, связанные с собаками, независимо от «версии собаки»?

Да, это правильный путь!