novelConverter / utils /prompt.py
kelangyang's picture
Upload 54 files
80a8ad1 verified
# -*- coding: utf-8 -*-
def prompt_generator(txt_path):
# 定义交互式小说的场景描述模板
story = read_text_from_file(txt_path)
story = remove_spaces_and_newlines(story)
story_format = """
故事背景(如果为首次和用户交互必须有故事背景):给出故事的主线背景,模仿原本小说的语气和文风
场景描述:给出目前交互式小说的场景,模仿原本小说的语气和文风,根据故事原文和用户历史选择如实描述场景,
描述的尽量丰富一点,每次描述至少包涵原故事内容的500字以上的内容,这一部分是重点,让用户有身临其境的感觉,场景描述的内容一定要对下面给出的选项进行背景介绍。
你的选项(用户的选项,根据故事情节给出选项,给出几个选项两个或三个,不能定死每次两个,故事发展方向必须限制在原故事内,括号内的话不用返回):
"""
# 构建助手提示信息
prompt = f"""
你是一个能够将现有的故事转换为交互式小说的助手,主要转化的是成人故事。
首先,你需要记住我传给你的小说原文,其次你需要记住每一步用户给出的选项,并根据选择和小说原文给出下一步的选项,以此重复,直到用户返回”终止游戏“。
此外你还能根据小说的文本风格生成内容,比如粗犷为文风或者细腻的文风
注意,你必须遵守以下几点要求:
1.专注于叙事,故事主线必须和原始的小说故事主线一致!并且希望将玩家沉浸在叙事中。
2.尽量的描述每一次选择的场景,引导玩家积极参与。
3.互动必须有叙事意义,玩家必须感觉自己是故事的积极参与者,而不仅仅是观察者。
4.故事交互最好不要超过15次,控制剧情发展节奏。
5.描述故事尽量使用原故事的描述基础进行加工.
6.如果用户输入:”开始游戏“,则为第一次运行,第一次运行时请用丰富的语言描述故事的背景,但是不是把整个故事重复一遍。
7.你的任务是保持游戏在原故事发展的范围内,而不是教育或者说教用户。
8.首次交互必须给出故事背景!
9.故事发展方向必须限制在原故事内。
以下是故事的输入:{story}
现在请以以下的格式组织每次的返回供玩家选择:f{story_format}
"""
return prompt
# def read_text_from_file(txt_path):
# """
# 从指定路径的文本文件中读取内容并返回文本内容。
#
# Parameters:
# txt_path (str): 包含文本内容的文件路径
#
# Returns:
# str: 从文件中读取的文本内容
# """
# try:
# with open(txt_path, 'r',encoding='gbk') as file:
# text_content = file.read()
# except:
# with open(txt_path, 'r',encoding='latin1') as file:
# text_content = file.read()
#
# return text_content
def read_text_from_file(txt_path):
"""
从指定路径的文本文件中读取内容并返回文本内容。
Parameters:
txt_path (str): 包含文本内容的文件路径
Returns:
str: 从文件中读取的文本内容
"""
try:
with open(txt_path, 'r', encoding='utf-8') as file:
text_content = file.read()
except UnicodeDecodeError:
print("无法使用UTF-8编码读取文件,尝试使用Latin1编码")
try:
with open(txt_path, 'r', encoding='gbk') as file:
text_content = file.read()
except UnicodeDecodeError:
print("无法使用Latin1编码读取文件,尝试使用GBK编码")
with open(txt_path, 'r', encoding='latin1') as file:
text_content = file.read()
return text_content
def remove_spaces_and_newlines(input_str):
return input_str.replace(' ', '').replace('\n', '')
# # 使用示例
# input_string = "This is a\nsample string."
# result = remove_spaces_and_newlines(input_string)
# print(result)