掌握Prompt设计技巧是提升大模型交互效率的关键。本文将分享五种核心方法,从基础封装到高级应用,助你快速提升AI交互质量。
在ModelScope Notebook环境中,调用大模型仅需少量代码。DeepSeek接口与OpenAI完全兼容,引入openai模块即可快速使用:

from openai import OpenAIclient = OpenAI(
api_key="your-api-key",
base_url="https://api.deepseek.com/v1"
)
接口调用本身并不复杂,真正的挑战在于Prompt设计——相同的任务,不同的Prompt写法可能导致输出质量天差地别。
本次研究围绕这个核心问题展开,通过五组实验揭示了Prompt设计的核心规律。
def get_completion(prompt, model='deepseek-chat'):
response = client.chat.completions.create(
model=model,
messages=[
{"role": "user", "content": prompt}
],
temperature=0.5,
max_tokens=1024,
)
return response.choices[0].message.content
这个基础函数包含多个值得注意的设计细节。
messages的结构
LLM的chat接口本质是多轮对话,messages列表中的每条消息都包含role和content两个字段:
| role | 含义 |
|---|---|
user | 用户输入内容 |
assistant | 模型回复内容 |
system | 系统级行为指令 |
单轮调用只需传递user角色。多轮对话需要手动维护历史消息记录。
temperature控制随机性
0 0.5 1 2
|----------|------------|----------|
严谨确定 均衡适中 略有创意 随机发散
max_tokens控制输出长度
该参数限制的是输入输出总token数,设置过小会导致回复被截断。
print(get_completion("写一首夏天游玩的七言诗"))
模型返回了一首工整的七言诗,这只是后续实验的热身。
当Prompt同时包含指令和处理文本时,模型可能混淆两者的界限。
text = f"""
你应当通过尽可能清晰、具体的指令,来明确你希望模型完成的任务。
这能引导模型产出符合预期的结果,同时降低回复内容偏离主题或出现错误的概率。
不要把编写清晰的提示词和精简提示词混为一谈。
很多时候,篇幅更长的提示词能为模型提供更完整的说明与背景信息,进而让输出内容更加详实、贴合需求。
"""prompt = f"""
将三个反引号之间的文本总结为一句话
```{text}```
"""print(get_completion(prompt))
使用三个反引号包裹待处理文本,实现数据与指令的物理隔离。
分隔符不仅美化格式,更重要的是提供明确的结构信号:
[指令区域] 将三个反引号之间的文本总结为一句话
[数据区域] ```...待处理文本...```
模型能清晰区分任务说明和处理对象,避免误读。
常用分隔方案:
| 分隔符 | 适用场景 |
|---|---|
``` | 代码块或多行文本 |
""" | 长段落文字 |
| 结构化数据 |
--- | 简单分隔 |
要求模型以指定JSON格式返回四大名著信息:
prompt = f"""
请列出四大名著,并标注对应的作者与书籍类型。
使用JSON格式呈现,需包含以下字段:
book_id(书籍编号)、title(书名)、author(作者)、desc(简介)、genre(书籍类型)
"""response = get_completion(prompt)
print(response)
返回结果包含完整字段,格式规范。
信息内容和呈现格式需要分别明确。
未约束格式时,模型可能返回任意形式的结果。约束为JSON后:
import json
data = json.loads(response)
# 可直接用于后续处理
这是重要原则:输出格式服务于程序处理,而不仅是人类阅读。
| 场景 | 建议格式 |
|---|---|
| 程序处理数据 | 指定字段的JSON |
| 列表输出 | Markdown列表或JSON数组 |
| 文本处理 | 纯文本 |
| 多任务输出 | XML标签分区 |
使用相同Prompt处理两类文本:
Prompt逻辑:有步骤则格式化输出,否则返回固定提示。
# 文本一:泡茶步骤
text = f"""
泡一杯茶其实很简单!首先把水烧开。烧水的同时,拿出茶杯,放入茶包。
水烧开后,将热水冲入杯中浸泡茶包。静置片刻让茶香析出。
几分钟后,根据个人口味,还可以加入糖或牛奶。这样一杯美味的茶饮就泡好了。
"""prompt = f"""
你将收到由三引号包裹的文本。若文本中包含一系列操作指令,
请按照下述格式重新整理这些指令。
步骤 一 ...
步骤 二 ...
...
步骤 N ...
如果文本中没有一系列操作指引,直接输出**"没有提供步骤。"**
"""{text}"""
"""print(get_completion(prompt))
# 文本二:公园景色描写
text_2 = f"""
今日阳光明媚,鸟儿欢唱。这样的好天气很适合去公园散步。
花儿竞相绽放,树木在微风中轻轻摇曳。
人们纷纷出门,享受这宜人的天气……
"""
结果:文本一被正确格式化为步骤列表;文本二返回预设提示。
Prompt可以包含完整判断逻辑:
IF 文本包含操作步骤
THEN 格式化输出步骤列表
ELSE
THEN 输出固定文本
这表明Prompt本身可作为业务规则描述语言,处理分类判断任务。
通过示例引导回答风格:
prompt = f"""
你的任务是保持统一的行文风格作答。提问:请讲讲何为耐心。
回答:能凿出幽深峡谷的江河,源自涓涓细流;
恢弘壮阔的交响乐,起于单个音符;
精美繁复的织锦,始于一缕丝绒。请问:请讲讲何为韧性。
"""print(get_completion(prompt))
回答延续了示例的三比喻并列风格。
Few-Shot方式比文字描述更有效:
文字描述:难以准确传达抽象风格要求
Few-Shot:模型自动提取示例特征并迁移
| 场景 | 适用性 |
|---|---|
| 特定写作风格 | 非常适合 |
| 固定格式输出 | 适合 |
| 分类任务 | 效果良好 |
| 事实问答 | ️ 意义有限 |
将多个子任务打包进单个Prompt:
text = f"""
在一座风光宜人的小村庄里,姐弟俩杰克和吉尔动身前往山顶的水井取水。
两人一路欢歌向上攀登,不料意外突生——杰克被石头绊倒,滚下山坡,
吉尔也跟着摔了下去。二人虽受了些轻伤,还是回到了家中,得到家人温柔的安抚。
"""prompt = f"""
执行以下操作:
1. 将三个反引号内的文本概括为一句话。
2. 把这句摘要翻译成法语。
3. 列出法语摘要中出现的所有人名。
4. 输出JSON对象,包含字段:french_summary、num_names。
答案分行展示。文本:
```{text}```
"""print(get_completion(prompt))
模型依次完成各步骤,最终输出格式规范。
分步执行可验证中间结果,减少错误积累:
直接问答模式:输入 ──→ 输出(中间推理隐含,容易出错)分步推理模式:输入 → 步骤1输出 → 步骤2输出 → ... → 最终输出
↑每步可验证
这是复杂AI应用的核心原则之一。
prompt = f"""
介绍一下博依品牌的喜多多饮料
"""
print(get_completion(prompt))
对不存在的品牌,模型生成了看似真实的虚构内容。
LLM基于概率生成文本,没有"不知道"的概念:
人类遇到不知道的问题:
"我不了解这个品牌,没有相关信息。"LLM 遇到不知道的问题:
生成一段在统计上"像真实品牌介绍"的文本。
这是工作机制决定的固有特性。
| 场景 | 建议 |
|---|---|
| 创意任务 | 可信任输出 |
| 事实查询 | 必须验证 |
| 代码生成 | 需要测试 |
| 文献引用 | 核查来源 |
实际应用中常采用RAG(检索增强生成)方案。
通过五组实验总结Prompt设计核心原则:
Prompt 工程的五条核心原则
├── 用分隔符隔离数据与指令 → 防止模型混淆输入结构
├── 约束输出格式 → 让结果可被程序直接消费
├── 写入条件判断逻辑 → Prompt 本身是业务规则
├── Few-Shot 给示例 → 样本比描述风格更精准
└── 分步骤引导推理 → 减少跳步错误,提升稳定性
同时需注意:模型不会主动声明知识盲区,使用者需自行判断可信度。
本文系统介绍了Prompt设计的核心方法,从基础封装到高级技巧,帮助开发者提升AI交互效率与质量。掌握这些原则,可显著改善大模型输出效果。