提示工程中的格式控制之旅
从格式化基础说起,打造精确提示——这听起来可能是提示工程里最基础的东西,但恰恰是决定成败的关键一环。接下来的几节课,我们一起拆解如何让大型语言模型(LLM)的输出,按照我们想要的样子呈现。不管是简单的列表,还是结构化的JSON,掌握这些技巧,能让LLM的回答变得真正好用。

本文要点
格式化基础:打造精确提示
清晰要点:在提示工程中构建列表回应
Markdown标题在输出格式化中的应用
结构化数据精通:LLM回应中的JSON和YAML格式
可执行代码精通:确保LLMs仅产生可运行的输出
格式化基础:打造精确提示
先来看第一个主题:格式化基础,打造精确提示。这可不是那种枯燥晦涩的理论课,而是实实在在能拿来就用的实战技巧。一句话概括就是——你如何提问,决定了你得到什么回答。把提示写得清楚、具体,LLM才知道你究竟想要哪种格式的输出。
理解提示格式化基础
我们向LLM提出请求的方式,极大地影响着回应的质量。正确的格式化,就像给出一份清晰的说明书。来看个直观的例子:
__ASK__
List the top three benefits of using LLMs.
列出使用LLMs的前三大好处。
__CONSTRAINTS__
- Use bulleted list format.
- 使用项目符号列表格式。
示例输出:
- 提高内容生成效率:LLMs可以快速生成书面材料,加速报告撰写、网站内容创建和电子邮件起草等任务。
- 信息获取的改善:它们可以总结复杂文档,翻译语言,并提供即时问题答案,使信息对用户更加可获取。
- 个性化学习和协助:LLMs可以适应个人用户需求,提供教育环境中的定制辅导或个性化内容推荐,从而增强用户体验。
详细指令的作用
就好比做菜需要食谱,提示里的详细指令决定了LLM能不能产出你想要的确切格式。指定使用项目符号、编号列表,还是像JSON这样的复杂数据结构,都是它的用武之地。为什么是JSON?因为有时候输出是给电脑读的,而不是给人看的。结构化格式对计算机来说更容易处理。
看这个例子:
__ASK__
Generate a JSON object representing a simple to-do list.
生成一个表示简单待办事项列表的JSON对象。
__CONSTRAINTS__
- Include keys for "task" and "priority".
- 包括“任务”和“优先级”的键。
- Limit to three items.
- 限制为三项。
然后,你可能会收到类似这样的输出:
[
{
"task": "完成提示工程课程",
"priority": "高"
},
{
"task": "准备会议议程",
"priority": "中等"
},
{
"task": "预约兽医",
"priority": "低"
}
]
瞧,三个待办事项清清楚楚,任务和优先级一目了然。这种输出格式,人和机器都能轻松理解。
小结
掌握格式化提示的艺术,绝不只是为了追求美观。它是增强与LLM沟通效率的关键,让我们能得到最有效、最可用的输出。随着课程的深入,请记住这个核心原则:我们如何提问,与我们提问什么同样重要。有了正确的格式化基础,我们在提示工程这片天地里就有了十足的底气。
清晰要点:在提示工程中构建列表回应
进入第二课:清晰要点。理解并掌握引导模型以特定格式生成回应的技能,是提示工程里的一门必修课。这堂课重点讲的是如何构建提示,让LLM产出有组织、项目符号列表式的回应。无论是生成想法列表、流程步骤还是类别项目,掌握这点都将大幅提升回应的清晰度和可用性。
格式化项目列表的核心原则
核心原则有哪些?
- :直接告诉LLM,你希望输出是项目符号列表格式。
明确格式要求
- :提供足够的背景信息,确保回应的准确性和相关性。
情境化提问
- :提示要简单直接,避免让模型产生困惑。
简洁是关键
我们对比两个提示:一个没有特定的格式化指令,另一个则包含。
没有格式化指令:
__ASK__
List the health benefits of drinking water.
列出喝水的健康益处。
这个提示会返回一个相当长且结构松散的回应,可能包含引言和结论,但核心信息埋没在文字里。
带有格式化指令:
__ASK__
Provide a bulleted list of the health benefits of drinking water.
提供喝水的健康益处的项目符号列表。
__CONSTRAINTS__
- Do not include an introduction or a conclusion
- 不包括引言或结论
- Use a bulleted list to organize the list
- 使用项目符号列表组织列表
示例输出:
- 维持体液平衡
- 帮助控制卡路里
- 激活肌肉
- 支持皮肤健康与美容
- 确保肾脏功能正常
- 维持正常的肠道功能
对比一目了然——加了格式化指令后,输出更专注、结构更好。
获取介绍性子项目符号
如果还想更精细,加入子项目符号,可以通过约束和示例来实现。
__ASK__
Provide a bulleted list of the health benefits of drinking water.
提供喝水的健康益处的项目符号列表。
__CONSTRAINTS__
- Do not include an introduction or a conclusion
- 不包括引言或结论
- Use a bulleted list to organize the list.
- 使用项目符号列表组织列表。
- Include only a few top-level bullets but go one or more level deeper to add sub-bullets.
- 只包括少数顶级项目符号,但深入一个或多个级别以添加子项目符号。
__FORMAT EXAMPLE__
- **Hydration and Physical Health**
- **水分补充与身体健康**
- **Maintains balance of body fluids**
- **维持体液平衡**
- Aids in digestion
- 帮助消化
- Regulates body temperature
- 调节体温
- Transports nutrients
- 运输营养
- **Energizes muscles**
- **激活肌肉**
- Prevents muscle fatigue
- 预防肌肉疲劳
- Enhances exercise performance
- 提高运动表现
- **Ensures proper kidney function**
- **确保肾脏功能正常**
- Helps flush out toxins
- 帮助排出毒素
- Reduces risk of kidney stones
- 降低患肾结石的风险 22...
注意,这里用的是__FORMAT EXAMPLE__而不是__EXAMPLE__,这是为了说明它不是一个精确的例子,而是一个格式示范。另外,即便我们没有在请求中明确指定顶级项目符号需要加粗,但有了格式示例,LLM依然能理解并执行。
小结
获取项目符号列表回应,需要精确性、清晰度以及对格式的深入理解。明确表达对项目符号列表的需求,并提供清晰上下文,能显著提高AI输出的有效性和可用性。这项技能在许多场景下都极具价值——从生成报告,到将信息总结为易于消化的格式。多练练不同提示,你引导LLM产出结构化列表的能力自然会越来越强。
Markdown标题在输出格式化中的应用
接下来这堂课,聚焦于如何指导LLM用Markdown标题来结构化输出。加班加点写报告时,如果内容能直接用Markdown格式组织好,那该多省事?这堂课就是教你怎么做到的。
核心原则
成功的关键在于提示中包含明确的指令和示例。直接看实例。
基本提示,没有格式化请求:
假设你正在写一份生物学报告,希望LLM帮忙完善,但又希望内容能以Markdown格式良好地结构化。初始提示可能像这样:
__ASK__
Describe the process of photosynthesis.
描述光合作用的过程。
这个提示只会产生一段叙述或列表,毫无结构层级可言。
增强提示,带有格式化请求:
__ASK__
Outline the process of photosynthesis using markdown headers for each main step.
使用Markdown标题概述光合作用过程的每个主要步骤。
__FORMAT EXAMPLE__
# Photosynthesis Process
# 光合作用过程
## Light Absorption
## 光吸收
Description...
描述...
## Carbon Dioxide Fixation
## 二氧化碳固定
Description...
描述...
...
通过包含明确的格式化请求和结构示例,提示更有可能引发一个组织良好、易于导航的回应。
高级结构:
如果只想用特定标题,比如只用h2类型标题(在Markdown中是##),怎么办?
__ASK__
Detail the journey of a red blood cell through the human body using markdown headers for each organ system it passes through.
使用Markdown标题详细描述红细胞在人体中的旅程,它通过的每个器官系统。
__CONSTRAINTS__
- Only use h2 type headers (`##`) in the markdown.
- 只在Markdown中使用h2类型标题(`##`)。
- Also include markdown tables for better information organization.
- 还包括Markdown表格以更好地组织信息。
__FORMAT EXAMPLE__
## Journey of a Red Blood Cell
## 红细胞的旅程
## Heart
## 心脏
## Right Atrium to Right Ventricle
## 右心房到右心室
## Lungs
## 肺部
## Gas Exchange
## 气体交换
...
这个提示展示了如何通过添加约束部分,让输出更加可控。
小结
制作能引导出Markdown标题组织的回应的提示,其实很直接,关键在于明确的格式化请求。可以尝试不同级别的标题规范,来达到期望的信息结构深度。熟练度来自实践,提示越精确,得到的输出就越结构化、越有用。
结构化数据精通:LLM回应中的JSON和YAML格式
进入结构化数据精通这一课。在数据交换和系统集成的世界里,指导LLM生成结构化数据格式,是一项核心技能。无论是处理Web API、配置软件,还是整理数据,掌握这些技巧都能大大增强你的数据操作和自动化能力。
获取正确格式的核心原则
在深入细节之前,先把握几个核心原则:
- :清晰地表达你期望的具体格式,无论是JSON、YAML还是其他。
指令的精确性
- :提供足够的情境信息,让LLM明白数据该是什么结构。
情境清晰性
通过示例来看看效果。
获取JSON格式
假设你想以JSON格式检索用户数据:
__ASK__
Generate sample user information in JSON format.
生成JSON格式的样本用户信息。
__CONSTRAINTS__
- The information should include name, age, and email of the user.
- 信息应包括用户的姓名、年龄和电子邮件。
__EXAMPLE__
{
"name": "Jane Doe",
"age": 28,
"email": "jane.doe@example.com"
}
输出:
{
"name": "Jane Doe",
"age": 28,
"email": "jane.doe@example.com"
}
获取YAML格式
如果需要YAML格式,提示可以这样写:
__ASK__
Generate sample user information in YAML.
生成YAML格式的样本用户信息。
__CONSTRAINTS__
- The information should include name, age, and email of the user.
- 信息应包括用户的姓名、年龄和电子邮件。
- Include example for 5 users different from the examples provided by me.
- 包括5个与我提供的示例不同的用户的示例。
- Pay careful attention to spacing consistency shown in the __EXAMPLE__ to ensure proper YAML syntax.
- 注意在__EXAMPLE__中显示的间距一致性,以确保正确的YAML语法。
__EXAMPLE__
- name: Jane Doe
age: 28
email: jane.doe@example.com
- name: John Smith
age: 32
email: john.smith@example.com
这里的关键是:我们包含了一个具备特定间距指南的示例,还明确了需要的样本数量,并提醒LLM注意示例部分的间距——因为YAML对空格极度敏感。
小结
精通特定格式的提示艺术,是在提示工程中装备的一项强大技能。这一课提供了所需的知识和示例,让你有信心从LLM请求并接收像JSON和YAML这样的结构化数据。把这些原则和示例用到提示构建中,就能充分利用LLM完成需要精确数据格式的任务。
可执行代码精通:确保LLMs仅产生可运行的输出
终于来到最后一课——可执行代码精通。这堂课聚焦于一个至关重要的技能:构建提示,让LLM生成的不仅仅是代码,而且是可执行的代码。关于可运行代码的提示工程,不依赖于复杂性,而在于清晰和精确。
理解可运行代码
在LLM的语境下,可运行代码意味着代码可以立即执行,无需任何修改或纠正。它是即时的、可操作的,而且最重要的是——正确的。要获得这样的代码,你需要深刻理解你正在请求的语言以及预期执行环境。
__ASK__
Generate a Python function that adds two numbers.
生成一个添加两个数字的Python函数。
__CONSTRAINTS__
- Use Python 3 syntax.
- 使用Python 3语法。
- Ensure the code can be run without any modifications.
- 确保代码可以无需任何修改即可运行。
这个提示会返回我们想要的函数,但很可能还包含一些介绍或结尾的文字。这意味着,如果我们想把这个输出直接输入到代码编译器中运行,会遇到麻烦。
完善提示
如何完善提示,只返回代码,其他一概不要?
__ASK__
Generate a Python function that adds two numbers.
生成一个添加两个数字的Python函数。
__CONSTRAINTS__
- Use Python 3 syntax.
- 使用Python 3语法。
- Ensure the code can be run without any modifications.
- 确保代码可以无需任何修改即可运行。
- Do not include an introduction or a conclusion, just give me the code.
- 不包括介绍或结论,只给我代码。
示例输出:
def add_numbers(a, b):
return a + b
通过添加这个约束,LLM理解了你只想要可运行的代码。不过,你仍然可能得到用Markdown反引号包裹的代码——如果想完全跳过这些,可以考虑在提示中加入一个示例来说明。
小结
直接从LLM获取可运行的代码,提示的精确性和清晰性至关重要。明确指定代码的要求,同时强调简洁性、排除非代码元素的需求,就能引导LLM产生干净、可执行的代码。实践出真知,是时候动手试试了。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名