当前位置: 首页 > news >正文

提示词模板

文章目录

  • 概要
  • 什么是提示词模板?
  • 提示词模版分类
    • 字符串提示词模板
    • 聊天提示词模板
    • 消息占位符

概要

语言模型以文本作为输入-这个文本通常被称为提示词(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中文文档

相关文章:

  • KNN算法性能优化技巧与实战案例
  • vuex持久化存储,手动保存到localStorage,退出登录时清空vuex及localStorage
  • 【数据库】掌握MySQL事务与锁机制-数据一致性的关键
  • Vue:单文件组件
  • Spring Boot 启动顺序
  • k8s-coredns-CrashLoopBackOff 工作不正常
  • QT多媒体播放器类:QMediaPlayer
  • ollama搭建deepseek调用详细步骤
  • flutter 专题 九十八 Flutter 1.7正式版发布
  • EmbodiedSAM:在线实时3D实例分割,利用视觉基础模型实现高效场景理解
  • I211学习笔记
  • vue3:request.js中请求方法,api封装请求,方法请求
  • 28.Vulmap:Web 漏洞扫描与验证工具
  • Unity | 工具类:单例总结
  • Windows安装MySQL5.7.26教程图解
  • LeetCode 解题思路 20(Hot 100)
  • 再学:合约继承 、抽象合约 solidity接口、库、事件 合约重入攻击
  • C语言论递归函数及其本质
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(6)
  • 中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵
  • 降水较常年同期少五成,安徽四大水利工程调水超11亿方应对旱情
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长
  • 网易一季度净利增长三成,丁磊:高度重视海外游戏市场
  • 国防部:赖清德歪曲二战历史,背叛民族令人不齿
  • 秘鲁总理辞职