跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

AI 大模型提示工程(Prompt)核心技巧与工具详解

大模型提示工程旨在通过构建合理的 Prompt 引导 LLM 生成高质量输出。核心原则包括编写清晰具体的指令和给予模型充足思考时间。常用技巧涵盖分隔符使用、结构化输出要求、条件检查及少样本提示。进阶概念涉及零样本与少样本对比,以及思维链、自洽性和思维树以提升推理能力。配合 PPT 制作、思维导图等辅助工具,可有效控制模型输出,提升人机交互效率与应用价值。

FlinkHero发布于 2025/2/7更新于 2026/5/2818 浏览
AI 大模型提示工程(Prompt)核心技巧与工具详解

AI 大模型提示工程(Prompt)核心技巧与工具详解

在大模型领域,输入通常被称为'提示词'(prompt),它们是引导 LLM(大语言模型)生成相应输出的关键。对于那些能处理多样化任务的 LLM 来说,一个合理设计的 prompt 会极大地影响模型的表现。

提示工程(prompt engineering)正是关于如何为特定任务构建能够充分发挥大模型能力的 prompt 技巧。本文将深入探讨提示工程,内容涵盖基本原理、一些重要概念以及常用的辅助工具。

1. 基本原理

设计高效的 prompt 有两个关键原则:编写清晰具体的指令和给予模型充足的思考时间。

01 编写清晰具体的指令

模型无法读懂你的想法,因此你需要在 prompt 中清晰明确地表达自己的需求。如果你觉得输出过长,可以在 prompt 中要求简短回复;如果输出太简单,可以要求详细回复。减少模型对你需求的猜测,你就越有可能得到满意的结果。

实现指令清晰具体的 4 个技巧:

- 使用分隔符清楚地表示输入的不同部分

