提示词模板
文章目录
- 概要
- 什么是提示词模板?
- 提示词模版分类
- 字符串提示词模板
- 聊天提示词模板
- 消息占位符
概要
语言模型以文本作为输入-这个文本通常被称为提示词(prompt)。在开发过程中,对于提示词通常不能直接硬编码,不利于提示词管理,,而是通过提示词模板进行维护,类似开发过程中遇到的短信模板邮件模板等等。
提示词模板有助于将用户输入和参数转换为语言模型的指令。 这可以用于指导模型的响应,帮助其理解上下文并生成相关且连贯的基于语言的输出。
提示词模板的输入是一个字典,其中每个键表示要填充的提示词模板中的变量。
提示词模板输出一个 PromptValue。此 PromptValue 可以传递给 LLM 或 ChatModel,也可以转换为字符串或消息列表。 这个 PromptValue 的存在是为了方便在字符串和消息之间切换。
什么是提示词模板?
提示词模板本质上跟平时大家使用的邮件模板、短信模板没什么区别,就是一个字符串模板,模板可以包含一组模板参数,,通过模板参数值可以替换模板对应的参数。一个提示词模板可以包含下面内容:
- 发给大语言模型(LLM)的指令。
- 一组问答示例,以提醒AI以什么格式返回请求
- 发给语言模型的问题
提示词模版分类
有几种不同类型的提示词模板:
字符串提示词模板
这些提示词模板用于格式化单个字符串,通常用于更简单的输入。 例如,构造和使用 PromptTemplate 的一种常见方式如下:
import os
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
"""
PromptTemplate 案例
"""
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5---------NRdKxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
prompt=PromptTemplate.from_template("帮我写一篇关于{key_word}的{type},数字不超过{count}")
chain = prompt | llm | StrOutputParser()
rest = chain.invoke({"key_word":"青春","type": "散文", "count":200})
print(rest)
输出结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\LCEL案例0.py
青春,是一曲短暂而美好的乐章,充满梦想与激情。那时的我们,拥有无限的可能,怀抱憧憬,勇往直前。
阳光洒在校园的林荫道上,留下斑驳的光影。操场上,我们奔跑、嬉戏,笑声洒满每个角落。青春的脸上,洋溢着无忧无虑的笑容,如同春天的花朵,绚烂多姿。
青春,是一场奋斗与拼搏的较量。我们为了梦想,砥砺前行,不畏艰难。每一个深夜,都有我们埋头苦读的身影。每一次考试,都是我们为实现梦想而努力的过程。
青春,是一段友谊与爱情的交织。我们携手同行,共度欢乐与泪水。那些陪伴我们走过青春岁月的人,成为我们一生最珍贵的回忆。
然而,青春终究会离去。当我们回首往昔,不禁感慨时光荏苒。那些曾经的激情与梦想,仿佛还在昨天。而我们,已悄然长大。
珍惜青春,拥抱梦想。让这段短暂的光阴,成为我们人生中最美的风景。即使岁月流逝,青春不再,我们依然可以自豪地说:“那段青春岁月,我曾全力以赴。”
进程已结束,退出代码为 0
聊天提示词模板
这些提示词模板用于格式化消息列表。这些“模板”本身由一系列模板组成。 例如,构建和使用 ChatPromptTemplate 的一种常见方式如下:
import os
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
"""
构建一个聊天机器人,并且保存聊天记录,根据聊天记录回复问题
"""
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5e-------------LNRdKxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。用{language}尽你所能回答所有问题"),
("user", "你好,我的名字是{name}")
])
chain = prompt | llm
rest = chain.invoke({
"name": "张三",
"language": "汉语"
})
print(rest)
输出结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\chatPromptTemplate_demo1.py
content='很高兴认识你,张三。如果你有任何问题或需要帮助,请随时告诉我。现在,有什么我可以帮你的吗?' additional_kwargs={} response_metadata={'token_usage': {'completion_tokens': 28, 'prompt_tokens': 29, 'total_tokens': 57}, 'model_name': 'glm-4', 'finish_reason': 'stop'} id='run-bf28a0ec-d850-4468-90bf-007472b6c183-0'
进程已结束,退出代码为 0
在上述示例中,当调用此 ChatPromptTemplate 时,将构造两个消息。 第一个是系统消息,有变量需要格式化。 第二个是 HumanMessage,将由用户传入的 name 变量进行格式化。
消息占位符
此提示词模板负责在特定位置添加消息列表。 在上面的 ChatPromptTemplate 中,我们看到如何格式化两个消息,每个消息都是一个字符串。 但是如果我们希望用户传入一个消息列表,并将其插入到特定位置呢? 这就是如何使用 MessagesPlaceholder。
import os
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
"""
构建一个聊天机器人,并且保存聊天记录,根据聊天记录回复问题
"""
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb20f----mXhLNRdKxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。"),
MessagesPlaceholder("msgs") # 或者这样 ("placeholder", "{msgs}")
])
chain = prompt | llm
rest = chain.invoke({"msgs": [HumanMessage(content="你好,我是张三!"), HumanMessage(content="我是个高中生!")]})
print(rest)
输出结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\占位符模版案例1.py
content='嗨!作为一个乐于助人的助手,我在这里可以帮助你解决高中学习生活中遇到的问题。如果你有任何疑问,无论是关于学业、考试准备、学习方法、时间管理,还是其他任何事项,都可以随时向我咨询。我会尽力为你提供帮助和指导。有什么可以帮到你的吗?' additional_kwargs={} response_metadata={'token_usage': {'completion_tokens': 62, 'prompt_tokens': 26, 'total_tokens': 88}, 'model_name': 'glm-4', 'finish_reason': 'stop'} id='run-1833c900-d73d-4fff-ac01-3b20037dc2a2-0'
进程已结束,退出代码为 0
参考资料:
langchain中文文档