AGI大模型(5):提示词工程

发布于:2025-03-14 ⋅ 阅读:(18) ⋅ 点赞:(0)

1 什么是提示词工程(Prompt)

所谓的提示词其实指的就是提供给模型的⼀个⽂本⽚段,⽤于指导模型⽣成特定的输出或回答。提示词的⽬的是为模型提供⼀个任务的上下⽂,以便模型能够更准确地理解⽤户的意图,并⽣成相关的回应。

2 什么是提示⼯程(Prompt Engineering)

所谓的提示⼯程也可以被称为「指令⼯程」,提示⼯程的核⼼思想是,通过精⼼设计的提示,可以显著提⾼模型的性能和输出质量。

貌似简单,但其实意义⾮凡。(提问的智慧)

  • Prompt 是 AGI 时代的「编程语⾔」
  • Prompt 工程是 AGI时代的「软件工程]
  • 提示⼯程师是 AGI 时代的「程序员」

如果要学好提示工程,那么其实就是要知道如何对咱们的Prompt进行调优,与⼤模型进⾏更好的交互。

3 获得更好结果的6中策略(ChatGPT)

  • write clear instructions 编写清晰的说明
  • provide reference text 提供参考⽂本
  • split complex tasks into simpler subtasks 将复杂任务拆分为更简单的⼦任务
  • give the model time to think 给模型时间思考
  • use external tools 使⽤外部⼯具
  • test changes systematically 系统地测试更改

4 提示语策略差异

4.1 推理模型

  • 提示语更简洁,只需明确任务⽬标和 需求(因其已内化推理逻辑)
  • ⽆需逐步指导,模型⾃动⽣成结构化 推理过程(若强⾏拆解步骤,反⽽可能限制其能⼒)

4.2 通用模型

  • 需显式引导推理步骤(如通过CoT提示),否则可能跳过关键逻辑
  • 依赖提示语补偿能⼒短板(如要求分步思考、提供示例)

5 关键原则

5.1 模型选择

  • 优先根据任务类型⽽⾮模型热度选择(如数学任务选推理模型,创意任务选通⽤模型)

5.2 提示语设计

  • 推理模型:简洁指令,聚焦⽬标,信任其内化能⼒。(“要什么直接说”)
  • 通⽤模型:结构化、补偿性引导(“缺什么补什么”)

5.3 避免误区

  • 不要对推理模型使⽤“启发式”提示(如⻆⾊扮演),可能⼲扰其逻辑主线
  • 不要对通⽤模型“过度信任”(如直接询问复杂推理问题,需分步验证结果)

6 任务需求与提示语策略

7 常用技巧

7.1 使⽤ 清晰,明确,避免模糊的词语

在对话中包含详细信息以获得更好的答案

  • 给openai写⾸诗,⽤中⽂
  • 给openai写⼀⾸四句的中⽂诗,模仿李⽩的《望庐⼭瀑布》

7.2 ⻆⾊扮演

给我⼀个减肥的计划 VS 我想让你扮演⼀个专业的健身私⼈教练。 你应该利⽤你的运动科学知识、营养建议和其他相关因素为你的客户定制专业的计划。给我⼀个减肥的计划。

7.3 告诉⽤户的⻆⾊

怎么提⾼英语成绩? VS 我是⼀名幼⼉园的5岁⼩朋友,还不会写字。怎么提⾼英语成绩?

7.4 指定输出的格式

给openai写⼀⾸四句的中⽂诗,模仿李⽩的《望庐⼭瀑布》,输出格式为json

7.5 少样本提示

内容如下:

