ИП Горелов Максим Николаевич 8 (915) 093-74-75
Автор:
Андрей Тиунов
Любой GPT-бот на базе любой LLM (например на ChatGPT) должен сам и незаметно для пользователя запоминать в постоянную память нужные нам сведения из диалога.
{ "name": "ai_memory_v3", "description": "Call this function when you need to make adjustments to JSON memory.", "parameters": { "type": "object", "properties": { "key": { "type": "string", "description": "New or existing key from JSON memory", }, "value": { "type": "string", "description": "Text to be written by the specified key", }, "action": { "type": "string", "enum": ["+", '-', '.', '_'], "description": "Action type. `+` - means adding information to memory. `-` - means deleting information from memory. `.` - means changing information in memory. `_` - means clear all memory", }, }, "required": ["key", "value", "action"], }, },
Параметры нашей функции:
+
- добавление информации в память.-
- удаление информации из памяти..
- изменение информации в памяти._
- очистка всей памяти.from flask import Flask, request, jsonimport osimport logging# Инициализация логгераlogger = logging.getLogger(__name__)config.ROOT_PATH = '/path/to/your/application/' # Установите корректный путь к приложению# Создаем экземпляр приложения Flaskapp = Flask(__name__)# Определение маршрута и функции для записи в постоянную память@app.route('/write_memory_dict', methods=['POST'])def write_memory_dict(): # Получение данных из запроса в формате JSON data = GetJsonFromRequest(request) # Логирование данных запроса logger.debug(f"[/write_memory_dict] {data}") # Инициализация сообщения для пользователя Res = 'Покажи новое состояние памяти и получи подтверждение на внесение изменений пользователю.n' # Основная логика для обработки различных действий if data['action'] == '_': try: # Попытка удалить файл памяти os.remove(config.ROOT_PATH + 'json_memory/' + data['chat_id']) except Exception as e: # Если файл не найден, логируем предупреждение logger.warning(f"File not found {data['chat_id']}") # Ответ о том, что память очищена Res = 'Память очищена.n' else: # Имя файла соответствует chat_id filename = data['chat_id'] memory_json = {} if filename is not None: # Чтение существующего файла памяти memory_json = read_file(config.ROOT_PATH + 'json_memory/' + filename) try: # Попытка преобразовать прочитанные данные из файла в JSON memory_json = json.loads(memory_json) except: # Если преобразование не удалось, считаем что данных нет memory_json = {} # Добавление данных в память if data['action'] == '+' and data['key'] in memory_json: memory_json[data['key']] += ', ' + data['value'] Res = 'Данные добавлены в постоянную память.\n' if data['action'] == '+' and data['key'] not in memory_json: memory_json[data['key']] = data['value'] Res = 'Данные добавлены в постоянную память.n' # Удаление данных из памяти if data['action'] == '-' and data['key'] in memory_json: memory_json.pop(data['key']) Res = 'Данные удалены из постоянной памяти.n' # Обновление данных в памяти if data['action'] == '.' and data['key'] in memory_json: memory_json[data['key']] = data['value'] Res = 'Данные в постоянной памяти изменены.n' # Сохранение изменений в файл if filename is not None and memory_json is not {}: with open(config.ROOT_PATH + 'json_memory/' + filename, 'w', encoding='utf-8') as f: json.dump(memory_json, f, ensure_ascii=False, indent=4) # Логирование успешного сохранения logger.info(f"/write memory_json OK {filename}, {memory_json}") # Возвращение ответа клиенту return json.dumps(Res), 200# Функция для чтения файла, предполагается, что она определена где-то в кодеdef read_file(file_path): # Тут должна быть ваша реализация функции чтения файла pass# Функция для получения JSON из запроса, предполагается, что она определена где-то в кодеdef GetJsonFromRequest(req): # Тут должна быть ваша реализация функции извлечения JSON из запроса pass# Запустить приложение, если файл запущен напрямуюif __name__ == '__main__': app.run()
Бот для теста постоянной памяти на платформе ProTalk
Подключаем нашу функцию к боту
Указываем что именно мы хотим заносить в постоянную память
Поведение:При общении используй данные о пользователе в твоей JSON памяти и меняй свой стиль ответов согласно этим данным.Инструкции по работе с памятью:В память можно сохранять следующие данные о пользователе: имя, пол, возраст, привычки, интересы, увлечения.
Для начала мы просто назовем имя боту:
Начало общения с ботом с постоянной памятью
Видим, что имя попало в постоянную память.
Теперь назовем возраст:
Уже два ключа в нашем JSON словаре для постоянной памяти
Теперь протестируем изменения данных в памяти бота:
Ключ с данными по возрасту пользователя был успешно изменен на новое значение
Теперь проверим как бот общается с такими данными в памяти:
{ "user_name": "Андрей", "user_age": "45", "user_habits": "кофе", "user_interests": "горы, велосипеды, море, пробежки по утрам"}
Бот отвечает с учетом данных о пользователе из постоянной памяти
У вас есть статья о ProTalk? Поделитесь с нами - support@pro-talk.ru мы опубликуем её с вашим контактом!
© ProTalk 2023-2025 ИП Горелов Максим Николаевич ИНН 500104951533 ОГРН 309500106900065
Новая, 8, 9 Реутов, Московская область 143964 Россия