大模型提示词初探
在与大模型交互的过程中,提示词起着至关重要的作用,它犹如给模型下达的精准任务指令,直接影响着模型生成内容的准确性、高效性与合理性。合理运用提示词,能够有效减少模型出现错误和幻觉的情况,从而获取更符合期望的结果。
https://www.bilibili.com/video/BV1s24y1F7eq?vd_source=d4713a9f919d1c45d1bd18250fbe957c&spm_id_from=333.788.videopod.sections 视频教程(建议观看)
https://api-docs.deepseek.com/zh-cn/prompt-library/ deepseek 的一些例子
一、提示词的迭代优化
可能并不存在一个通用的完美提示词,能适用于所有应用场景。针对特定的应用,我们需要不断迭代提示词,以达到最佳效果。
二、编写清晰而具体的指示
- 策略 1:使用定界符
- 定界符能够帮助大模型清晰地区分文本段信息和提示词内容。常见的定界符包括三重引号 (“”")、三重反引号 (
)、三重破折号(---)、尖括号(<> )以及XML标签( <tag> </tag>)等。例如,在提供一段文本让模型进行处理时,使用定界符将文本包裹起来,如
f"你好,请总结下这个句话{text}```"
,这样模型就能明确知道需要对定界符内的文本进行总结操作。
- 定界符能够帮助大模型清晰地区分文本段信息和提示词内容。常见的定界符包括三重引号 (“”")、三重反引号 (
- 策略 2:要求结构化输出
- 当我们期望模型的输出具有特定结构时,可以明确要求其以某种格式输出,例如 HTML、JSON 格式等。这有助于后续对输出结果的进一步处理和分析。比如,我们可以给出提示
f"你好,请总结下这个句话```{text}```,并且使用json格式输出,包含原文和总结 "
,这样模型就会按照 JSON 格式返回包含原文和总结内容的结果,方便我们进行数据提取和处理。
- 当我们期望模型的输出具有特定结构时,可以明确要求其以某种格式输出,例如 HTML、JSON 格式等。这有助于后续对输出结果的进一步处理和分析。比如,我们可以给出提示
- 策略 3:检查条件是否满足
- 在某些情况下,需要模型先检查完成任务所需的假设条件是否满足。例如,对于一段关于茶叶制作知识的文本,我们可以要求模型先判断是否为绿茶制作知识,如果是再进行总结。如
prompt = (f"你好,请总结下面这段绿茶知识的制作步骤,首先要先检查这段内容包含绿茶制作的知识,不包含就不总结" f"1,第一步" f"2,第二步" f"n,弟n歩" f"```{text2}```)
,这里的text2
是需要检查和总结的茶叶制作相关文本。
- 在某些情况下,需要模型先检查完成任务所需的假设条件是否满足。例如,对于一段关于茶叶制作知识的文本,我们可以要求模型先判断是否为绿茶制作知识,如果是再进行总结。如
- 策略 4:少样本提示
- 通过给出成功完成任务的示例,能引导模型更好地理解任务要求并执行任务。例如,对于总结绿茶制作步骤的任务,我们可以先提供一个成功的示例,如
prompt = (f"你好,请总结下面这段绿茶知识的制作步骤,按照成功的示例总结" f"```{text}```" f"成功的示例:" f"第一步:购买原料" f"第二步:化工加工 ")
,其中text
是绿茶制作步骤的文本,模型会参考示例的格式和思路来总结给定文本中的绿茶制作步骤。
- 通过给出成功完成任务的示例,能引导模型更好地理解任务要求并执行任务。例如,对于总结绿茶制作步骤的任务,我们可以先提供一个成功的示例,如
三、给模型思考的时间
- 策略 1:指定完成任务的步骤
- 明确列出完成任务的具体步骤,有助于模型按部就班地进行思考和处理。例如,对于判断一个公式是否正确的任务,我们可以指定步骤:
prompt = (f"你好,请计算如下的公式是否正确" f"第一步:你需要确认这是一个加法运算,如果是输出:yes" f"第二步:输出加法左边的值和右边的值" f"第三步:计算加法是否正确" f"再你确认这个公式是否正确前,你需要自己先计算下" f"```{text}```)
,这里text
为公式1 + 256 = 258
,模型会按照这些步骤进行计算和判断。
- 明确列出完成任务的具体步骤,有助于模型按部就班地进行思考和处理。例如,对于判断一个公式是否正确的任务,我们可以指定步骤:
- 策略 2:指示模型在得出结论前自行想出解决方案
- 让模型在给出最终结论之前,先自行思考并尝试找出解决方案,有助于提高模型处理问题的准确性和可靠性。例如在上述判断公式是否正确的例子中,我们要求模型在确认公式是否正确之前先自行计算,这就是给模型留出思考空间,让其基于自身的计算和分析来给出最终结论。
四、代码示例及测试
以下是使用openai
库(这里假设与deepseek - chat
模型交互)来测试不同提示词策略的代码示例:
from openai import OpenAI
# for backward compatibility, you can still use `https://api.deepseek.com/v1` as `base_url`.
client = OpenAI(api_key="<your api key>", base_url="https://api.deepseek.com")
# 分割提示词和实际的文本内容
text = f"""
你好,加油\
时间机器
"""
prompt = f"你好,请总结下这个句话```{text}```"
# 结构化输出
prompt = f"你好,请总结下这个句话```{text}```,并且使用json格式输出 ,原文和总结 "
# 检查条件是否满足
text = f"""
这个是一份绿茶,需要先采摘,再人工烘焙,包装才能售卖
"""
# 验证
text2 = f"""
这个是一份红茶,需要先采摘,再人工烘焙,包装才能售卖
"""
prompt = (f"你好,请总结下面这段绿茶知识的制作步骤,首先要先检查这段内容包含绿茶制作的知识,不包含就不总结"
f"1,第一步"
f"2,第二步"
f"n,弟n歩"
f"```{text2}```")
# 少样本提示
text = f"""
这个是一份绿茶,需要先采摘,再人工烘焙,包装才能售卖
"""
prompt = (f"你好,请总结下面这段绿茶知识的制作步骤,按照成功的示例总结"
f"```{text}```"
f"成功的示例:"
f"第一步:购买原料"
f"第二步:化工加工 ")
# 指定完成任务的步骤
# 指示模型在得出结论前先让模型自行想出解决方案
text = "1 + 256 = 258"
prompt = (f"你好,请计算如下的公式是否正确"
f"第一步:你需要确认这是一个加法运算,如果是输出:yes"
f"第二步:输出加法左边的值和右边的值"
f"第三步:计算加法是否正确"
f"再你确认这个公式是否正确前,你需要自己先计算下"
f"```{text}```")
response = client.chat.completions.create(
model="deepseek - chat",
messages=[
{"role": "system", "content": "你是一名资深的编辑作者"},
{"role": "user", "content": prompt},
],
max_tokens=1024,
temperature=0.7,
stream=False
)
print(response)
print(response.choices[0].message.content)
通过运行上述代码,我们可以针对不同的提示词策略进行测试,观察模型在不同指令下的输出效果,从而不断优化提示词,使其更好地满足我们的需求。需要注意的是,在实际应用中,我们需要根据具体任务和模型的表现,灵活调整和完善提示词,以实现最佳的交互效果。