1. ⽣成⽂本:ChatGPT可以⽣成与给定主题相关的⽂章、新闻、博客、推⽂等等。您可以提供⼀些关键词或主题,然后ChatGPT将为您⽣成相关的⽂本。
2. 语⾔翻译:ChatGPT可以将⼀种语⾔的⽂本翻译成另⼀种语⾔。
3. 问答系统:ChatGPT可以回答您提出的问题,⽆论是事实性的问题、主观性的问题还是开放性的问题。
4. 对话系统:ChatGPT可以进⾏对话,您可以与ChatGPT聊天,让它回答您的问题或就某个话题进⾏讨论。
5. 摘要⽣成:ChatGPT可以从较⻓的⽂本中⽣成摘要,帮助您快速了解⽂章的主要内容。
6. ⽂本分类:ChatGPT可以将⼀些给定的⽂本分类到不同的类别中,例如新闻、体育、科技等等。
7. ⽂本纠错:ChatGPT可以⾃动纠正⽂本中的拼写错误和语法错误,提⾼⽂本的准确性。
请把上⾯7段话各⾃的开头⼏个词,翻译成英⽂,并按序号输出

7.6 给一个样本提示

内容如下:

1. ⽣成⽂本:ChatGPT可以⽣成与给定主题相关的⽂章、新闻、博客、推⽂等等。您可以提供⼀些关键词或主题,然后ChatGPT将为您⽣成相关的⽂本。
2. 语⾔翻译:ChatGPT可以将⼀种语⾔的⽂本翻译成另⼀种语⾔。
3. 问答系统:ChatGPT可以回答您提出的问题,⽆论是事实性的问题、主观性的问题还是开放性的问题。
4. 对话系统:ChatGPT可以进⾏对话,您可以与ChatGPT聊天,让它回答您的问题或就某个话题进⾏讨论。
5. 摘要⽣成:ChatGPT可以从较⻓的⽂本中⽣成摘要,帮助您快速了解⽂章的主要内容。
6. ⽂本分类:ChatGPT可以将⼀些给定的⽂本分类到不同的类别中,例如新闻、体育、科技等等。
7. ⽂本纠错:ChatGPT可以⾃动纠正⽂本中的拼写错误和语法错误,提⾼⽂本的准确性。
请把上⾯7段话各⾃的开头⼏个词,翻译成英⽂,并按序号输出。例如,第1段话的开头是"⽣成⽂本",那么就输出"generate text".

8 Prompt调优

找到好的 prompt 是个持续迭代的过程,需要不断调优。

⾼质量 prompt 核⼼要点:具体、丰富、少歧义

  • 简洁:尽量⽤最简短的⽅式表达问题。过于冗⻓的问题可能包含多余的信息,导致模型理解错误或答⾮所问。
  • 具体:避免抽象的问题,确保问题是具体的,不含糊。详细上下⽂:如果问题涉及特定上下⽂或背景信息,要提供⾜够的详情以帮助
  • 模型理解,即使是直接提问也不例外。
  • 避免歧义:如果⼀个词或短语可能有多重含义,要么明确其含义,要么重新表述以消除歧义。
  • 逻辑清晰:问题应逻辑连贯,避免出现逻辑上的混淆或⽭盾,这样才能促使模型提供有意义的回答。

希望你扮演⼀个写作助⼿,以“xxxxx”为主题,其中需包含以下⼏个要素:
1. 引⼈⼊胜的开头:开头是吸引读者的第⼀步,⼀段好的开头能引发读者的好奇⼼并促使他们继续阅读。
2. 提问引出主题:明确且有深度的问题能够有效地导向主题,引导读者思考。
3. 观点与案例结合:多个实际的案例与相关的数据能够为抽象观点提供直观的证据,使读者更易理解和接受。
4. 社会现象分析:关联到实际社会现象,可以提⾼⽂案的实际意义,使其更具吸引⼒。
5. 总结与升华:对全⽂的总结和升华可以强化主题,帮助读者理解和记住主要内容。
6. ⾦句收尾:有⼒的结束可以留给读者深刻的印象,提⾼⽂案的影响⼒。
7. 带有脱⼝秀趣味的开放问题:留下⼀个开放性问题,可以让读者后续继续思考。

