1. 项目概述:从“指令”到“对话”的范式转变

如果你在2022年底之前告诉我,和一台机器进行一场有来有回、逻辑清晰的对话,并让它帮你写代码、分析数据、甚至创作诗歌,我会觉得这还属于科幻小说的范畴。但今天,这已经是全球数亿人的日常。这一切的核心,并非仅仅是模型本身有多强大,而在于我们与它沟通的方式发生了根本性的变化。过去,我们与计算机交互,使用的是精确但僵硬的指令和语法;今天,我们与大型语言模型(LLM)交互,使用的是自然语言,一种更接近人类彼此交流的方式。这种新范式的核心技能,就是 提示工程

简单来说,提示工程就是“如何与AI有效对话”的学问。它不是一个神秘的“咒语学”,而是一门结合了逻辑、心理学和语言学的实践艺术。其目标非常明确:通过精心设计的输入文本(即“提示”),引导模型生成最符合我们期望的输出。这听起来简单,但实操中,一个微小的措辞变化,就可能让结果从“精准无误”变成“答非所问”。本文是“提示工程101”系列的第二部分,我们将深入探讨几种高级提示技巧,特别是 思维链 自我一致性 ,它们能显著提升模型在复杂推理任务上的表现。无论你是开发者希望将LLM集成到产品中,还是普通用户想更高效地使用ChatGPT等工具,掌握这些技巧都将让你从“碰运气”式的提问,升级为“精准引导”式的协作。

2. 思维链提示:让AI“展示它的作业”

2.1 为什么需要思维链?突破模型的“直觉”局限

大型语言模型如GPT-3/4在语言理解和生成上表现惊人,它们能总结文章、翻译语言、甚至模仿特定作家的文风。然而,当面对需要多步逻辑推理或数学计算的问题时,它们的表现可能会突然“跳水”。这就像一个能背诵整本《奥德赛》的学生,却可能在小学算术题上栽跟头。原因在于,这些模型本质上是基于海量文本统计规律的模式匹配器,它们更擅长生成“看起来合理”的文本序列,而非进行严格的、步骤化的逻辑演算。

传统的“零样本”或“少样本”提示,是直接将问题和可能的答案格式抛给模型。这相当于考试时只给题目和答题卡,不让写演算过程。模型往往会凭借其参数中内化的“直觉”或“模式”直接给出一个最终答案,而这个答案在复杂问题上很容易出错。 思维链提示的核心思想,就是模仿人类解决复杂问题的方式:将大问题分解为一系列小步骤,逐步推导,最终得出结论。 我们要求模型“展示它的作业”,即输出推理的中间步骤。

这个方法的有效性在2022年Wei J等人的论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中得到了验证。研究显示,当模型被要求进行逐步推理时,其在数学应用题、常识推理和符号操作等任务上的性能得到显著提升。这不仅提高了答案的准确性,还带来了两个额外好处:第一,它为模型的思考过程提供了一个可解释的窗口,方便我们调试和发现错误所在;第二,它允许模型将更多的“计算注意力”分配给需要更多推理步骤的问题。

2.2 零样本思维链:一句“魔法指令”的威力

让我们通过一个实际的购物比价场景来感受思维链的威力。假设我们正在开发一个智能比价功能,需要从一堆商品选项中找出性价比最高(单位价格最低)的那个。

初始尝试(无思维链): 我们给模型一个简单的商品列表和指令:“找出基于价格的最佳选项。”

products = """
Dove Men+Care 8 bars pack $9.99
Dove Beauty Bar 4 bars pack $6.47
Dove Beauty Bar 1 bar $1.47
Dove Beauty Bar 14 bars pack $16
Yardley London Soap Bar (Pack of 10) $19.99
Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack $46.45
"""

prompt = f"""
你将会收到一个由<>界定的各种商品规格列表。每个商品都附有其价格。
你的任务是找出基于价格的最佳选项。
<{products}>
"""

模型的回复很可能是:“基于价格的最佳选项是1块装的Dove Beauty Bar,价格1.47美元。” 它直接选择了总价最低的商品,而没有计算单位价格(每块香皂的价格)。这显然不是我们想要的“性价比最高”。

