大语言模型提示工程实战:迭代式开发流程与技巧(附代码)
摘要
很多初学者以为写出完美的提示词是提示工程的关键,但事实上,第一次提示就成功的概率并不高。真正重要的是掌握一套迭代式开发流程:先写一个初始提示,运行观察结果,分析不足,然后逐步优化。本文基于 OpenAI 官方课程,用一个真实的“产品规格说明书生成营销文案”案例,带你完整走一遍迭代过程。你将学习如何控制输出长度、调整关注点、提取特定字段、生成 HTML 表格等。读完本文,你将不再盲目尝试“万能提示”,而是拥有属于自己的高效提示迭代方法论。
适用人群 / 前置知识
适用人群:使用大语言模型(如 ChatGPT)开发应用的开发者、产品经理、数据分析师;希望系统提升提示工程能力的学习者。
前置知识:了解 Python 基础;能读懂 OpenAI API 的基本调用代码;对提示工程有初步概念更佳。
引言:为什么“完美提示词”是一个陷阱?
你可能在互联网上见过类似“30 个最佳提示词”的文章,仿佛只要复制粘贴这些“完美”的提示,就能让大语言模型为你所用。但现实是:不存在能应对所有场景的完美提示词。不同的任务、不同的输出格式、不同的受众,都需要不同的提示。
真正高效的提示工程师,不是记住一堆提示模板的人,而是掌握迭代式开发流程的人。就像训练机器学习模型一样,你从第一个实验开始,观察结果,分析错误,然后改进,再实验……直到达到满意的效果。
本文将通过一个完整的实战案例,演示这一流程。案例目标:根据一把办公椅的技术规格说明书,为营销团队生成适合不同渠道的产品描述。
环境准备:基础代码
首先,确保你安装了 OpenAI Python 库(版本 0.27.0 或 1.0.0),并配置好 API 密钥。以下为辅助函数:
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv('OPENAI_API_KEY')
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # 确定性输出
)
return response.choices[0].message["content"]
如果你使用 OpenAI 库 1.0.0 及以上版本,请使用以下代码:
client = openai.OpenAI()
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
)
return response.choices[0].message.content
案例数据:椅子技术规格说明书
我们有一份关于办公椅的技术文档(fact_sheet_chair),包含:概述、结构、尺寸、选项、材料、原产国等。完整内容见代码。我们的目标是:基于这份文档,生成产品描述。
迭代流程总览
下面展示了提示开发的迭代循环:
想法 → 2. 写提示 → 3. 运行获得结果 → 4. 分析结果 → 5. 改进提示 → 回到步骤2
这个循环会一直持续,直到结果满足需求。
第一次尝试:基础提示
我们从一个最简单的提示开始:
prompt = f"""
你的任务是帮助营销团队基于技术规格说明书,
为零售网站创建产品描述。
请根据三重反引号内的技术规格编写产品描述。
技术规格:```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
输出:一段比较完整的产品描述,但长度较长(约 150+ 词)。对于零售网站来说,可能过于冗长。
问题1:文本太长 → 需要控制长度。
第二次迭代:控制输出长度
我们添加“最多 50 个词”的约束:
prompt = f"""
...(同上)...
使用最多 50 个词。
技术规格:```{fact_sheet_chair}```
"""
运行后,输出约 52 个词,明显更简洁。你也可以尝试“最多 3 句话”或“最多 280 个字符”。注意:大语言模型对精确字数/字符数的控制并不完美,但大致在合理范围内。
问题2:关注点不对 → 当前描述偏向消费者(时尚、美观),但我们的目标受众是家具零售商,他们更关心技术细节和材料。
第三次迭代:调整受众和侧重点
修改提示,明确受众为“家具零售商”,并要求侧重技术细节和材料:
prompt = f"""
...(同上)...
此描述面向家具零售商,因此应偏技术性,
重点介绍产品的制造材料。
使用最多 50 个词。
技术规格:```{fact_sheet_chair}```
"""
输出示例:“涂层铝底座、气动升降椅、高品质材料……”——更符合零售商的需求。
新需求:在描述末尾包含产品 ID(如 SWC-100, SWC-110)。
第四次迭代:添加特定信息提取
在提示末尾添加指令:
prompt = f"""
...(同上)...
在描述末尾,包含技术规格中的每个 7 字符产品 ID。
使用最多 50 个词。
技术规格:```{fact_sheet_chair}```
"""
输出中正确包含了两个产品 ID。
进一步需求:还需要一个尺寸表格,并且希望输出是 HTML 格式,便于嵌入网站。
第五次迭代:生成结构化 HTML 表格
添加更复杂的指令:生成一个两列的尺寸表格(第一列尺寸名称,第二列英寸数值),并以 HTML 格式输出,放在
prompt = f"""
你的任务是帮助营销团队基于技术规格说明书,
为零售网站创建产品描述。
请根据三重反引号内的技术规格编写产品描述。
此描述面向家具零售商,因此应偏技术性,
重点介绍产品的制造材料。
在描述末尾,包含技术规格中的每个 7 字符产品 ID。
在描述之后,包含一个表格,给出产品尺寸。
表格应有两列:第一列是尺寸名称,第二列是英寸数值。
表格标题为“Product Dimensions”。
将所有内容格式化为可用于网站的 HTML。
将描述放在一个 <div> 元素中。
技术规格:```{fact_sheet_chair}```
"""
运行后,模型返回一段 HTML 代码。我们可以用 IPython.display 渲染查看:
from IPython.display import display, HTML
display(HTML(response))
注意:这次我没有加“最多 50 词”的限制,所以描述可能较长。你可以根据需要继续调整。
迭代过程中的常见改进方向
| 迭代轮次 | 发现的问题 | 改进手段 |
|---|---|---|
| 1 | 输出太长 | 增加长度约束(词数/句子数/字符数) |
| 2 | 关注点错误 | 明确受众和侧重点 |
| 3 | 缺少关键字段 | 要求提取特定信息(如产品 ID) |
| 4 | 格式不便解析 | 要求结构化输出(JSON/HTML/表格) |
| 5 | 需要可视化 | 要求生成 HTML 并嵌入样式 |
进阶:从单个示例到批量评估
在应用的早期开发阶段,用一个代表性示例迭代完全可行。但当应用趋于成熟,你可能需要在一个验证集上评估提示的稳定性。例如,准备 50 份不同的产品规格说明书,运行同一个提示,检查平均输出质量、最差情况等。这能帮助你发现边缘案例,进一步优化提示。
常见问题与注意事项
1. 一次迭代只解决一个问题:不要一次性添加太多约束,否则难以判断哪个修改有效。
2. 保留历史版本:记录每次迭代的提示和输出,便于回溯和对比。
3. temperature参数:在迭代过程中建议保持 temperature=0,保证输出确定性。只有在需要创造性变化时才调高temperature参数。
4. 长度控制的不精确性:模型对精确字数/字符数的控制有限,多试几次或使用后处理截断。
5. 提示注入风险:如果用户输入不可信,请使用分隔符隔离用户内容。
总结:关键要点
- 提示工程是迭代过程,不是一次性写作。 第一次很少成功,没关系。
- 从简单开始,逐步增加复杂性。 先让模型做对核心任务,再添加格式、长度等要求。
- 明确受众和目标,让模型知道为谁而写、关注什么。
- 善用结构化输出(JSON、HTML、表格),便于程序解析和展示。
- 批量评估 是应用成熟后的进阶步骤,但不是早期必须。
最后,记住这句话:“成为一名高效的提示工程师的关键,不在于知道完美的提示词,而在于拥有一个良好的流程,为你的具体应用开发出有效的提示词。”
更多推荐



所有评论(0)