大模型提示工程学习笔记
在LangChain实践课程中学习了大模型提示工程的课程,以下是一些关键点和实际操作的笔记。
提示模板的作用
提示模板通过加入partial_variables,可以让模型生成结构化的输出。这是因为在提示模板中明确指定了输出的格式,模型根据这些指示生成相应格式的数据。
提示原则
吴恩达老师和OpenAI的官方文档都强调了清晰具体的指示和给模型提供思考时间的重要性。以下是他们提出的一些策略:
- 写清晰的指示
- 给模型提供参考(示例)
- 将复杂任务拆分成子任务
- 给GPT时间思考
- 使用外部工具
- 反复迭代问题
这些原则不仅适用于大模型,也适用于我们自己的思维过程。
提示的结构
一个有效的提示应该包含以下部分:
- 指令(Instruction):告诉模型任务的大致内容和执行方式。
- 上下文(Context):提供模型额外的知识来源。
- 提示输入(Prompt Input):具体的问题或需要模型执行的任务。
- 输出指示器(Output Indicator):标记生成文本的开始。
LangChain 提示模板
LangChain提供了多种提示模板,包括StringPromptTemplate和ChatPromptTemplate两种基本类型。以下是一些示例代码:
from langchain import PromptTemplate
template = """\
你是业务咨询顾问。
你给一个销售{product}的电商公司,起一个好的名字?
"""
prompt = PromptTemplate.from_template(template)
print(prompt.format(product="鲜花"))
FewShotPromptTemplate的使用
FewShotPromptTemplate通过提供示例来帮助模型理解任务并生成正确的响应。以下是创建示例样本和使用FewShotPromptTemplate的代码:
from langchain.prompts.prompt import PromptTemplate
from langchain.prompts.few_shot import FewShotPromptTemplate
# 创建示例样本
samples = [
{
"flower_type": "玫瑰",
"occasion": "爱情",
"ad_copy": "玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。"
},
# 其他示例...
]
# 创建一个提示模板
template="鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}"
prompt_sample = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"], template=template)
# 创建FewShotPromptTemplate对象
prompt = FewShotPromptTemplate(
examples=samples,
example_prompt=prompt_sample,
suffix="鲜花类型: {flower_type}\n场合: {occasion}",
input_variables=["flower_type", "occasion"]
)
print(prompt.format(flower_type="野玫瑰", occasion="爱情"))
示例选择器
当示例很多时,可以使用示例选择器来挑选最相关的样本,以节省Token用量并提高效率。以下是使用示例选择器的代码:
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
# 初始化示例选择器
example_selector = SemanticSimilarityExampleSelector.from_examples(
samples,
OpenAIEmbeddings(),
Chroma,
k=1
)
# 创建一个使用示例选择器的FewShotPromptTemplate对象
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=prompt_sample,
suffix="鲜花类型: {flower_type}\n场合: {occasion}",
input_variables=["flower_type", "occasion"]
)
print(prompt.format(flower_type="红玫瑰", occasion="爱情"))