应用零样本思维链: 现在,我们在指令中加入一句关键的“魔法指令”:“请逐步推理”。

prompt = f"""
你将会收到一个由<>界定的各种商品规格列表。每个商品都附有其价格。
你的任务是找出最能省钱的机会(即单位价格最低的商品),请逐步推理:
<{products}>
"""

模型的回复会发生质变:

第一步:计算每种规格的每块香皂价格。
- Dove Men+Care 8块装:9.99美元 / 8块 = 每块1.24875美元
- Dove Beauty Bar 4块装:6.47美元 / 4块 = 每块1.6175美元
- Dove Beauty Bar 1块装:1.47美元 / 1块 = 每块1.47美元
- Dove Beauty Bar 14块装:16美元 / 14块 = 每块约1.142857美元
- Yardley London 10块装:19.99美元 / 10块 = 每块1.999美元
- Dr. Squatch 5块装:46.45美元 / 5块 = 每块9.29美元

基于以上分析,最能省钱的机会是Dove Beauty Bar 14块装,其每块价格最低,为1.14美元。

实操心得与原理剖析: 这个转变的背后,是自回归生成模型的工作机制。模型生成文本是一个词一个词(token by token)进行的,每个新词都基于之前已生成的所有词。当我们强制模型首先生成“第一步:计算每种规格的每块香皂价格”这样的推理步骤时,它实际上为自己设定了一个正确的解题框架。后续的生成过程都被约束在这个逻辑框架内,从而大大提高了得出最终正确答案的概率。这就像一个人被要求“先说出你的思考过程”,这会迫使他更系统、更严谨地思考,而不是凭直觉瞎猜。

注意 :指令的精确性至关重要。对比“找出最佳选项”和“找出最能省钱的机会(即单位价格最低的商品)”,后者消除了“最佳”定义的模糊性,直接指明了比较维度(单位价格)和目标(最低)。在复杂任务中,模糊的指令是导致模型输出不稳定的首要原因。

2.3 少样本思维链:提供解题“范例”

零样本思维链让模型自由发挥推理过程,而少样本思维链则更进一步:我们为模型提供一两个完整的“问题-推理-答案”范例,让它模仿这种推理模式来解决新问题。这相当于给了模型一个具体的解题模板。

继续我们的购物场景,现在我们要比较不同规格的可乐哪个更划算。我们可以在提示中先嵌入一个关于薯片的已解决的范例:

prompt = f"""
Q: Walmart有以下几种乐事经典薯片规格:13盎司袋装4.98美元,8盎司袋装2.76美元,以及一包10小袋(每袋1盎司)共6.82美元。哪种规格的每盎司价格最低?
A: 规格1价格为4.98美元,每盎司价格为4.98/13 ≈ 0.383美元。
    规格2价格为2.76美元,每盎司价格为2.76/8 = 0.345美元。
    规格3价格为6.82美元,包含10小袋,每盎司价格为6.82/(1*10) = 0.682美元。
    结论:最便宜的规格是第二种,每盎司0.345美元。

Q: Walmart有以下几种可口可乐规格:24罐装(每罐12液盎司)11.86美元,12罐装(每罐12液盎司)7.46美元,以及6瓶装(每瓶16.9液盎司)4.98美元。哪种规格的每液盎司价格最低?
"""

模型在看到第一个范例后,会识别出其中的模式:1) 提取每种规格的总价和总单位数(盎司),2) 计算单位价格,3) 比较并得出结论。它会将这个模式应用到新的可乐问题上,从而生成结构相似的推理链和正确答案。

少样本思维链的优势在于 :它不仅能引导推理步骤,还能约束输出的格式和风格。这对于需要标准化输出(如特定格式的JSON、表格或报告)的应用场景尤其有用。你提供的范例质量越高、越具代表性,模型在新问题上的表现就越可靠。

3. 提示链:化繁为简的模块化设计

3.1 复杂任务的分解哲学

