/
github_better
/
GenAI
Обзор
Документация
Войти
/
github_better
/
GenAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Prompt_editor.py
97 строк
4 KB
github_better
New
22 дек 2025, 08:52
22 дек 2025, 08:52
b68d8c4
Код
Авторство
О чём код?
import re import ast import logging from Lib.Debugger import debug_print logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def get_prompt(filename)->str: debug_print(logger) """ Считывает промпт из файла :param filename: путь до файла :return: содержимое файла """ try: with open(filename, "r", encoding='utf-8') as f: return f.read() except FileNotFoundError: debug_print(logger, "error") return None except IOError as e: debug_print(logger, "error") return None def get_parameters(world_context: str, parametrs_of_character: str, censorship_restriction: str, lang: str) -> str: debug_print(logger) """ формирует параметры мира для системника :param world_context: контекст мира :param parametrs_of_character: параметры персонажа (не цифры) :param censorship_restriction: Тег цензуры :param lang: язык :return: """ # Контекст мира world_context_str = f"The context of the world: {world_context.strip()}\n" # Параметры персонажа parametrs_of_character_str = f"Parameters of character: {parametrs_of_character}\n" # Цензура censorship_restriction_str = f'Censorship restriction: "{censorship_restriction.strip()}"\n' # Язык ответов lang_str = f"Messages must be displayed in the language: {lang.strip()}\n" # Объединение всех строк full_prompt = ("\n\n" + "Parameters:\n" + world_context_str + parametrs_of_character_str + censorship_restriction_str + lang_str) return full_prompt def edit_story_prompt(parameter_block: str, base_prompt: str) -> str: debug_print(logger) """ Добавляет готовый блок параметров к базовому промпту. :param parameter_block: Строка, сгенерированная функцией get_parameters(...) :param base_prompt: Исходный системный промпт :return: Объединённый промпт """ base_prompt = get_prompt(base_prompt) # очищает/обрабатывает базовый промпт, если нужно return base_prompt + parameter_block def delete_fact_from_prompt(name_of_fact: str, prompt: str) -> str: debug_print(logger) """ :param name_of_fact: Заголовок файла для удаления. :param prompt: промпт из которого будет удаление. :return: промпт без данного факта. """ match = re.search(r"\[FACTS\]:\s*(\[[^\]]*\])", prompt, re.DOTALL) if not match: return prompt # Если факты не найдены, возвращаем оригинал facts_str = match.group(1) try: # Преобразуем строку в список фактов (безопасно через ast) facts_list = ast.literal_eval(facts_str) except (SyntaxError, ValueError): return prompt # Если парсинг не удался, возвращаем оригинал # Фильтруем факты, исключая тот, у которого title == name_of_fact filtered_facts = [fact for fact in facts_list if fact.get("title") != name_of_fact] # Формируем новый блок фактов new_facts_str = str(filtered_facts) # Заменяем в промпте new_prompt = prompt[:match.start(1)] + new_facts_str + prompt[match.end(1):] return new_prompt