不会写提示词?难怪你的AI总在胡说八道!
你有没有过这样的经历?满怀期待地问大模型一个问题,结果它一本正经地胡说八道,编造数据、张冠李戴,甚至“自信满满”地给出错误答案。明明是智能AI,怎么一用就“智障”?其实,问题往往不在模型,而在于我们没学会和它“好好说话”——这正是提示词工程要解决的核心问题。
一、Prompt原理
-
输入编码
当你输入一段提示(Prompt)时,大模型首先将其分词为一系列token(可以是字、词或子词单元),并将每个 token 转换为带有位置信息的向量表示。这一步让模型既能理解语义,也能感知词语在句子中的顺序。
-
自回归生成
随后,模型以自回归方式逐个生成回答中的 token:在每一步,它都会综合考虑原始 Prompt和此前已生成的所有内容,预测下一个最可能的 token。
-
生成终止
这一过程持续进行,直到模型输出终止信号(如结束符
<|endoftext|>)。
为什么需要有效的Prompt?
-
让 AI 给出更准确、有用的回答
-
少问几次就能得到想要的结果
-
避免 AI 理解错误或答非所问
二、提示词策略差异
- 通用模型
- 需要显式引导推理步骤(如CoT提示),否则易忽略关键逻辑
- 通过提示词补偿能力短板(如分步骤思考、few-shot示例)
- 推理模型
- 提示语更简洁,聚焦任务目标和需求
- 无需逐步指导,模型自动生成结构化推理过程;过度拆解反而可能降低推理能力
三、提示词关键原则
-
模型选择
- 按任务类型选择模型,不盲从“热门”
- 创意生成、开放对话优先用通用模型;数学、编程等强逻辑任务选专用推理模型
- 专业领域任务需考虑领域适配模型
-
提示词设计
- 通用模型:结构化、补偿性引导(如背景、格式、示例、约束)
- 推理模型:简洁指令、聚焦目标,信任其内化能力
-
避免误区
- 不对通用模型过度信任,复杂推理需拆解步骤
- 不对推理模型用模糊启发式提问,避免跑偏
- 强推理模型也可能犯错,需多轮交互、交叉验证
四、Prompt编写四大原则
- 明确目标:清晰定义任务,便于模型理解
- 具体指导:给予明确的指令和约束
- 简洁明了:表达简练,避免冗余
- 适当引导:用示例或边界条件辅助模型
- 迭代优化:根据输出持续调整Prompt
1)具体指导:给予模型明确的指导和约束。
示例1:文本摘要生成任务目标,生成新闻文章的摘要。
- 不明确的指导:请为这篇新闻文章生成摘要。
- 具体指导:请将以下新闻文章总结为3-4句话,包含主要事件、人物和时间地点。
示例2:客户服务对话任务目标,回答客户关于订单状态的问题
- 不明确的指导:请回答客户关于订单状态的问题。
- 具体指导:请使用礼貌的语言回答客户关于订单状态的问题,提供具体的订单信息和预计到达时间。如果订单有任何问题,请提供解决方案或进一步的联系信息。
2)简洁明了:表达简练,避免冗余
示例1:文章续写任务目标,根据给定开头续写一段故事。
- 冗长:请基于下面的故事开头续写一段文字。续写时请保持与原文风格一致,注意故事的连贯性和合理性。希望续写部分引人入胜,并且能够自然地衔接上文。如果有任何疑问,请尽量参照原文的风格进行。
- 简洁:根据以下开头续写故事:
3)适当引导
-
无引导:请写一封请假邮件。
-
有引导:请写一封请假邮件,内容包括请假原因、请假时间及工作安排。
示例:
主题:请假申请
尊敬的[经理姓名],
我因个人原因需请假两天,从6月20日至6月21日。请假期间,我会将工作交接给[同事姓名],如有紧急情况可随时联系我。感谢您的理解和批准。
此致
敬礼[您的姓名]
4)迭代优化
- 要求: 帮我写一个a+b的Python函数
- 初版:
def add(a, b): return a + b
- 优化:增加类型检查,处理非数值情况
def add(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Both a and b must be numbers (int or float)")
return a + b
五、Prompt的六大组成部分
-
任务(Task):以动词开头,明确目标
-
上下文(Context):补充背景信息
-
示例(Exemplars):提供具体例子
-
角色(Persona):指定AI扮演的身份
-
格式(Format):要求输出格式(如表格、列表)
-
语气(Tone):指定输出语气(如正式、幽默等)
重要性排序:任务 > 上下文 > 示例 > 角色 > 格式 > 语气
如对模型回答不满意,依次检查Prompt内容并调整。
六、Prompt编写常用技巧
在了解Prompt编写原则的基础上,还有一些Prompt编写技巧:
- 限制输出格式 要求AI输出JSON、表格等结构化数据,方便后续处理。
{
"公司名称":"伊利股份",
"股票代码":"600887",
"营收":"325亿元",
"净利润":"59.23亿元"
}
2.使用分隔符
用如'''等符号区分不同输入部分,提高组织性。
3.提供样例
针对含糊或复杂任务,给出示例让模型学习。
请帮我对用户的评价进行分类,直接输出:正面/负面,并给出理由
示例1:
用户评价:这次开户真是太满意了,都一周了,客服还没有回复我
输出:负面,客户并不是真的满意,客服一周未回复,造成了不满。
示例2:
用户评价:
工商银行的开户过程非常顺利,客服态度亲切。
输出:正面,开户过程顺利,客服态度好。
请回答如下问题:
用户评价:开户流程简洁明了,不需要繁琐的纸质材料,所有步骤都可以在线完成。
4.CoT思维链工具
CoT(Chain of Thought,思维链)通过将复杂任务分解为多个简单的步骤,帮助模型系统地思考并解决问题。作用:
- 系统化问题解决:将复杂问题分解为多个简单步骤,使解决过程更加有序和清晰。
- 提高透明度,减少错误:帮助理解和追踪每个决策点,减少整体错误发生的概率。
- 提升模型推理能力:帮助模型学习如何系统地分解和解决此类问题,提高在类似任务中的表现。
你是一个数学助手,请根据以下步骤计算用户输入的金额。请将每个金额首先加上1000元,接着减去500元,然后乘以1.2输出计算结果,以','作为分隔符进行返回。你可以参考以下计算过程来帮助解决:
计算过程如下:首先分别对输入的2000, 3000, 4000加上1000,得到:3000, 4000, 5000
然后将3000, 4000, 5000分别减去500,得到:2500, 3500, 4500
然后将2500, 3500, 4500分别乘以1.2,得到:3000, 4200, 5400
答案是:3000, 4200, 5400
输入:1500, 2500, 3500
5.面向不同角色讲解
把我当做五岁小朋友一样,向我介绍人工智能。
七、Prompt实战案例
1. 使用提示词完成任务
电信的客服人员,如何识别用户的手机流量套餐的需求?
import dashscope
import os
# 从环境变量中获取 API Key
dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')
# 基于 prompt 生成文本
# 使用 deepseek-v3 模型
def get_completion(prompt, model="deepseek-v3"):
messages = [{"role": "user", "content": prompt}] # 将 prompt 作为用户输入
response = dashscope.Generation.call(
model=model,
messages=messages,
result_format='message', # 将输出设置为message形式
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.output.choices[0].message.content # 返回模型生成的文本
instruction = """
你的任务是识别用户对手机流量套餐产品的选择条件。
每种流量套餐产品包含:名称,月费价格,月流量。
根据用户输入,识别需求。
"""
input_text = """
办个100G的套餐。
"""
prompt = f"""
# 目标
{instruction}
# 用户输入
{input_text}
"""
response = get_completion(prompt)
print(response)
输入:办个100G的套餐输出:
- 月流量:100G(明确)
- 名称、月费价格:未提及
2. 要求AI返回JSON格式
如何让AI返回JSON格式,更方便后续的识别和使用?
output_format = """
以 JSON 格式输出
"""
prompt = f"""
# 目标
{instruction}
# 输出格式
{output_format}
# 用户输入
{input_text}
"""
response = get_completion(prompt)
print(response)
{
"月流量":"100G"
}
3. 使用CoT分步骤推理
如何审核客服的回答是否符合规范要求?
instruction = """
判断客服回答是否规范:
- 必须有礼貌
- 用官方口吻
- 准确提及产品名称、月费、月流量
- 不可终结对话
"""
context = """
用户:你们有什么流量大的套餐
客服:亲,我们现在正在推广无限套餐,每月300元就可以享受1000G流量,您感兴趣吗?
"""
output_format = """
符合规范输出:Y,不符合输出:N
"""
prompt = f"""
# 目标
{instruction}
# 输出格式
{output_format}
# 对话上下文
{context}
"""
response = get_completion(prompt)
print(response)
4. 用Prompt优化Prompt
如何使用Prompt优化Prompt?
user_prompt = """
做一个手机流量套餐的客服代表,叫小瓜。可以帮助用户选择最合适的流量套餐产品。……
"""
instruction = """
你是一名专业的提示词创作者。你的目标是帮助我根据需求打造更好的提示词。
你将生成以下部分:
提示词:{更优提示词}
优化建议:{改进建议}
问题示例:{最多3个交流问题}
"""
prompt = f"""
# 目标
{instruction}
# 用户提示词
{user_prompt}
"""
response = get_completion(prompt)
print(response)
八、练习
结合你的业务场景,尝试编写一个Prompt驱动大模型完成任务:
- 使用提示词完成任务
- 返回JSON格式,提取精确内容
- 使用CoT分步骤推理
- 用Prompt调优Prompt