没有任何规则要求我们必须用一个庞大的、包含所有逻辑的提示去解决一个复杂问题。相反,将复杂任务塞进单个提示,往往会增加模型的认知负荷,导致混淆和错误输出。 提示链 是一种强大的策略,其核心思想是“分而治之”:将一个复杂的端到端任务,分解为一系列顺序执行的、相对简单的子任务,每个子任务由一个专门的、优化过的提示来处理。前一个提示的输出,作为后一个提示的输入,如此串联,直至完成最终目标。

这种方法有诸多好处:

  1. 可维护性 :每个小提示功能单一,易于编写、测试和调试。修改其中一个模块不会影响其他部分。
  2. 可重用性 :一些通用的子任务提示(如“数据提取”、“格式转换”)可以在不同项目间复用。
  3. 可靠性 :每个步骤都更简单,模型出错的概率更低。即使某一步出错,也更容易定位和修复。
  4. 灵活性 :可以轻松地在链条中插入人工审核、其他API调用或业务逻辑判断。

3.2 实战:构建一个智能购物助手

让我们设计一个更复杂的场景:一个智能购物助手,它不仅能找出最划算的卫生纸,还能根据用户的不同需求(如存储空间有限、需要大量采购)给出个性化建议,并以友好的对话形式呈现。我们将用三个串联的提示来实现。

任务拆解:

  1. 子任务A(计算与提取) :给定商品列表,计算每种商品的单位价格(每张纸价格),并输出结构化的数据。
  2. 子任务B(清洗与排序) :从子任务A的输出中,提取出纯净的JSON数据,并按单位价格排序。
  3. 子任务C(生成推荐) :基于排序后的数据,生成一段包含“最佳性价比”、“最小包装”、“最大包装”三种推荐的自然语言回复。

第一步:计算单位价格(使用零样本思维链) 我们首先需要一个能理解商品描述、进行数学计算并输出结构化数据的提示。

products_tp = """
Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls. Each Mega Roll has 255 3-ply sheets. $6.93
Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls. Each mega roll has 295 2-ply sheets. $19.82
Angel Soft Toilet Paper, 36 Mega Rolls. With 320 2-ply sheets on every Mega Roll. $24.12
New Angel Soft Toilet Paper, 36 Mega Rolls. With 484 2-ply sheets Per Roll. $45.44
Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll. With Scott 1,000 Toilet Paper, you get 12 rolls of 1000 1-ply sheets.
"""

prompt_1 = f"""
你将会收到一个由<>界定的各种商品规格列表。每个商品都附有其价格和规格描述。
你的任务是计算每种规格的每单位测量价格(本例中为每张纸的价格),请逐步推理。
最后,以JSON列表格式返回结果,每个对象包含`title`(商品标题)、`total_price`(总价)和`unit_price`(单位价格)三个键。
<{products_tp}>
"""

模型会输出包含推理过程和最终JSON的文本。我们需要提取出纯净的JSON。

第二步:提取并排序JSON数据 我们设计第二个提示,专门用于文本清洗和数据格式化。

# 假设 response_1 是上一步模型的输出文本
response_1 = “... [冗长的推理过程] ... [ {“title”: “...”, “total_price”: “...”, “unit_price”: “...”}, ... ]”

prompt_2 = f"""
你将会收到一段由<>界定的文本。这段文本包含一个关于Walmart商品的JSON列表。
你的任务是提取该列表,并仅以JSON格式返回这个列表。
列表中的每个对象都包含一个键`unit_price`,它是一个数字。
在返回列表前,请根据`unit_price`键的值按升序对列表进行排序。
记住,只返回JSON列表,不要任何额外的文本或解释。
<{response_1}>
"""

这个提示的输出将是一个整洁的、按单价从低到高排序的JSON数组,完美地作为下一步的输入。

第三步:生成个性化购物建议 现在,我们有了干净的数据,可以交给一个“购物助手”角色来生成最终回复。

# 假设 sorted_json 是上一步输出的JSON字符串
sorted_json = ‘[{“title”: “Angel Soft ...”, “total_price”: “$24.12”, “unit_price”: “$0.00209”}, ...]’

