复杂提示词配置文件
当对简单提示词模板进行管理时,只需要使用上python的"""
特性即可:
maohao_prompt = """写一个关于一位{type}的故事{other_description}。故事背景:{story_setting}。要求:- 故事中至少包含一个非人类角色。- 故事的结局要有出人意料的反转。- 角色对话要使用俚语。"""
之后进行填充:
print(maohao_prompt.format(type="侦探", other_description=",他失忆了,并且必须解决自己的案件", story_setting="在一个反乌托邦的赛博朋克城市"))
但是当我们的提示词需要不断地更改时,这种形式就不方便修改后即使查看。这个时候可以使用yaml
文件进行存储,yaml
库是第三方库需要先安装:
pip install pyyaml
在prompts.yaml
文件内写入:
prompt_name: advanced_story_generation
version: 1.1
author: AI_Assistant# 核心提示词内容
storyPrompt: |-写一个关于一位{type}的故事{other_description}。故事背景:{story_setting}。要求:- 故事中至少包含一个非人类角色。- 故事的结局要有出人意料的反转。- 角色对话要使用俚语。elainaPrompt: |-伊蕾娜的风格通常是:第一人称叙事:她以自己的视角讲述故事。观察者角色:她通常不会过多干预,而是记录和旁观她所遇到的各种人和事。带着一些傲慢和自恋:她经常会夸赞自己的美貌和魔法才能。简洁而富含哲理:她的故事往往短小精悍,结尾常常伴随着一句富有深意的话。轻松的、旅行者的口吻:就像在写日记或游记。伊蕾娜风格的提示词模板“你好。没错,我就是你眼前的这位旅人,人称‘灰之魔女’的伊蕾娜。我在旅途中见证了各种各样的事情,美好的、残酷的、平淡的。现在,请你为我讲述一段新的旅程。[故事背景]请描述我来到一个名为 {location} 的地方。这个地方有何独特之处?这里的人们有什么特别的风俗习惯?[核心事件]在这个地方,我偶然遇到了一件 {event}。请描述这个事件的起因和经过。我作为一名旅人,是如何观察到这一切的?我可能与事件中的某个角色进行了简短的交谈,但请记住,我通常只是旁观者,不会主动介入。[故事结局]这个事件的结局是 {outcome}。[伊蕾娜的结语]最后,请用我的风格,以一句话总结这段旅程。这句话应该简洁、略带自恋,并包含一些对人性和世事的思考。例如:“好了,下一站去哪儿呢?旅途还很漫长,我的故事也才刚刚开始。”“真是个有趣的地方。不过,我可没时间一直留在这里。”“世间万物,总有其美妙之处,但有些事,还是不要深究为好。”
在yaml
文件中:
|
:保留换行符。会把多行文本原封不动地存储为字符串,包括输入的每一个换行。默认文本末尾保留一个换行符。|-
:保留换行符,同|
,但是默认文本末尾无多余换行符。>
:折叠换行符。会将连续的换行符替换为一个空格,而将空行(两个连续的换行符)替换为单个换行。
导入文件:
import yamlwith open('prompts.yaml', 'r', encoding='utf-8') as file:prompts = yaml.safe_load(file)
结合python的format方法动态填充模板:
storyPrompt = prompts['storyPrompt']
type = "侦探"
other_description = ",他失忆了,并且必须解决自己的案件"
story_setting = "在一个反乌托邦的赛博朋克城市"
print(storyPrompt.format(type=type, other_description=other_description, story_setting=story_setting))elainaPrompt = prompts['elainaPrompt']print(elainaPrompt.format(location="全是魔法植物的城镇", event="一个被施了恶咒的古老雕像", outcome="雕像的诅咒被打破了"))
如果更加复杂,仅仅动态填充难以实现,那么可能需要结合上函数或者Jinja2
来进行实现。
Jinia2
是用{{}}
进行占位,有比python的format更加丰富的功能。