prompt提示词工程---如何让大模型更听得懂人话

目录

[1. prompt典型构成](#1. prompt典型构成)

[2. DST(通过对话逐渐获取重要信息)](#2. DST(通过对话逐渐获取重要信息))

[2.1 定义](#2.1 定义)

[2.2 例子](#2.2 例子)

[2.3 与上下文的关系](#2.3 与上下文的关系)

[2.4 用 Prompt 实现 DST 的极简核心代码](#2.4 用 Prompt 实现 DST 的极简核心代码)

[2.5 基于DST写prompt的方法](#2.5 基于DST写prompt的方法)

[3. NLU(将人话转为大模型能看懂的话)](#3. NLU(将人话转为大模型能看懂的话))

[3.1 定义](#3.1 定义)

[3.2 例子](#3.2 例子)

[3.3 NLU(自然语言理解)的 Prompt 设计](#3.3 NLU(自然语言理解)的 Prompt 设计)

[4. 思维链(给模型提供推理过程)](#4. 思维链(给模型提供推理过程))

[4.1 定义](#4.1 定义)

[4.2 例子](#4.2 例子)

[4.3 思维链(CoT)的 Prompt 设计](#4.3 思维链(CoT)的 Prompt 设计)

[5. 自洽性(根据生成多种答案的众数来确定最后答案)](#5. 自洽性(根据生成多种答案的众数来确定最后答案))

[5.1 定义](#5.1 定义)

[5.2 例子](#5.2 例子)

[5.3 如何写 prompt 利用自洽性](#5.3 如何写 prompt 利用自洽性)

[6. 思维树](#6. 思维树)

[6.1 定义](#6.1 定义)

[6.2 例子](#6.2 例子)

[6.3 如何写 prompt 利用思维树](#6.3 如何写 prompt 利用思维树)


1. prompt典型构成

  • 角色:为 AI 定义与任务最匹配的角色,让 AI 能更好地代入身份进行任务处理,例如 "你是一位软件工程师""你是一位小学老师"。
  • 指示:对需要 AI 完成的任务进行具体描述。
  • 上下文:提供与任务相关的其他背景信息,在多轮交互场景下尤为重要,能让 AI 更精准理解任务脉络。
  • 例子:必要时给出示例,在学术中被称为 one - shot learning(单样本学习)、few - shot learning(少样本学习)或 in - context learning(上下文学习),实践表明这些示例对提升 AI 输出的正确性有很大帮助。
  • 输入:明确任务的输入信息,在提示词里要清晰标识。
  • 输出:对 AI 输出的格式进行描述,方便后续模块自动解析模型的输出结果,像 XML 格式就常被用于此。

|-----------------------------------------------------------------------|
| 注意:每个模型的提示词相同的项目都可能不一样,因为每个模型的训练数据不一样效果也不一样,具体怎么写才能更有效的提高准确率看官方提示词文档。 |

2. DST(通过对话逐渐获取重要信息)

2.1 定义

DST(Dialog State Tracking,对话状态跟踪)是对话系统中的一项关键技术,用于记录和更新对话过程中用户的意图、需求以及对话的相关状态信息 。它能让对话系统在多轮交互中,清晰把握对话的进展情况,从而根据当前的对话状态,做出合适的回应和决策。

2.2 例子

在一个智能酒店预订对话系统中:

  • 第一轮对话,用户说:"我想订一家在市中心的酒店。" 对话系统通过自然语言理解(NLU)模块识别出用户意图是 "预订酒店",地点要求是 "市中心",DST 会将这些信息记录下来,此时对话状态可以表示为 {意图:预订酒店,地点:市中心}。
  • 第二轮对话,用户补充:"要能看到海景的。"DST 会更新对话状态,将用户对酒店景观的需求添加进去,此时对话状态变为 {意图:预订酒店,地点:市中心,景观要求:海景} 。
  • 接着系统依据更新后的对话状态,向用户回复:"为您找到几家位于市中心且能看到海景的酒店,分别是...... 请问您想预订哪一家呢?" 。

2.3 与上下文的关系

  • 联系:上下文是对话系统在交互过程中积累的所有历史信息,包含了对话的背景、用户之前说过的话等内容。DST 依赖上下文来获取关键信息,进而确定和更新对话状态。可以说,上下文是 DST 的信息来源,DST 是对上下文里关键信息的一种提取、整理和跟踪机制。
  • 区别:上下文的范围更广,它包含了对话中所有提及的内容,可能是与核心需求相关的,也可能是一些闲聊、铺垫性的内容。而 DST 只关注与对话目标相关的关键信息,比如用户在订餐对话里提到的菜品、用餐时间等,更具有针对性和结构化,主要用于支持对话系统做出合理的决策和回复 。

2.4 用 Prompt 实现 DST 的极简核心代码

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import openai import json openai.api_key = "YOUR_API_KEY" state = {"intent": None, "food": None, "quantity": None, "time": None} user_inputs = ["我想订餐", "要披萨", "两份", "下午六点送到"] for text in user_inputs: prompt = f"当前状态:{json.dumps(state)}。用户说:{text}。更新状态并仅返回JSON。" resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) state = json.loads(resp.choices[0].message["content"].strip()) print(state) ''' 输出结果: {'intent': 'order_food', 'food': None, 'quantity': None, 'time': None} {'intent': 'order_food', 'food': 'pizza', 'quantity': None, 'time': None} {'intent': 'order_food', 'food': 'pizza', 'quantity': 2, 'time': None} {'intent': 'order_food', 'food': 'pizza', 'quantity': 2, 'time': '18:00'} ''' |

2.5 基于DST写prompt的方法

核心思路:明确当前状态、用户输入,并要求模型「增量更新」关键信息,输出结构化结果。关键技巧:

  • 提供当前对话状态的结构化格式(如 JSON)
  • 强调「只更新变化的字段,保留已有正确信息」
  • 明确需要跟踪的核心实体(如订机票场景的时间、地点、人数等)

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 你需要跟踪用户的对话状态,格式为 JSON,包含字段:intent(意图)、departure(出发地)、destination(目的地)、date(日期)。 当前状态:{"intent": "book_flight", "departure": "北京", "destination": null, "date": null} 用户输入:"我要去上海,下周三出发" 请根据用户输入更新状态,只返回 JSON,不添加其他内容。 |

效果:模型会精准更新 destination 和 date 字段,避免覆盖已有正确的 departure 信息。

3. NLU(将人话转为大模型能看懂的话)

3.1 定义

NLU(Natural Language Understanding,自然语言理解)是人工智能的一个分支,负责将人类的自然语言(如中文、英文)转换成机器能够理解和执行的结构化信息,比如意图和实体。它是对话系统、智能客服、语音助手等的核心模块。

3.2 例子

假设用户说:

|-----------------------------|
| "帮我订一张从北京到上海的高铁票,明天下午三点出发。" |

NLU 可能会解析成:

|-----------------------------------------------------------------------------------------------|
| JSON { "intent": "订高铁票", "entities": { "出发地": "北京", "目的地": "上海", "日期": "明天", "时间": "下午三点" } } |

3.3 NLU(自然语言理解)的 Prompt 设计

核心思路:明确要求模型提取「意图」和「实体」,并给出结构化输出格式,必要时提供示例。关键技巧:

  • 定义清晰的意图类型(如「查询天气」「预订酒店」)
  • 列出需要提取的实体类别(如时间、地点、数量)
  • 用「少样本示例」引导模型理解格式(尤其对复杂场景)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 任务:解析用户输入的意图和实体,输出 JSON。 意图包括:order_food(订餐)、inquire_price(询价)。 实体包括:food(食物)、num(数量)、time(时间)。 示例: 用户输入:"我要2份汉堡,晚上7点送到" 输出:{"intent": "order_food", "entities": {"food": "汉堡", "num": 2, "time": "晚上7点"}} 用户输入:"披萨多少钱一份?" 请输出 JSON: |

效果:通过示例约束,模型能稳定识别意图和实体,减少格式错误。

4. 思维链(给模型提供推理过程)

4.1 定义

思维链是一种通过模拟人类逐步推理过程来提升模型复杂问题解决能力的技术。它是一系列中间的推理步骤,通过让大模型逐步参与将一个复杂问题分解为一步一步的子问题并依次进行求解的过程,其核心是让模型在输出最终答案前,显式生成中间的逻辑步骤,而非直接给出结论。

4.2 例子

  • 零样本思维链:无需提供示例,直接通过指令引导模型生成推理步骤。例如问题 "小明有 12 个苹果,给了小红 5 个,然后又买了 3 个,现在他有多少个苹果?",模型输出为 "小明原有 12 个苹果。送给小红 5 个后,剩余 12 - 5 =7 个。又买了 3 个后,总数为 7 + 3 = 10 个。答案:10 个苹果。" 这种方式适用于简单任务,对于复杂问题可能因步骤缺失导致错误,但在该简单数学问题中,通过逐步推理,大模型能准确得出答案。
  • 小样本思维链:通过提供少量带推理步骤的示例,引导模型模仿并生成答案。例如,先给出示例 1"问:小明有 5 个羽毛球,买了 2 管,每管 3 个,现在有多少个?答:5(原数量) + (2 × 3) = 11 个。" 和示例 2"问:自助餐厅有 23 个苹果,用掉 20 个后又买 6 个,现在有多少个?答:23 - 20 + 6 = 9 个。",然后给出待解决问题 "问:商店上午卖出 8 杯咖啡,下午卖出的是上午的 2 倍,全天卖了多少杯?",模型输出为 "上午卖出 8 杯。下午卖出 8 × 2 = 16 杯。全天共 8 + 16 = 24 杯。答案:24 杯。" 通过这些示例,模型可以学习到推理的逻辑和步骤,从而在面对新问题时能更准确地进行推理和回答。
  • 自一致性(Self - Consistency):该方法会为问题生成多条不同的推理路径,并对生成的答案进行众数投票。例如对于问题 "小明有 12 个苹果,给了小红 5 个,又买了 3 个,现在有多少个?",模型生成多条推理路径如 "12 - 5 + 3 = 10个 -> (12 - 5) + 3 = 10 -> 12 + 3 - 5 = 10 -> 12 - (5 + 3) = 4(错误路径)",投票结果为 "10"(3 票),"4"(1 票),最终答案为 10 个苹果。这种方式可以减少单一路径偏差,提高大模型在复杂推理任务中的准确性和鲁棒性。

4.3 思维链(CoT)的 Prompt 设计

核心思路:强制模型输出「分步推理过程」,再给出最终答案,尤其适合逻辑题、数学题等复杂任务。关键技巧:

  • 用指令引导分步思考(如「请一步一步分析」「先理清楚条件」)
  • 提供带推理步骤的示例(小样本 CoT)
  • 明确区分「推理过程」和「最终答案」

|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| 请解决以下问题,先一步一步分析,最后用「答案:」开头给出结果。 问题:一个商店有3箱苹果,每箱20个。卖出45个后,还剩多少个? 分析: 1. 先算总共有多少个苹果:3箱 × 20个/箱 = 60个 2. 卖出45个后,剩余数量 = 总数 - 卖出数 = 60 - 45 = 15个 答案:15 |

|--------------------------------------------------|
| 用户问:"小明比小红大3岁,小红比小刚小5岁,谁最大?" 请先分析每个人的年龄关系,再给出结论。 |

效果:模型通过显式推理步骤减少跳跃性错误,尤其对多步骤问题准确率提升明显。

5. 自洽性(根据生成多种答案的众数来确定最后答案)

5.1 定义

自洽性是一种提升大模型推理准确性的技术,通过对同一个问题生成多条不同的推理路径,然后对结果进行 "多数投票" 或综合分析,选择最一致的答案。

这种方法能有效减少单一路径可能产生的偏差或错误,特别适合数学推理、逻辑分析等复杂任务。

5.2 例子

问题:小明有 12 个苹果,送给小红 5 个,又买了 3 个,现在有多少个?

多条推理路径:

  • 路径 1:12 - 5 = 7,7 + 3 = 10 → 答案:10
  • 路径 2:12 + 3 = 15,15 - 5 = 10 → 答案:10
  • 路径 3:5 - 3 = 2,12 - 2 = 10 → 答案:10
  • 路径 4:12 - (5 + 3) = 4 → 答案:4(错误)

结果汇总:10(3 票),4(1 票)最终答案:10 个苹果

5.3 如何写 prompt 利用自洽性

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import openai import json from collections import Counter openai.api_key = "YOUR_API_KEY" question = "小明有12个苹果,送给小红5个,又买了3个,现在有多少个?" # 生成5条不同推理路径 n_samples = 5 prompt = f"请解决这个问题,先分析推理步骤,最后用'答案:X'格式给出结果。\n问题:{question}" answers = [] for i in range(n_samples): resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) text = resp.choices[0].message["content"] # 提取答案(假设最后一行是"答案:X") last_line = text.strip().split("\n")[-1] if "答案:" in last_line: ans = last_line.split("答案:")[-1].strip() answers.append(ans) # 多数投票 final_answer = Counter(answers).most_common(1)[0][0] print(f"所有答案: {answers}") print(f"最终答案: {final_answer}") |

自洽性 prompt 关键技巧

  • 多次采样:对同一问题生成多条独立推理路径
  • 明确格式:要求模型用固定格式标记最终答案
  • 结果汇总:通过投票或加权选择最一致的答案
  • 提升多样性:可使用不同的 temperature 值或提示变体

6. 思维树

6.1 定义

思维树是一种让大模型在解决复杂问题时,像树状结构一样并行探索多条推理路径的技术。不同于思维链(Chain of Thought)的线性推理,思维树允许模型:

  • 从一个问题出发,生成多个可能的思考方向
  • 对每个方向进行深入探索
  • 评估各路径的可行性,选择最优解

这种方法特别适合需要试错、回溯或多步规划的任务。

6.2 例子

问题:如何在 30 分钟内从公司回家,并准备一顿简单晚餐?

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 根节点:目标 - 30分钟内回家并准备晚餐 ├─ 路径A:地铁回家 │ ├─ 检查地铁时刻表(2分钟) │ ├─ 步行到地铁站(8分钟) │ ├─ 地铁行程(12分钟) │ ├─ 步行到家(5分钟) │ └─ 烹饪方案:快速炒鸡蛋+米饭(15分钟) │ └─ 总时间:42分钟(超时)→ 排除 │ ├─ 路径B:打车回家 │ ├─ 叫车等待(5分钟) │ ├─ 车程(15分钟) │ ├─ 到家(0分钟) │ └─ 烹饪方案:三明治(8分钟) │ └─ 总时间:28分钟(可行)→ 保留 │ └─ 路径C:公交回家 ├─ 步行到公交站(5分钟) ├─ 等待公交(5-10分钟) ├─ 公交行程(15分钟) ├─ 步行到家(5分钟) └─ 烹饪方案:泡面+鸡蛋(5分钟) └─ 总时间:35-40分钟(可能超时)→ 低优先级 |

结论:选择路径 B(打车 + 三明治)最可靠,能在 30 分钟内完成任务。

6.3 如何写 prompt 利用思维树

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import openai openai.api_key = "YOUR_API_KEY" def think_tree(prompt, branches=3, depth=2): # 1. 生成思维分支 branch_prompt = f"将问题拆分为{branches}个解决方向,简要描述每个方向:\n{prompt}" resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": branch_prompt}] ) branches_text = resp.choices[0].message["content"] # 2. 对每个分支深入探索 results = [] for i, branch in enumerate(branches_text.split("\n")[:branches]): explore_prompt = f"详细探索方案:{branch}\n" explore_prompt += f"请提供最多{depth}步的具体实施计划,并评估可行性和总时间。" resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": explore_prompt}] ) results.append(resp.choices[0].message["content"]) # 3. 综合评估 evaluate_prompt = f"以下是解决问题的几个方案:\n" + "\n---\n".join(results) evaluate_prompt += "\n请综合评估,选出最优方案并说明理由。" resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": evaluate_prompt}] ) return resp.choices[0].message["content"] # 使用示例 question = "如何在30分钟内从公司回家,并准备一顿简单晚餐?" print(think_tree(question)) |

思维树 prompt 设计技巧

  • 明确分支数量:控制探索的方向数量
  • 设定深度限制:避免单个路径过于冗长
  • 要求评估标准:让模型为每个路径提供可行性评分
  • 使用对比语言:如 "比较"" 权衡 ""最佳选择" 等词汇
  • 可视化输出:要求模型用列表或树状结构展示思考过程
相关推荐
扑克中的黑桃A3 小时前
Python快速入门专业版(三):print 格式化输出:% 占位符、format 方法与 f-string(谁更高效?)
python
扑克中的黑桃A3 小时前
Python快速入门专业版(四):print 函数进阶:彩色输出、特殊格式与调试技巧
python
小苑同学3 小时前
PaperReading:《Manipulating Multimodal Agents via Cross-Modal Prompt Injection》
人工智能·网络安全·语言模型·prompt·安全性测试
shy_snow3 小时前
Prompt Optimizer 提示词优化器安装使用
prompt
前端伪大叔3 小时前
第12篇|🔌 Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
python·node.js
c8i3 小时前
drf中认证组件的初步使用
python·django
这张生成的图像能检测吗3 小时前
(论文速读)Prompt-Free Diffusion:告别提示工程的烦恼
人工智能·深度学习·计算机视觉·prompt·图像生成·超分辨率重建·clip
冬天vs不冷3 小时前
Java基础(十四):枚举类详解
android·java·python
这里有鱼汤3 小时前
如何用Python找到股票的支撑位和压力位?——成交量剖面
后端·python