prompt_3 = f"""
你的名字是Wally,你是Walmart商店的人工智能购物助手。
你将会收到一个JSON列表格式的商品规格列表,由<>界定。列表已按`unit_price`升序排列。
你的任务是生成一个简短、直击要点的购买推荐。
1.  首先,以友好的方式介绍自己。
2.  基于列表,推荐整体上最省钱的选项(即第一个,因为已排序)。
3.  然后,考虑到存储空间有限的用户,推荐最小的包装选项(通常是总价最低的)。
4.  最后,为需要大量采购的用户,推荐最大的包装选项(通常是总片数最多的,或总价最高的)。
5.  将所有三条推荐包含在一个段落中。
6.  在告别时,请创造性地融入Walmart的口号“Save Money. Live Better”。
<{sorted_json}>
"""

模型会生成类似这样的回复:“嗨!我是Wally,你在Walmart的购物小助手!根据你的需求,我分析了这几款卫生纸。综合性价比之王是‘Angel Soft卫生纸,36大卷装’,总价24.12美元,每张纸低至0.00209美元,最划算。如果你只是临时补货或储物空间紧张,‘Quilted Northern Ultra Plush卫生纸,6大卷装’只要6.93美元,是最经济的小包装选择。而对于大家庭或喜欢囤货的朋友,‘Scott 1,000卫生纸,12卷装’虽然总价45.44美元,但提供了海量的12000张纸,是最大量的选择。记住,在Walmart,我们的目标是帮你‘少花钱,过好生活’!祝购物愉快!”

提示链设计心得: 设计提示链的关键在于找到合适的任务切分点。一个好的切分点通常对应着数据格式的转换(如非结构化文本 -> 结构化JSON)、处理阶段的变更(如数据计算 -> 决策生成 -> 文案输出)或关注点的分离(如客观分析 -> 主观推荐)。在实践初期,可以先用一个复杂的提示尝试解决问题,观察模型的输出过程和可能出错的地方,这些地方往往就是天然的切分点。

4. 自我一致性:用“民主投票”提升稳定性

4.1 应对模型输出的随机性

即使使用了思维链,大型语言模型的生成过程本质上仍带有一定的随机性(尤其是当温度参数 temperature > 0时)。对于同一个提示,模型在不同次运行中可能会产生略有差异甚至完全不同的推理路径和答案。这种不确定性在需要高可靠性的生产系统中是不可接受的。

自我一致性 是一种简单却极其有效的技术,用于缓解这个问题。它的思想非常直观: 对于同一个问题,用同一个提示多次询问模型,然后从所有返回的答案中选择出现频率最高的那个作为最终答案。 这就像让模型自己进行多次“思考”,然后取多数“票”认同的结果。

这种方法在数学上类似于集成学习中的“投票法”。其背后的假设是,虽然模型单次推理可能犯错,但正确的推理路径和答案在多次独立运行中出现的概率,会高于错误的路径。通过聚合多次运行的结果,可以显著降低因单次随机性而导致的错误风险。

4.2 在购物场景中应用自我一致性

让我们回到鸡蛋比价的例子,并加入一些用户偏好,让问题更具挑战性,也更容易暴露模型的不一致性。

products_eggs = """
Great Value Cage Free Large AA White Eggs, 6 Count $1.07
Happy Egg Organic Free Range Large Brown Eggs, 12 Count $5.16
Great Value Cage Free Large AA White Eggs, 12 Count $1.86
Eggland‘s Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count $2.69
Marketside Large Cage Free Brown Eggs, 12 Count $2.67
"""

preferences = “””
- 只考虑AA级鸡蛋
- 只考虑非笼养农场生产的鸡蛋
- 客户最少需要6个,最多需要12个
“””

prompt_sc = f"""
你将会收到一个由<>界定的各种商品规格列表。每个商品都附有其价格。
你的任务是找出最能省钱的机会(即满足条件的单位价格最低的商品),请逐步推理:
同时,请考虑以下用户偏好来选择最合适的选项:
{preferences}
<{products_eggs}>
"""

如果我们只运行一次,可能会得到一个正确答案。但为了演示,我们假设连续运行三次(在实际API调用中,你可以设置 n=3 来一次性获得多个补全结果)。

