提示词工程:
是一项通过优化提示词(prompt)和生成策略,从而获得更好的模型返回结果的工程技术。
使用Prompt的两种目的:
- 获得具体问题的具体结果
- 固化一套prompt到程序中,成为系统功能的一部分。
提示词工程的构成:
- 提示(instruction):描述要让它做什么?
- 上下文(context):给出与任务相关的背景信息。
- 例子(example):给出一些例子,让模型知道怎么恢复。
- 输入(input):任务的输入信息。
- 输出(output format):输出的格式,想要什么形式的输出。
- 角色:给AI一个最匹配任务的角色。
定义提示词:
instruction="""描述让它做什么?"""
context="""内容背景"""
query=""""问题"""
prompt=f"""
{instruction}
###上下文
{context}
###问题
{query}
"""
response=generate_responses(prompt)
print(response)
或:
#不是从给出的内容回答问题,而是从它的知识库去回答问题
prompt=f"""问题"""
response=generate_response(prompt)
print(response)
Json格式: {"[具体问题]":"[答案]"
高质量prompt核心要素: 具体,丰富,少歧义。
shot learning样本学习:
- one-shot learning:只有一个example
- few-shot learning:多个example
- zero-shot learning:不给任何的example
让提示词更加稳定的输出:
- 好的提示词需要不断地优化
- 说清楚自己到底想要什么,要具体
- 不要让机器人去猜测太多,为了不让机器人去猜测,我们就需要告诉细节。
- 提示词工程有一些技巧,灵活掌握,事半功倍。
提示词帮助用户控制语言模型输出,生成适合的特定需求,4个关键要素:
- 角色定位:明确Bot的身份,建立专业形象。
- 技能描述:清晰的目标,让Bot知道做什么。
- 输出格式:结构化回复要求,确保输出规范。
- 约束条件:限制不当行为,保证安全合规。
| 规范的Prompt | 不规范的Prompt |
|---|---|
| 角色设定,格式强约束,目标具体化,Few-shot示例 | 指令模糊,无格式约束,零示例示范,依赖模型自身发挥 |
- 我们发给大模型的Prompt,不会改变大模型的参数
- 多轮对话,需要每次都把对话历史带上
- 和大模型对话,不会让他变聪明或变笨。
- 但对话历史数据,可能会被用去训练大模型
思维链:
把一个复杂的任务,拆解成多个稍微简单的任务,让大语言模型分布来思考问题。
原理: 让AI生成更多相关的内容,构成丰富的上下文,从而提升下文正确的概率,对涉及计算和逻辑推理等复杂问题,尤为有效。
思维树:
- 在思维链的每一步,采样多个分支
- 拓扑展开式一棵思维树
- 判断每个分支的任务完成度,以便进行启发式搜索
- 设计搜索算法
- 判断叶子节点的任务完成的正确性