在编写 prompt 时,可以使用各种标点符号(如 """, ``` , < >)将不同的文本部分区分开来。

import openai
import os

openai.api_key = os.environ.get("OPENAI_API_KEY", "your-api-key")

# 定义调用 openai api 函数
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,
    )
    return response.choices[0].message.content

text = f"""
端午节,又称端阳节、龙舟节,是中国传统节日之一,每年农历五月初五举行。端午节源于中国古代,起源于楚国,最初是为了纪念爱国诗人屈原而设立的。端午节有着悠久的历史和丰富的文化内涵,在中国民间流传着许多丰富多彩的习俗和传统活动。
端午节的主要习俗之一是赛龙舟。人们会组织龙舟竞赛,以纪念屈原投江自尽、渔民划船救他的故事。龙舟竞赛是端午节最具特色和魅力的活动之一,吸引着无数人观看和参与。此外,端午节还有吃粽子、挂艾草、饮雄黄酒、穿香囊等传统习俗,每个习俗都有其独特的寓意和象征意义。
粽子是端午节必不可少的传统食品,其形状象征着包裹屈原的荷叶,内含糯米和各种馅料,味道鲜美。挂艾草则是为了驱邪避疫,保佑家人健康平安。饮雄黄酒和穿香囊也都是为了驱邪求吉,祈福平安。
端午节是中华民族传统文化的重要组成部分,也是中华民族的节日之一。随着时代的变迁,端午节的庆祝方式和形式也在不断发展和变化,但人们对于这个节日的热爱和传统习俗的传承始终如一。
"""

# 输入内容
prompt = f"""
把用三个反引号括起来的文本总结成一句话。
```{text}```
"""
# 指令输出
response = get_completion(prompt)
print(response)

输出:

端午节是中国传统节日之一,源于古代楚国,纪念爱国诗人屈原,有赛龙舟、吃粽子、挂艾草等丰富多彩的习俗和传统活动,体现着中华民族的传统文化和节日热爱。
- 要求模型结构化输出

例如 JSON 或 HTML 格式,这不仅能让模型稳定输出你想要的格式,还便于后续处理。

prompt = f"""请生成包括书名、作者和类别的三本虚构的、非真实存在的中文书籍清单。
要求以 JSON 格式输出,其中包含以下键:book_id、title、author、genre。
"""
response = get_completion(prompt)
print(response)

输出:

[
    {
        "book_id": 1,
        "title": "幻境之门",
        "author": "王小明",
        "genre": "奇幻"
    },
    {
        "book_id": 2,
        "title": "星际迷航",
        "author": "张小红",
        "genre": "科幻"
    },
    {
        "book_id": 3,
        "title": "时间漩涡",
        "author": "李大山",
        "genre": "冒险"
    }
]
- 要求模型检查是否满足条件

如果任务包含一些假设或条件,可以在 prompt 中告诉模型先检查这些假设。如果不满足,则直接输出检查结果并停止后续流程。考虑边缘情况及模型的应对,可以避免意外结果或错误。

text = f"""
泡一杯茶很容易。首先,需要把水烧开。在等待期间,拿一个杯子并把茶包放进去。一旦水足够热,就把它倒在茶包上。等待一会儿,让茶叶浸泡。几分钟后,取出茶包。如果您愿意,可以加一些糖或牛奶调味。就这样,您可以享受一杯美味的茶了。
"""
prompt = f"""
您将得到由三个引号括起来的文本。
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:

第一步 - ...
第二步 - ...
...
第 N 步 - ...

如果文本中不包含一系列的指令,则直接写"未提供步骤"
"""{text}"""
"""
response = get_completion(prompt)
print(response)

输出:

第一步 - 把水烧开。
第二步 - 拿一个杯子并把茶包放进去。
第三步 - 把烧开的水倒在茶包上。
第四步 - 等待几分钟,让茶叶浸泡。
第五步 - 取出茶包。
第六步 - 如果愿意,可以加糖或牛奶调味。
第七步 - 尽情享受您的茶。
- 少样本提示 (Few-shot prompting)

在要求模型执行任务前,提供一些成功执行任务的示例,然后再要求模型执行任务。

prompt = f"""
您的任务是以一致的风格回答问题。

<孩子>: 请教我何为耐心。

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

<孩子>: 请教我何为韧性。
"""
response = get_completion(prompt)
print(response)

输出:

<祖父母>: 韧性就像是一棵顽强的树,能够经受风雨的洗礼而不倒;就像是一块坚硬的石头,能够经受岁月的磨砺而不碎;就像是一条强壮的绳索,能够承受重压而不断裂。韧性是一种坚韧不拔的品质,让人在逆境中坚持不懈,永不放弃。

其他策略:

  • 在查询中包含详细信息以获得更相关的答案
  • 要求模型采用某种角色
  • 指定输出的期望长度(用单词数、句子数、段落数、项目符号等指定)
  • 将复杂任务拆分为简单子任务

02 给予模型充足时间思考

当你被问到'17 乘以 28 等于多少'时,你可能不会立刻知道答案,但可以通过时间推算出来。同样,模型如果试图立即回答,会犯更多的推理错误。因此,prompt 应该加入逐步推理的要求,给模型留出充分思考时间,这样生成的结果才更准确可靠。

- 指定任务完成需要的步骤
text = f"""
在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\他们一边唱着欢乐的歌,一边往上爬,\然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\虽然略有些摔伤,但他们还是回到了温馨的家中。\尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""

prompt = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个人名。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

请使用以下格式:
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名字列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>

Text: <{text}>
"""
response = get_completion(prompt)
print(response)

输出:

摘要:在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水,不幸中途发生意外,但他们的冒险精神依然坚定。
翻译:In a charming village, siblings Jack and Jill set out to fetch water from a well on top of a hill, unfortunately encountering an accident along the way, but their adventurous spirit remains strong.
名称:Jack, Jill
输出 JSON:{"English_summary": "In a charming village, siblings Jack and Jill set out to fetch water from a well on top of a hill, unfortunately encountering an accident along the way, but their adventurous spirit remains strong.", "num_names": 2}
- 指示模型在匆忙下结论之前思考解决方案
prompt = f"""
请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:

步骤:

    首先,自己解决问题。
    然后将您的解决方案与学生的解决方案进行比较,对比计算得到的总费用与学生计算的总费用是否一致,并评估学生的解决方案是否正确。
    在自己完成问题之前,请勿决定学生的解决方案是否正确。

使用以下格式:

    问题:问题文本
    学生的解决方案:学生的解决方案文本
    实际解决方案和步骤:实际解决方案和步骤文本
    学生计算的总费用:学生计算得到的总费用
    实际计算的总费用:实际计算出的总费用
    学生计算的费用和实际计算的费用是否相同:是或否
    学生的解决方案和实际解决方案是否相同:是或否
    学生的成绩:正确或不正确

问题:

    我正在建造一个太阳能发电站,需要帮助计算财务。
    - 土地费用为每平方英尺 100 美元
    - 我可以以每平方英尺 250 美元的价格购买太阳能电池板
    - 我已经谈判好了维护合同,每年需要支付固定的 10 万美元,并额外支付每平方英尺 10 美元;

    作为平方英尺数的函数,首年运营的总费用是多少。

学生的解决方案:

    设 x 为发电站的大小,单位为平方英尺。
    费用:
    1. 土地费用:100x 美元
    2. 太阳能电池板费用:250x 美元
    3. 维护费用:100,000+100x=10 万美元 +10x 美元
    总费用:100x 美元 +250x 美元 +10 万美元 +100x 美元=450x+10 万美元

实际解决方案和步骤:
"""
response = get_completion(prompt)
print(response)

输出:

实际解决方案和步骤:

1. 土地费用:100 美元/平方英尺
2. 太阳能电池板费用:250 美元/平方英尺
3. 维护费用:10 万美元固定费用 + 10 美元/平方英尺

总费用 = 土地费用 + 太阳能电池板费用 + 维护费用
总费用 = 100x + 250x + 10 万 + 10x
总费用 = 360x + 10 万

学生计算的总费用:450x + 10 万美元
实际计算的总费用:360x + 10 万美元
学生计算的费用和实际计算的费用是否相同:否
学生的解决方案和实际解决方案是否相同:否
学生的成绩:不正确

需要注意的是,掌握这些技巧可以帮助我们编写好的 prompt,但在实际项目中,一个完美的 prompt 需要根据输出与需求之间的差异不断迭代优化。作为 Prompt 工程师,关键不是一开始就要求完美的 Prompt,而是掌握有效的 Prompt 开发流程。

另外,在使用 LLM 应用时,还需要注意大模型的幻觉问题,即模型偶尔会生成一些看似真实但实则编造的内容。

2. 一些概念

01.零样本提示 (Zero-Shot Prompting) vs. 少样本提示 (Few-Shot Prompting)

在大规模语言模型(LLM)的使用中,零样本提示和少样本提示是两种常见的提示技术,分别在为模型提供背景信息和指令方面有不同的应用和效果。

  • 零样本提示:在没有提供具体示例的情况下,仅通过描述任务或问题本身,让模型进行生成和推理。模型需要根据对问题的理解直接生成答案,适用于任务相对简单或模型已经有较多相关知识的情况。

  • 少样本提示:在提供少量示例的情况下,让模型学习任务的具体模式和要求。这些示例帮助模型更好地理解任务,并提高其生成答案的准确性,适用于任务较为复杂或需要特定格式输出的情况。

02. 思维链 (Chain of Thought, CoT) vs. 自洽性 (Self-Consistency) vs. 思维树 (Tree of Thoughts, ToT)

在大规模语言模型(LLM)的开发和应用中,思维链、自洽性以及思维树等概念被用来提升模型的推理能力和生成内容的质量。

  • 思维链 (CoT):通过分步推理来解决复杂问题的方法。模型不仅生成最终答案,还生成一系列中间推理步骤,使问题的解决过程变得透明和可追溯。通常在 prompt 中增加 Think step-by-step 实现。

  • 自洽性:通过生成多个可能的答案和对应的推理路径,然后选择最一致或最常见的答案,以提高模型的可靠性。例如,请列出所有可能的原因,解释为什么最近几年全球变暖的速度加快了,并选择那些在不同原因解释中保持一致的答案。

  • 思维树 (ToT):扩展思维链的方法,通过探索多条可能的推理路径(树状结构)来找到解决问题的最佳路径,特别适用于复杂的、多步骤的问题。例如,请为每个可能导致最近几年全球变暖速度加快的原因生成一个思维树,包括支持该假设的直接和间接证据,以及可能的反对观点。

3. 辅助工具

以上技巧针对开发者,也可以用于 web 应用中。以下介绍一些辅助工具,帮助 ChatGPT 更高效地完成日常工作。具体操作是先使用 ChatGPT 生成对应网站指定格式(比如 Markdown 等)的内容,然后把内容粘贴到对应网站上一键生成。

  1. PPT 制作:MINDSHOW
  2. 思维导图制作:MARKMAP
  3. 流程图制作:Mermaid
  4. 图片制作:Midjourney
  5. PDF 阅读:ChatPDF

通过掌握提示工程,我们能够更精确地控制和引导大语言模型的输出,使其能够在不同的应用场景中发挥更大的作用和价值。这门技术不仅可以提高模型的准确性和效率,还能够使人机交互更加智能和自然。

目录

  1. AI 大模型提示工程(Prompt)核心技巧与工具详解
  2. 1. 基本原理
  3. 01 编写清晰具体的指令
  4. - 使用分隔符清楚地表示输入的不同部分
  5. 定义调用 openai api 函数
  6. 输入内容
  7. 指令输出
  8. - 要求模型结构化输出
  9. - 要求模型检查是否满足条件
  10. - 少样本提示 (Few-shot prompting)
  11. 02 给予模型充足时间思考
  12. - 指定任务完成需要的步骤
  13. - 指示模型在匆忙下结论之前思考解决方案
  14. 2. 一些概念
  15. 01.零样本提示 (Zero-Shot Prompting) vs. 少样本提示 (Few-Shot Prompting)
  16. 02. 思维链 (Chain of Thought, CoT) vs. 自洽性 (Self-Consistency) vs. 思维树 (Tree of Thoughts, ToT)
  17. 3. 辅助工具
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端请求后端 404/405/500 状态码排查与解决指南
  • Java Web 开发基础:Spring Web MVC 核心解析
  • IntelliJ IDEA 集成 GitHub Copilot 安装与实战指南
  • OpenClaw AI Agent 框架核心特性与部署实践
  • Python 类型注解详解:AI 大模型开发实战
  • Qwen-Image-2512 免费本地部署实战:ComfyUI 全流程指南
  • AI 大模型产品经理学习路线:从入门到精通
  • Linux 环境下 OpenClaw 安装、初始化与 Web UI 配置指南
  • AiScan-N:基于人工智能的全自动化渗透测试工具
  • LTX-2.3:开源 AI 视频生成新标杆,支持音视频同步生成
  • 微信 ClawBot 插件支持个人微信及 Windows 安装方案
  • 8 篇必读的大模型前沿论文
  • 如何利用 AI 大模型解决实际问题:实战案例与操作指南
  • Stable Diffusion XL 提示词增强工具:SDXL Prompt Styler 使用指南
  • 2026 AI 编码工具终局:Claude Code、Cursor、Copilot 深度对比与选型
  • Python 实现 VisionTransformer(ViT)在时间序列行为识别中的应用
  • 从三年前端到韩国读研:我的得失与回归前端的思考
  • ROS1 与 ROS2 桥接器完整指南:实现跨版本机器人通信
  • DeepSeek 开源 Janus-Pro 统一多模态模型,7B 版本性能显著增强
  • 得物潮鞋价格波动监控系统实战:爬虫开发与数据可视化

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online