让ai更加精准的理解你的提示词
写在前面:langgptai.feishu.cn/wiki/ASXOwD...
关于如何写出一份良好的提示词,从而更加高效的使用ai提效,这是一个不错的学习资源。
基于该知识库学习,生成、优化后的简历警察,反响不错,已被收录于大佬 阮一峰 的每周推荐。
简单推广及身边朋友、本人亲身使用后,颇有成效,欢迎大家体验。
项目中不仅提供了原始 prompt,也提供了dify的yml文件,一键导入DSL部署专属自己的工作流。
背景
接触ai比较晚,差不多从今年3月份开始,但仅仅过去半年,ai发展的势头之迅猛是肉眼可见且切身体会的。
目前已经进化成了一个ai的重度依赖患者,从知识检索到代码编写,从完成业务代码到项目架构设计优化等等都与ai
进行了大量的交流。
慢慢地使用一些ai ide
后,一次次的修改提示词到一次次的undo
、reject
,我意识到vibe coding
中,好的提示词是至关重要的。
甚至于,我觉得 Prompt 越来越像新时代的编程语言,它正在颠覆着人类的编码格式。
而一份好的Prompt
的生成范式,它的作用是不仅局限于此的,譬如一开始提到的简历警察。
chatAI中与ai交流常见坑点:
用户输入的错误定位
-
误认为新的Prompt
-
当我们输入一段提示词,我们的需求是借助ai对提示词进行优化时,llm可能会将其误判为我们的需求内容
-
解决:
-
添加标注、分块等方式
-
添加标注:注明以下是提示词内容
-
使用 ------ 等分隔符进行合理的分块,让llm能够更好更准确的拆解提示词、明确需求
-
eg:
md## 提示词内容 ... ------------- 上面是一份关于xxxxx的提示词,我希望你以一个专业的xxx身份,帮我分析解读,指出其中不足,并给出一份高效、精准、简洁的优化版本,以便于我能够借助它更精准高效的与ai进行交流
-
-
-
误认为反馈指令
-
同一次上下文中多次输入
-
llm可能误判你是基于前一次结果的要求,当然也确实会有这种的真实需求
-
解决:
- 添加引号包裹,"押韵"
- 开启新的上下文对话
-
-
随机输出
-
当一个概念在多个领域中,存在重名、相近的定义时,如果用户不限定领域,就会出现赛马机制,随机输出最快匹配到的结果
-
解决:
- 限定领域,eg:class -> js中的class
-

ai的可能性
我们能和llm聊的东西有很多,玩法也有很多。
当我们和llm交流时,产出结果质量与输入往往成正相关,那么如何让ai更像一个人、一个专家一样精准的理解我们的需求,给出可行、高效的解决方案呢?
核心:设定角色
将ai当作人去交流,影响人和人之间交流的因素有很多:背景、身份、情景、压力等等。
eg:假定你是xxx中的一位xxx,你的老板对你要求很严苛,做不好就要开除你。他让你写一份关于xxx的方案,需要你完成前期调研、寻找解决方法、分析评估可行性、制定一份精准、可行的方案。
规范流程
-
有条不紊的提问结构 - 结构化 Prompt
-
约定规范的输出
- 输出的内容
- 输出的格式规范
结构化 Prompt
像写作文一样去写Prompt,一篇文章要有标题、开头、主题、结尾等等; 找工作修改简历需要一份简历模板; 做工作汇报需要一份ppt模板。
写一个好的Prompt同样需要,一份好的Prompt结构设计,有利于我们清晰的需求表达,也有利于更好的结果输出。
逻辑上的结构化
eg:知名的 CRISPE 框架([3]),CRISPE 分别代表以下含义:
- CR:Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。
- I:Insight(洞察力),背景信息和上下文(坦率说来我觉得用 Context 更好)。
- S:Statement(指令),你希望 ChatGPT 做什么。
- P:Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。
- E:Experiment(尝试),要求 ChatGPT 为你提供多个答案。
结构化、模板化 Prompt
-
标识符 :
#
,<>
等符号(-
,[]
也是),这两个符号依次标识标题
,变量
,控制内容层级,用于标识层次结构。 -
属性词 :
Role
,Profile
,Initialization
等等,属性词包含语义,是对模块下内容的总结和提示,用于标识语义结构。
简历警察(示例):Prompt太长就不贴出来了,大家感兴趣的话,可以移步github自行下载食用。
ChatAgent
的信息接收是没有样式的,使用json、yaml等标记语言效果最佳,因为它们能够更好的被序列化从而更好的被ai理解,但使用成本偏高。
相比之下markdown
的语法更加友好,最大程度的允许我们使用自然语言进行需求描述,同时模型正是从提供大量文献阅读的前期训练中而获得的能力,这也更加印证了它对结构化prompt
解析的支撑性。
例如: 用标识符
#
标识一级标题,##
标识二级标题,以此类推。
示例结构:
-
Role (角色)
作为 Prompt 标题总领全局篇容。- 角色扮演能大大提高模型表现,使用
#
一级标题从而加重强调
- 角色扮演能大大提高模型表现,使用
-
Profile (简介)
、Rules(规则)
作为二级标题声明背景、前提,规定了模型必须尽力去遵守的规则。- 比如添加不准胡说八道的规则,缓解大模型幻觉问题。添加输出内容必须积极健康的规则,缓解模型输出不良内容等。用
Constraints
(约束),中文的规则
等词替代也可
- 比如添加不准胡说八道的规则,缓解大模型幻觉问题。添加输出内容必须积极健康的规则,缓解模型输出不良内容等。用
-
Language
、Description
作为关键词建立提示词的情景限定。
优势:
- 结构丰富,表达性好,无论对人还是ai都更易于理解及复刻
- 标识符标识的层级结构实现了聚拢相同语义,梳理语义的作用,降低了模型对 Prompt 的理解难度
- 属性词实现了对 prompt 内容的语义提示和归纳作用,缓解了 Prompt 中不当内容的干扰
- Prompt 作为一种文本,也完全可以使用 Git 等工具像管理代码一样对 prompt 进行版本管理。
如何创建一份结构化、模板化 Prompt
LangGPT
中展示的模板设计时考虑了如下思维链:
Role (角色) -> Profile(角色简介)---> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用
方式一:借助模型进行优化
- 月之暗面 Kimi × LangGPT 提示词专家: kimi.moonshot.cn/kimiplus/co...
- OpenAI 商店 LangGPT 提示词专家:chatgpt.com/g/g-Apzuyla...
方式二:自行优化
1、构建 Prompt 时,不妨参考优质模板的全局思维链路(划到最后有模板),熟练掌握后,可以对其进行增删改留调整得到一个适合自己使用的模板。
例如当你需要控制输出格式,尤其是需要格式化输出时,完全可以增加 Output
或者 OutputFormat
这样的模块。
注意:
格式语义一致性:eg:# 只用于
role
的指定内容语义一致性:合适的属性词语义,有利于llm的理解,eg:
Role(扮演的角色)
**、**Profile (简介)
Role
中只概述领域、角色,而不介绍规则;Profile (简介)
只概述角色技能、背景;Rules(规则)
只介绍规则,而不接受角色定位、角色技能、描述。
2、结合具体方法论
3、降低结构复杂度
、调整属性词
、迭代修改 Prompt
不同模型能力不同,对不同结构复杂度的Prompt
的理解理解能力不同。