есть три роли: - system - систмные инструкции - user - обычный юзер - assistant - то что бот отвечает юзеру - [x] Reset conversation with the `/reset` command - [x] (NEW!) Get personal token usage statistics and cost per day/month via the `/stats` command - by [@AlexHTW](https://github.com/AlexHTW) #### Budgets | Parameter | Description | Default value | |-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------| | `BUDGET_PERIOD` | Determines the time frame all budgets are applied to. Available periods: `daily` *(resets budget every day)*, `monthly` *(resets budgets on the first of each month)*, `all-time` *(never resets budget)*. See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information | `monthly` | | `USER_BUDGETS` | A comma-separated list of $-amounts per user from list `ALLOWED_TELEGRAM_USER_IDS` to set custom usage limit of OpenAI API costs for each. For `*`- user lists the first `USER_BUDGETS` value is given to every user. **Note**: by default, *no limits* for any user (`*`). See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information | `*` | | `GUEST_BUDGET` | $-amount as usage limit for all guest users. Guest users are users in group chats that are not in the `ALLOWED_TELEGRAM_USER_IDS` list. Value is ignored if no usage limits are set in user budgets (`USER_BUDGETS`=`*`). See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information | `100.0` | Check out the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for possible budget configurations. #### Additional optional configuration options | Parameter | Description | Default value | |------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------| | `PROXY` | Proxy to be used for OpenAI and Telegram bot (e.g. `http://localhost:8080`) | - | | `OPENAI_MODEL` | The OpenAI model to use for generating responses | `gpt-3.5-turbo` | | `ASSISTANT_PROMPT` | A system message that sets the tone and controls the behavior of the assistant | `You are a helpful assistant.` | | `SHOW_USAGE` | Whether to show OpenAI token usage information after each response | `false` | | `MAX_TOKENS` | Upper bound on how many tokens the ChatGPT API will return | `1200` for GPT-3, `2400` for GPT-4 | | `MAX_HISTORY_SIZE` | Max number of messages to keep in memory, after which the conversation will be summarised to avoid excessive token usage | `15` | | `TEMPERATURE` | Number between 0 and 2. Higher values will make the output more random | `1.0` | | `SUMMARY_TEMPERATURE` | SUMMARY_TEMPERATURE | `1.0` | | `PRESENCE_PENALTY` | Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far | `0.0` | | `FREQUENCY_PENALTY` | Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far | `0.0` | | `GROUP_TRIGGER_KEYWORD` | If set, the bot in group chats will only respond to messages that start with this keyword | - | SHOW_USAGE - show usage in every message SUMMARY_TOKENS - сейчас это коряво работает я подставляю это число в SUMMARY_PROMPT и модель сама понимает сколько слов надо юзать по хорошему это надо протестить и указывать в АПИ запросе ОпенИИ PROMPT_TOKEN_PRICE_1K COMPLETION_TOKEN_PRICE_1K цены за 1000 токенов SEMANTIC_DB_TOP_K SEMANTIC_DB_MIN_SCORE это для механизма подсказок сколько их подтягивать из БД и какой минимальный скор должен быть у подсказки чтобы она попала в список ## Алгоритм ответа - Бот получает все update из чаат - если это команда /get итп он отдает ответ по команде - если обычное сообщение то начинает обработку ### Личка - бот подтягивает из БД историю всего диалога (хранится не более MAX_HISTORY_SIZE сообщений) - CONVERSATION - бот подтягивает из векторБД все подсказки для этого диалога - он объединяет ASSISTANCE_PROMPT + CONVERSATION + подсказки + сообщение юзера в одну простыню - если она сильно большая то запускает саммарезирующую модель которая делает из истории summary - после самарезации по хорошему нужно еще проверять что мы по токенам попадаем нужно потестить на больших текстах - отправляет в опенАИ и показывает юзеру ответ ### Группа важно выставить MAX_HISTORY_SIZE = 0 - бот подтягивает из БД историю по цепочки replied_to - CONVERSATION - бот подтягивает из векторБД все подсказки для этого диалога - он объединяет ASSISTANCE_PROMPT + CONVERSATION + подсказки + сообщение юзера в одну простыню - если она сильно большая то запускает саммарезирующую модель которая делает из истории summary - после самарезации по хорошему нужно еще проверять что мы по токенам попадаем нужно потестить на больших текстах - отправляет в опенАИ и показывает юзеру ответ ## Как работает механизм подсказок ### Что я понимаю под подсказкой это более подробная инфа по какому-то вопросу для каждой подсказки мы можем выделить индексируемую часть (назовем это топик) и часть которую будем отдавать боту (пояснение) сейчас у нас топик совпадает с пояснением - это нормально но можно поиграться например если у нас все ВОПРОС-ОТВЕТ то топик можно сделать ВОПРОС а пояснение это ВОПРОС+ОТВЕТ либо мы можем гпт4 попросить под каждый вопрос-ответ написать топик чтобы поиск лучше работал поиск работает так по топику спец модель нам выдает вектор в многомерном пространстве (типа как смыслов) если интересно можешь погуглить про Word2Vec и Senternce2Vec по вектору мы ищем ближайшие вектора в БД и отдаем боту ### Как работает Самери SUMMARY_PROMPT - промпт для суммирования истории разговора, в нем может быть {SUMMARY_TOKENS} которая она будет подставлять LAST_MESSAGES_TO_SUMMARY_N - сколько последних сообщений оставлять as-is после саммери, берутся сообщения от бота и от юзера вообще с этим параметром надо поаккуратнее быть не устанавливать его сильно большим иначе мы упремся в ограничение по токенам от которого не спасет даже самери лучше потратить время на то чтобы задать подбробный SUMMARY_PROMPT чтобы он по умному брал правильный контекст и даже написать ему "дословно включи последние Н сообщений" LAST_MESSAGES_TO_SUMMARY_CUTOFF - сколько от каждого такого сообщения отрезать симоволов с начала вдруг юзер там настрогал простыню, мы просто не можем ее всю включить мы отрежем первые 100 символов - вообще это экстремальный кейс. Вряд ли предполагается что юзеры шлют простыню мы даем боту SUMMARY_PROMPT + историю диалога и просим ужать историю до SUMMARY_TOKENS токенов