prompt提示词编写技巧
为什么学习prompt编写
目的:通过prompt的编写,提升LLM输出相关性、准确性和多样性,并对模型输出的格式进行限制,满足我们的业务需求。
-
学过提示词工程的人:像“专业导演”,通过精准指令控制 AI 输出,结果稳定、高效、可复用。
-
未学习的人:像“观众”,被动接受 AI 的随机发挥,结果质量依赖运气。
编写好的prompt的关键点:
-
自身对需求的精准洞察(内功)
-
通过一些约束次,保证结果质量的稳定性(技巧)
比如:当我询问DeepSeek,介绍一下GMP中的P,使用不同的prompt会给出不同的回答。
这两者的关键在于我使用了一些技巧,对模型的输出进行限制。下面我们就来看看可以通过那些技巧的控制,来让模型输出相关性的回答。
编写原则
原则一:编写清晰、具体的指令:
策略一:如果需要多个输入,使用分隔符清晰表示输入的不同部分
分隔符可以是:```、""、<>
、\<tag><\tag>
、:
等。
策略二:明确输出的格式
-
JSON:指定包含的键;
-
HTML
-
Markdown
-
Plain Text
策略三:要求模型检查是否满足条件
如果符合条件如何处理;如果不符合条件呢?
策略四:少样本学习,提供示例:
有些类似于小学的仿写例句。 Few-shot-Learning
原则二:给模型时间去思考
策略一:将复杂任务拆分成多个步骤
策略二:指导模型在下结论之前先找出一个自己的解法
有时候,在明确指导模型在做决策之前要思考解决方案时,我们会得到更好的结果。
防止模型直接被我们的结论误导。
话术模版
-
设定角色+分步指令+参考示例+输出限制。
-
你是一个Prompt提示词专家,帮我编写一个文本校对方面的提示词。
一个比较完整的例子:
你是一名专业的转录校对排版员,具有计算机专业背景。你将负责对<>括号中的面试音频的转录文本进行纠偏和排版。请根据以下要求处理文本:
任务要求:
1.输入内容:一段面试对话的转录文本,以分割符<>形式给出。
2.专业领域:计算机相关(包括但不限于Go语言、计算机网络、操作系统、MySQL、Redis、设计模式等)。
3.修正范围:- 修正明显的识别错误(如"买色扣" → "MySQL")- 修正专业术语错误(如"哥routine" → "goroutine")- 保留所有的口语化表达,包括面试者的口头禅(如"呃"、"这个" 、 "然后" 、 "就是" 不修改)- 不改变原意,仅优化表达清晰度。
4.添加内容:- 根据上下文内容,划分面试官和面试者的角色(如果存在多个面试官,用面试官A、面试官B进行划分),每个角色说的内容,独立成段。
5.输出格式:- 使用Plain Text格式直接输出校正和添加角色后的文本
6.特别注意的术语(举例但不限于):- Go语言:goroutine、channel、GC、interface、defer、pprof、protoBuf、Gin、GORM、Go-Zero- 数据库:MySQL、Redis、索引、事务、ACID、持久化、undolog、redolog、MVCC- 网络:TCP/IP、HTTP/HTTPS、DNS、Socket、三次握手、四次挥手- 系统:进程/线程、死锁、虚拟内存、epoll、IO多路复用
示例输入 & 输出:
输入:
你能说说Go里的哥routine吗?好的,哥routine相当于是用户态的现成,但更轻量。
输出:
面试官:你能说说Go里的哥routine吗?
面试者:好的,goroutine相当于是用户态的线程,但更轻量。
迭代优化
有一个关于要完成的任务的想法,可以尝试编写第一个 Prompt,要满足上面提到的两个原则:清晰明确,并且给系统足够的时间思考,然后运行它并查看结果。
如果第一次效果不好,那么迭代的过程就是找出为什么指令不够清晰或为什么没有给算法足够的时间思考,以便改进想法、改进提示等等,循环多次,直到找到适合您的应用程序的Prompt。
开发者需要先尝试编写提示,然后通过迭代逐步完善它,直至得到需要的结果。关键在于拥有一种有效的开发 Prompt 的过程,而不是知道什么是完美的 Prompt。
应用场景:
-
文本概括
-
关键字信息提取
-
文本推断:使用简单的prompt而非机器学习算法来进行文本推断(情绪、主题内容)
-
文本转换:多语种文本翻译、语气调整、格式转换、拼写及语法纠正
结语:
-
自己想象成老板,LLM想象成一个能力很强但理解能力比较差的实习生。每次沟通的时候,要给出明确的指令,问题是什么?大方向上的解决步骤是什么?想要得到什么输出结果?等等
-
多实验,多测试,从不符合自己预期的输出中,一步一步迭代自己的prompt。
参考资料:
-
面向开发者的Prompt工程