三次可能的结果分析:

  • 运行1 :正确过滤了非AA级和超量的选项,比较了6装和12装的单价,得出12装更划算。
  • 运行2 :推理过程略有不同,但最终结论相同,选择了12装。
  • 运行3 :可能因为对“Cage Free”和“Free Range”的细微差别产生疑惑(尽管提示要求“Cage Free”),但在主要逻辑上依然正确,结论仍是12装。

即使三次运行的推理细节和表述略有差异,但最终答案“Great Value Cage Free Large AA White Eggs, 12 Count”获得了多数票(3票)。我们便可以将此作为最终可靠答案。

成本与效果的权衡: 自我一致性的主要代价是 计算成本 。生成N个回答需要N倍的模型调用和计算资源。对于像GPT-4这样的模型,这意味着N倍的API费用和响应时间。因此,这项技术通常用于以下场景:

  1. 对准确性要求极高的关键任务 :例如医疗咨询摘要、法律文件分析、重要财务计算等,容错率极低。
  2. 模型本身在该类任务上表现不稳定时 :通过少量测试发现,对于某些特定类型的问题,单次运行的错误率较高,自我一致性可以作为一种有效的“加固”手段。
  3. 作为评估基准的一部分 :在学术研究或模型评估中,使用自我一致性来获得更稳健的性能估计。

在实际应用中,需要根据具体任务对可靠性的要求、预算和延迟容忍度,来权衡重复执行的次数(N值)。通常,N=3或5就能在成本和效果之间取得很好的平衡。

5. 角色提示:为AI赋予“人格”

5.1 塑造对话的语境与风格

如果说思维链是提升模型“智商”的技巧,那么角色提示就是提升模型“情商”和“专业性”的法宝。这种方法要求模型在生成回复时,扮演一个特定的角色或人物。这个角色可以是一个泛化的职业(如“一位经验丰富的软件架构师”、“一位严厉的文学评论家”),也可以是一个具体的名人或虚构人物(尽管需注意版权和伦理问题),甚至是某个品牌或产品的虚拟代言人。

角色提示之所以有效,是因为它利用了模型在训练数据中学习到的、关于特定角色的语言模式、知识领域和表达风格。当你告诉模型“你是一位资深 DevOps 工程师”,它就会倾向于使用更技术化、更关注系统可靠性和自动化的语言来回答问题。

5.2 实战:打造专业与个性化的回复

在我们的智能购物助手例子中,我们已经初步使用了角色提示(“你的名字是Wally,你是Walmart商店的人工智能购物助手”)。这一定义直接塑造了回复的语气(友好、乐于助人)、内容重点(省钱、提供选择)和格式(融入品牌口号)。我们可以进一步深化这种角色设定。

场景一:技术报告生成者 假设我们需要模型分析上述鸡蛋比价的过程,并生成一份给开发团队的技术报告。

prompt_role_tech = f"""
你是一位专注于机器学习系统优化的技术文档工程师。
请根据以下对话历史和模型输出,撰写一份简短的技术分析报告。
报告需包含:
1.  任务目标概述。
2.  所使用的提示工程技术(如思维链、自我一致性)及其在本案例中的作用。
3.  模型推理过程的逻辑摘要。
4.  最终结论及对系统可靠性的评估。
5.  可能的改进建议(例如,引入更复杂的用户偏好模型)。

对话历史:用户询问在特定偏好下选择最划算的鸡蛋。
模型输出(三次运行的结果摘要):[此处插入之前三次运行的结论摘要]

请使用专业、客观、简洁的技术文档语言。

在这样的角色设定下,模型的输出会从“购物推荐”转变为冷静、结构化、充满技术术语的分析报告。

场景二:挑剔的美食评论家 如果我们想让模型以更生动、更主观的方式评价这些鸡蛋(假设我们输入了更多关于口味、烹饪方式的描述)。

prompt_role_food = f"""
你是一位言辞犀利、品味挑剔的美食评论家,以撰写生动有趣的评论而闻名。
请基于以下鸡蛋产品的信息(品牌、描述、价格),模拟撰写一段简短的美食采购评论。
你的评论应该:
- 充满个人色彩和幽默感。
- 从“性价比”和“烹饪适用性”角度进行调侃式评价。
- 最终给出一个是否推荐的明确、夸张的结论。