9 Prompt 的典型构成

  • ⻆⾊:给 AI 定义⼀个最匹配任务的⻆⾊,⽐如:「你是⼀位软件⼯程师」「你是⼀位⼩学⽼师」
  • 指示:对任务进⾏描述
  • 上下⽂:给出与任务相关的其它背景信息(尤其在多轮交互中)
  • 例⼦:必要时给出举例,学术中称为 one-shot learning, few-shot learning或 in-context learning;实践证明其对输出正确性有帮助
  • 输⼊:任务的输⼊信息;在提示词中明确的标识出输⼊
  • 输出:输出的格式描述,以便后继模块⾃动解析模型的输出结果,⽐如(JSON、XML)

# ⻆⾊:你是⼀位精通简体中⽂的专业翻译
曾参与《纽约时报》和《经济学⼈》中⽂版的翻译⼯作,因此对于新闻和时事⽂章的翻译有深⼊的理解。我希望你能帮我将以下英⽂新闻段落翻译成中⽂,⻛格与上述杂志的中⽂版相似。
# 规则:
- 翻译时要准确传达新闻事实和背景。
- 保留特定的英⽂术语或名字,并在其前后加上空格,例如:"中 UN ⽂"。
- 分成两次翻译,并且打印每⼀次结果:
1. 根据新闻内容直译,不要遗漏任何信息
2. 根据第⼀次直译的结果重新意译,遵守原意的前提下让内容更通俗易懂,符合中⽂表达习惯
# 初始化
本条消息只需要回复OK,接下来的消息我将会给你发送完整内容,收到后请按照上⾯的规则打印两次翻译结果。

10 用代码完成提示工程

代码如下:

from openai import OpenAI
import os
from dotenv import load_dotenv # pip install python-dotenv
load_dotenv()
# 代理 你们不需要 直接去掉
# os.environ["http_proxy"] = "http://127.0.0.1:7897"
# os.environ["https_proxy"] = "http://127.0.0.1:7897"
client = OpenAI()
"""直接写提示词"""
# prompt = '输出⼀个九九乘法⼝诀表'
prompt = '请使⽤python语⾔ 只能利⽤for循环不能使⽤其他的语法 输出⼀个九九乘法⼝诀表并写好相应的注释'
"""对任务进⾏描述"""
instruction = """
你的任务是识别⽤户输⼊的的信息
提取出对应的时间(time),地点(Locations)、⼈物(character)
"""
"""输出"""
output = """
并以JSON格式输出
"""
# input_text = """在北京,⼩明和⼩红在下午两点钟相约去公园散步。"""
# input_text = """在本周末,我将和我的同事王五⼀起去海洋公园玩耍。"""
input_text = """今天晚上 我会和我的闺蜜⼩美⼀起去酒馆喝酒"""
"""例⼦"""
# examples = """
# 在北京,⼩明和⼩红在下午两点钟相约去公园散步。:{"Locations": "北京","character": ["⼩明", "⼩红"],"time": "下午两点钟"}
# """
examples = """
在本周末,我将和我的同事王五⼀起去海洋公园玩耍。:{"时间": "本周末","地点": "海洋公园","⼈物": ["我", "我的同事王五"]}
"""
prompt = f"""{instruction}

{output}
{examples}
⽤户输⼊:
{input_text}
"""
print(prompt)
def get_completion(prompt, model="gpt-3.5-turbo"):
 messages = [{"role": "user", "content": prompt}]
 response = client.chat.completions.create(
 model=model,
 messages=messages,
 temperature=0, # 模型输出的随机性,0 表示随机性最⼩
 )
 return response.choices[0].message.content
print(get_completion(prompt))

新建.env文件

OPENAI_API_KEY="你的key"
OPENAI_BASE_URL="你的openaiUrl"

结果如下:


网站公告

今日签到

点亮在社区的每一天
去签到