摘要

很多初学者以为写出完美的提示词是提示工程的关键,但事实上,第一次提示就成功的概率并不高。真正重要的是掌握一套迭代式开发流程:先写一个初始提示,运行观察结果,分析不足,然后逐步优化。本文基于 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、表格),便于程序解析和展示。
  • 批量评估 是应用成熟后的进阶步骤,但不是早期必须。

最后,记住这句话:“成为一名高效的提示工程师的关键,不在于知道完美的提示词,而在于拥有一个良好的流程,为你的具体应用开发出有效的提示词。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