产品信息:{products_eggs}

模型可能会生成这样的文字:“‘Great Value’?这名字听起来就像超市自有品牌的最后防线。不过话说回来,1.86美元换12颗AA级非笼养鸡蛋,这价格简直是对‘有机’‘散养’那些华丽辞藻的一记重拳。煎个太阳蛋,蛋白边缘够脆,蛋黄颜色也正,对于工作日早餐来说,它是一位沉默而可靠的性价比战士。至于那盒5.16美元的‘快乐鸡蛋’…哦,我的快乐可能来自于不买它省下的钱。结论:如果你不是要拍Instagram早餐大片,闭眼入Great Value的12颗装,你的钱包和你的平底锅都会感谢你。”

角色提示的使用技巧与注意事项:

  1. 角色定义要具体 :“一位医生”不如“一位有十年临床经验、擅长向患者通俗解释病情的全科医生”有效。
  2. 结合任务指令 :角色提示通常与具体的任务指令结合使用,先定义“你是谁”,再说明“你要做什么”。
  3. 注意边界与伦理 :避免让模型扮演可能产生有害建议或误导信息的角色(如提供非法医疗建议的“医生”)。同时,谨慎使用真实名人,以免产生侵权或误导。
  4. 测试不同角色 :对于创意写作、营销文案等任务,尝试不同的角色(如“上世纪侦探小说家”、“社交媒体网红”、“严谨的学术作者”)可以激发模型产生风格迥异的内容,提供更多选择。

6. 高级技巧融合与实战避坑指南

6.1 组合拳:构建健壮的提示系统

在实际应用中,上述高级技巧很少孤立使用。一个健壮的、用于生产环境的提示系统,往往是多种技术的有机结合。典型的流程可能是:

  1. 角色设定 + 思维链 :首先定义AI助手的角色和任务(“你是一位数据分析助手,请逐步推理…”)。
  2. 提示链 :将复杂的用户查询分解为“理解意图-检索数据-计算分析-生成报告”等多个子提示。
  3. 自我一致性 :在“计算分析”这个对准确性要求极高的关键步骤,对提示进行多次采样,取多数结果。
  4. 输出格式化 :在最终生成报告的子提示中,严格要求以Markdown表格或特定JSON格式输出。

例如,一个智能投资分析助手的提示流可能如下:

用户输入:“分析一下特斯拉和丰田最近的财报,对比他们的市盈率和现金流,用中文给我一个投资建议。”
->
提示1(角色+任务解析):“作为一位谨慎的价值投资分析师,请将用户查询分解为以下结构化任务列表:[1.获取特斯拉最新财报关键数据,2.获取丰田最新财报关键数据,3.计算并对比市盈率,4.计算并对比经营现金流,5.综合给出风险提示和建议]”
->
提示2(数据查询提示链-特斯拉):“查询特斯拉(TSLA)最近一个季度的以下数据:每股收益(EPS)、当前股价、经营现金流。请逐步推理并确保数据来源一致。”
->
提示3(数据查询提示链-丰田):“查询丰田(TM)最近一个季度的以下数据...”
->
提示4(计算与对比,使用自我一致性):“基于以下数据,计算特斯拉和丰田的市盈率,并对比他们的经营现金流。请逐步推理,并运行三次计算以确保准确性。数据:...”
->
提示5(生成最终建议,角色强化):“你是一位以风险厌恶著称的投资顾问。基于以下对比分析:[插入提示4的最终结果],撰写一段给普通投资者的建议。需包含:简要结论、主要风险点、资产配置比例建议。语气需冷静、客观、强调风险。”

6.2 常见陷阱与排查技巧

即使掌握了高级技巧,在实践中仍会踩坑。以下是一些常见问题及解决思路:

1. 提示过长导致模型“遗忘”或性能下降

  • 现象 :提示超过一定长度(如GPT-3.5的4096 token限制)后,模型开始忽略前面的指令,或输出质量显著下降。
  • 排查 :检查提示总长度。使用工具的token计数器(如OpenAI的 tiktoken 库)。
  • 解决
    • 压缩提示 :删除冗余的示例、过于详细的描述。使用更精炼的语言。
    • 采用提示链 :将长提示拆分成多个短的、顺序执行的提示。
    • 摘要技术 :如果必须处理长文档,可以先用一个提示对文档进行摘要,再将摘要输入给主任务提示。

