大模型实战篇】掌握核心准则,用 DeepSeek API 玩转高效 Prompt 提示词工程
大模型实战篇】掌握核心准则,用 DeepSeek API 玩转高效 Prompt 提示词工程
🌟 前言
在人工智能飞速发展的今天,大语言模型(LLM)已经成为了每位开发者的得力助手。然而,很多初学者在调用大模型接口时,往往会遇到模型回答偏离主题、输出格式不稳定、产生事实幻觉等问题。
其实,大模型就像一个武林高手,它能力极强,但需要你给出清晰、具体的指令才能把内力使在对的地方。本文将结合 Python 后端调用大模型 API 的真实上机代码,带大家深入拆解大模型交互的核心——Prompt 提示词设计工程的底层准则与核心设计规则!
一、 核心基础:大模型 API 调用函数封装
在开始调优 Prompt 之前,我们首先需要利用 Python 官方 SDK 构建一个稳定、灵活的大模型调用环境。
1.1 环境初始化
这里我们使用统一的模块化引入方式,实例化一个大模型客户端:
from openai import OpenAI
# 实例化大模型客户端,指定 base_url 与 sk 密钥
client = OpenAI(
api_key="your_api_key_here",
base_url="https://api.deepseek.com/v1"
)
1.2 高灵活性函数封装
为了控制模型的输出表现,我们在封装核心请求函数时引入了两个关键的自由度控制参数:
-
temperature(自由度):取值范围为 0~2。0 代表非常严谨、确定(适合写代码、做数学题);2 代表极具创意、随意。
-
max_tokens(最大长度):用来严格控制模型的输出长度,防止返回篇幅过长浪费 Token 资源。
def get_completion(prompt, model='deepseek-chat'):
"""
封装统一的 Chat 聊天接口,支持传入自定义 Prompt
"""
response = client.chat.completions.create(
model=model,
messages=[
{"role": "user", "content": prompt} # 采用 user 角色单轮多话会话
],
temperature=0.5, # 0.5 兼顾严谨与灵活
max_tokens=1024 # 限制单次回复的最大 token 数量
)
return response.choices[0].message.content
二、 核心准则一:撰写清晰、具体的指令
核心痛点:很多同学误以为“精简”就是好提示词,结果往往由于背景信息不足,导致模型开始“胡言乱语”(即 LLM 产生幻觉)。
核心准则:不要把清晰和精简混为一谈! 很多时候,篇幅更长、包含了完整说明与背景上下文的提示词,反而能产出最贴合需求的详实内容。
💡 规则 1:明确要求返回特定的结果格式(如 JSON)
当我们需要将大模型输出的数据无缝对接前端或者存入数据库时,要求其返回结构化的 JSON 格式是最佳选择。
【实战演练】要求格式化输出四大名著:
# 利用 Python 的 f"" 多行字符串嵌套变量,构建精准上下文
prompt = f"""
请列出四大名著,并标注对应的作者与书籍类型。
使用JSON格式呈现,需包含以下字段:book_id(书籍编号)、title(书名)、author(作者)、desc(简介)、genre(书籍类型)
"""
print(get_completion(prompt))
大模型完美输出:
/[
{
"book_id": 1,
"title": "红楼梦",
"author": "曹雪芹",
"desc": "以贾、史、王、薛四大家族的兴衰为背景...",
"genre": "章回体长篇小说 / 人情世态小说"
}
// 后续名著数据严格保持此 JSON 结构...
]
💡 规则 2:利用特殊分隔符防止内容混淆
在处理长文本时,使用类似三个反引号 ```的分隔符将“指令”与“原始文本”隔离开,能够大幅降低模型偏离主题的概率。
text=f"""
泡一杯茶其实很简单!首先把水烧开,烧水的同时拿出茶杯放入茶包,
水烧开后,将热水冲入杯中浸泡茶包,静置片刻后让茶香析出。
几分钟后,根据个人口味还可以加入糖和牛奶,这样一杯美味的茶饮就泡好了
"""
#分步骤
prompt=f"""
你将收到由三引号包裹到文本。若文本中包含一系列操作指令,
请按照格式重新整理这些指令
步骤 一...
步骤 二...
...
步骤 N...
如果文本中没有一系列操作指引,直接输出**“没有提供步骤”**
\"\"\"{text}\"\"\"
"""
prompt
print(get_completion(prompt))
大模型输出:
步骤 一:把水烧开。
步骤 二:烧水的同时拿出茶杯,放入茶包。
步骤 三:水烧开后,将热水冲入杯中浸泡茶包。
步骤 四:静置片刻,让茶香析出。
步骤 五:根据个人口味加入糖和牛奶。
三、 核心准则二:分步骤引导大模型逐步完成逻辑推理
大模型属于“顺理成章”的生成逻辑,当面对复杂任务时,如果你一上来就问它要最终答案,它很容易“翻车”。最科学的做法是给模型提供清晰的推理路径或处理逻辑。
💡 规则 3:给出前置条件与条件分支判断
在拆解指令步骤时,告诉模型在满足条件时怎么做、不满足时输出什么,能够让程序的健壮性达到最高。
【实战演练】复杂多步条件转换:
#引导模型逐步推理
text = f"""
在一座风光宜人的小村庄里,姐弟俩杰克和吉尔动身前往山顶的水井取水。
两人一路欢歌向上攀登,不料意外突生
—— 杰克被石头绊倒,滚下山坡,吉尔也跟着摔了下去。
二人虽受了些轻伤,还是回到了家中,得到家人温柔的安抚。
这场小意外并未磨灭他们冒险的兴致,此后他们依旧满心欢喜地四处游玩。
"""
prompt=f"""
执行以下操作:
将三个反引号内的文本概括为一句话。
把这句摘要翻译成法语。
列出法语摘要中出现的所有人名。
输出JSON 对象,包含字段:french_summary、num_names.
答案分行展示。
文本:
```{text}```
"""
print(get_completion(prompt))
大模型按步推理结果:
{
"french_summary": "Dans un charmant petit village, les frère et sœur Jack et Jill partent chercher de l'eau au puits du sommet, mais une chute accidentelle les blesse légèrement, sans pourtant diminuer leur enthousiasme pour l'aventure.",
"num_names": 2
}
四、 高阶技巧:少样本提示(Few-Shots)与对抗幻觉
4.1 统一行文风格:给大模型吃“样版豆”
如果你希望大模型输出一种非常特定、甚至傲娇或充满诗意的文风,直接给它描述是不够的。直接给它两个现成的样本示例,效果最立竿见影。
#llm工作的随机性
#Few Shots 少量的样本提示
prompt=f"""
你的任务是保持统一的行文风格作答。
提问:请讲讲何为耐心
回答:能凿出幽深峡谷的江河,源自涓涓细流;
恢弘壮阔的交响乐,起于单个音符;
精美繁复的织锦,始于一缕丝绒。
请问:请讲讲何为韧性。
"""
print(get_completion(prompt))
大模型完美的仿写输出:
能折断千年古树的狂风,终在芦苇面前认输;
能磨圆嶙峋礁石的海浪,却绕不过一根蛛丝;
能焚尽森林的烈火,独独烧不尽地底的草根。
4.2 终结“一本正经的胡说八道”:对抗事实幻觉
大模型在面对它不了解的未知事物时,往往会瞎编。我们需要在 Prompt 中加入事实边界限制。
例如反面教材提问:“介绍一下李宁品牌的喜多多饮料”(事实上李宁从未涉足此饮料)。
经过优化的优秀大模型(如经过深度对齐的 DeepSeek)会基于事实直接给出精准打击:
- 明确告知“不存在李宁品牌的喜多多饮料”。
- 准确拆分两个独立的品牌:李宁(体育装备)与喜多多(独立福建食品品牌)。
- 彻底打破幻觉陷阱!
想要写出完美的 Prompt,不妨在键盘前默念这首提示词微调口诀!
指令清晰背景全,格式约束要挑明。
复杂逻辑分步走,多行文本加隔离。
文风不对手示范,对抗幻觉限边界。
掌握 API 调参术,全栈开发变轻松!
如果你觉得这篇教程对你准备大作业或大模型开发有帮助,欢迎点赞、收藏、关注!我们在下一期全栈开发实战中不见不散👋!
更多推荐
所有评论(0)