赞
踩
提示词(prompt)是一种向模型提供的输入。
提示词模板
一个简单的例子
- from langchain import PromptTemplate
-
- # 设置模板template
- template = """你是一名精通多门语言,专业的翻译家。你的任务是从{src_lang}翻译到{dst_lang}"""
-
- # 实例化对象prompt
- # from_template方法:从模板加载提示词模板(Load a prompt template from a template)
- prompt = PromptTemplate.from_template(template)
-
- # prompt对象调用format方法生成提示词
- # format使用输入设置模板参数,返回格式化字符串
- prompt.format(src_lang = "英语", dst_lang = "中文")
你应该能看到下面的输出
你是一名精通多门语言,专业的翻译家。你的任务是从英语翻译到中文
format函数:使用输入设置提示词(Format the prompt with the inputs),返回格式化的字符串
创建模板
langchian框架中提供基础模板类PromptTemplate,它包含两个参数
1. input_variables ————输入变量
2. template ————模板
使用{}符号将变量替换到模板中,如PromptTemplate( input_variables = ["name"], template = "My name is {name}"。)
模板的实例化通过模板类实例的format实现。
- # 导入PromptTemplate类
- from langchain import PromptTemplate
-
-
- # 实例化对象multiple_input_prompt
- multiple_input_prompt = PromptTemplate(input_variables = ["color", "animal"],
- template = "a {color} {animal}.")
-
- # 调用format函数,生成提示词
- multiple_input_prompt.format(color = "black", animal = "bear")
应该能看到如下输出
a black bear.
聊天提示词模板
聊天模型如GPT,输入一系列消息列表,每条消息都有对应的角色,这个消息列表通常以一定的格式串联,构成模型的输入,也就是提示词。
在OpenAI的Chat Completion API中,聊天消息和assistant,human,system角色关联
langchain提供了一些列模板,更简洁的使用构建和处理提示词。官方文档提醒,在于聊天模型交互时,优先使用这些与聊天相关的模板,有助于提高模型效率。
SystemMessagePromptTemplate,AIMessagePromptTemplate,AssistantMessagePromptTemplate分别构建不同角色的提示词模板。
- from langchain.prompts import (
- ChatPromptTemplate,
- PromptTemplate,
- SystemMessagePromptTemplate,
- AIMessagePromptTemplate,
- HumanMessagePromptTemplate,
- )
-
- from langchain.schema import (
- SystemMessage,
- AIMessage,
- HumanMessage
- )
-
- # system提示词
- system_message = "You are a professional translator that translate {src_lang} to {dst_lang}"
- # 从system_message中加载提示词模板
- system_message_prompt = SystemMessagePromptTemplate.from_template(system_message)
-
- # human提示词是用户输入
- human_message = "{user_input}"
- human_message_prompt = HumanMessagePromptTemplate.from_template(human_message)
-
-
- chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
- chat_prompt.format_prompt(
- src_lang = "English",
- dst_lang = "Chinese",
- user_input = "Did you eat in this morning"
- ).to_messages()
[SystemMessage(content='You are a professional translator that translate English to Chinese', additional_kwargs={}), HumanMessage(content='Did you eat in this morning', additional_kwargs={}, example=False)]
样本选择器
在开发LLM相关应用中,可能需要从大量样本数据中,选择部分数据包含在提示词中。样本选择器(Example Selector)正是应对这种需求,通常与提示词配合使用。langchain框架封装了基础选择器BaseExampleSelector。
本文以基于长度的样本选择器(输入越长,选择样本越少;输入越短,选择样本越多)
LengthBaseExampleSelector为例,进行演示。
- from langchain.prompts import PromptTemplate
- from langchain.prompts import FewShotPromptTemplate
- from langchain.prompts.example_selector import LengthBasedExampleSelector
-
- # 样本
- examples = [
- {"input":"happy", "output":"sad"},
- {"input":"tall", "output":"short"},
- {"input":"energetic", "output":"lethargic"},
- {"input":"sunny", "output":"gloomy"},
- {"input":"windy", "output":"calm"}
- ]
-
- # 实例化提示词模板
- example_prompt = PromptTemplate(
- input_variables = ["input", "output"],
- template = "Input: {input}\nOutput: {output}"
- )
-
- # 实例化样本选择器
- example_selector = LengthBasedExampleSelector(
- # 可选的样本数据
- examples = examples,
- # 提示词模板
- example_prompt = example_prompt,
- # 格式化的样本数据的最大长度,通过get_text_length函数统计
- max_length = 25
- )
-
-
- # 实例化模板
- dynamic_prompt = FewShotPromptTemplate(
- example_prompt = example_prompt,
- example_selector = example_selector,
- prefix = "Give the antonym of every input",
- suffix = "Input:{adjective}\nOutput: ",
- input_variables = ["adjective"]
- )
-
- print(dynamic_prompt.format(adjective = "big"))
你应该能看到如下输出:
Give the antonym of every input
Input: happy
Output: sadInput: tall
Output: shortInput: energetic
Output: lethargicInput: sunny
Output: gloomyInput: windy
Output: calmInput: big
Output:
总结:本节介绍Prompt,langchain中提供PromptTemplate和Example Selector两种Prompt。
学习创建简单的模板,聊天模板以及样本选择器事例。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。