2. 输出格式不稳定

  • 现象 :要求输出JSON,但模型有时会输出额外解释文字,或JSON格式错误。
  • 排查 :检查指令是否明确要求了“只输出JSON”。查看少样本示例的格式是否完全正确。
  • 解决
    • 强化格式指令 :在提示末尾明确强调“请只输出JSON,不要有任何其他文字。”。
    • 提供精准范例 :在少样本提示中,提供完全符合要求的输出范例。
    • 后处理清洗 :在代码中,使用正则表达式或JSON解析库(如Python的 json.loads() ,并配合 try-except )来提取和验证输出。提示链中的第二步(提取JSON)就是为此设计的。

3. 思维链推理出现逻辑“跳跃”或错误

  • 现象 :模型在逐步推理中,某一步计算错误或做出了不合逻辑的假设。
  • 排查 :仔细阅读模型输出的每一步推理。错误往往发生在单位换算、条件过滤(如“最大值”理解成“最小值”)或数据提取上。
  • 解决
    • 更清晰的指令 :明确指定计算规则。例如:“计算每盎司价格时,请使用‘总价 / 总盎司数’的公式。”
    • 提供更详细的少样本范例 :范例中应包含容易出错的步骤的详细演示。
    • 引入验证步骤 :在提示链中增加一个“验证”环节。例如,在计算单位价格后,用一个单独的提示检查计算结果是否在合理范围内(如“鸡蛋单价不应高于2美元/个”)。

4. 角色扮演“出戏”或不符合预期

  • 现象 :设定的角色没有在回复中很好地体现,或者角色行为与任务冲突。
  • 排查 :角色描述是否与任务指令有矛盾?例如,让“一位简洁的工程师”写一篇冗长的散文。
  • 解决
    • 角色与任务对齐 :确保角色特质支持任务完成。让“故事大王”来写创意故事,让“技术文档工程师”来写API说明。
    • 在范例中体现角色 :在少样本提示中,提供的输入-输出范例就应该充分体现目标角色的语言风格。
    • 调整温度参数 :对于需要严格遵循角色和格式的任务,可以适当降低 temperature (如设为0.1或0),减少随机性;对于需要创意发挥的角色,可以适当调高(如0.7-0.9)。

5. 自我一致性成本过高

  • 现象 :为了获得稳定输出,调用次数过多,导致费用和延迟激增。
  • 排查 :是否所有任务都需要自我一致性?是否可以对整个流程,还是仅对最关键的推理步骤使用?
  • 解决
    • 热点分析 :只对错误率最高的子任务(通常是最复杂的计算或逻辑判断)应用自我一致性。
    • 降低采样次数 :从N=5尝试降低到N=3甚至N=2,观察准确率是否仍在可接受范围内。
    • 使用更小/更快的模型进行初筛 :对于非关键步骤,或先用小模型(如GPT-3.5 Turbo)生成多个结果进行一致性投票,再用大模型(如GPT-4)对少数有争议的结果进行仲裁。

6.3 持续迭代与评估

提示工程是一个高度迭代和实验性的过程。没有一劳永逸的“完美提示”。建立一套评估体系至关重要:

  1. 创建测试集 :针对你的核心任务,准备一批有标准答案的输入用例。
  2. 定义评估指标 :准确率、格式符合率、用户满意度评分等。
  3. A/B测试 :对比不同提示版本(如带思维链 vs 不带,不同角色设定)在测试集上的表现。
  4. 监控生产环境 :记录用户实际交互中,模型输出被用户纠正或忽略的情况,这些是优化提示的宝贵数据。

最终,高级提示技巧的熟练运用,将使你从被动的“用户”转变为主动的“导演”,能够精准地引导强大的语言模型,在复杂任务中产出可靠、有用、符合预期的结果。这个过程需要耐心、实验精神和对模型能力边界的清晰认知。每一次提示的调整,都是你对如何与这个新型智能体进行更有效协作的一次深入理解。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