人工智能Prompt提示词编写方法新手扫盲全攻略

本攻略适合谁阅读?

  • 刚使用LLM的
  • 不会使用LLM高效率解决问题的
  • 上手LLM不知道怎么询问的

LLM(Large Language Model,大语言模型)是一种基于深度学习的自然语言处理模型,它通过大量的文本数据进行训练,能够理解和生成复杂的自然语言。

本攻略为面向新手的扫盲攻略,能够熟练问答的大佬可以直接PASS。当然,我也非常欢迎大佬在评论区对此攻略查漏补缺来完善此攻略

自然语言处理(NLP)是关键

在探讨如何编写高效的AI提示词之前,我们需要先了解AI是如何理解和处理人类语言的。这就要谈到NLP(自然语言处理)技术,它是AI处理人类语言的核心系统

当我们向AI提出问题时,NLP会执行一系列复杂的语言分析过程:

  1. 进行分词和词性分析,理解每个词的具体含义;
  2. 解析句子的语法结构,确定各个语言成分之间的关系;
  3. 分析语境和上下文信息,以准确把握说话人的真实意图。

举个例子,我向AI输入以下信息,并提交了两个附件作为上下文背景:

现在帮我实现一个功能。
现在BorrowBook.vue中,点击确定按钮不是会调用handleLendBooks方法吗?那么在handleLendBooks处理完成后,将页面倒计时改成10秒倒计时(无论之前倒计时到哪一秒)

NLP识别到有两个文件:BorrowBook.vue 和 requests 文件,并且他们的文件类型分别是TEXT和TEXT/JAVASCRIPT,由于提到了VUE,他就知道,哦!这是在讨论一个Vue项目的代码修改需求。修改位置在哪里呢?根据“那么在handleLendBooks处理完成后”,哦!修改位置是handleLendBooks方法内!

不仅如此,还会提取关键信息,比如“handleLendBooks方法”,对于NLP来说,这是一个核心方法名,因为需要达到的目标效果是“改成10秒倒计时”。另外,它还察觉到一个特殊条件,就是“无论之前倒计时到什么值,都重置为10秒”

通过这种多层次的分析过程,NLP能够将用户的自然语言描述转化为结构化的任务信息,从而帮助AI理解咱们的真实意图,并提供准确的技术解决方案。

摒弃传统网络搜索引擎的关键词问法

通过上一节的了解,我们能够知道现在的AI,或者说LLM,是通过NLP处理用户询问的。因此在使用LLM时,我们需要摒弃传统搜索引擎的关键词思维模式。

主要是因为,传统搜索引擎依赖关键词匹配,如上面我举得例子,使用关键词的话大概率要这么问:“Vue JS 点击Button 修改倒计时”。然而,这种问法放在AI中,回答是会完全脱离现在的问题背景,完全不能高效率解决当下的问题,如下图:

下面再来对比一下,不适用关键词问法的回答:

相比之下,使用简单的关键词组合导致回答偏离实际需求,降低问题解决的效率,完全没有结合我现在的问题背景去提供解决方案。

现代AI系统通过NLP,具备了理解完整语境的能力。因此,我们应该采用更自然、完整的表达方式,清晰地描述问题场景当前状态期望结果

这种表达方式能够让AI充分理解问题的上下文和具体需求,从而提供更精准的解决方案。通过提供完整的上下文描述,我们可以充分发挥大语言模型的语言理解能力,获得更高质量的答案,提升问题解决的效率。

结构化语言的提示词

什么是结构化?

结构化指的是,将信息按照特定的逻辑层次进行组织和排列的方式。就像建筑需要框架,结构化语言根据不同的场景也有其固定的组织模式,使信息更有条理、更容易理解和处理

比如

作文的文体结构:

  1. 议论文的结构
  • 提出论点(开篇点题)
  • 论证论点(具体论述)
  • 论据一
  • 论据二
  • 论据三
  • 总结升华(深化主题)
  1. 记叙文的结构
  • 开头(介绍背景)
  • 发展(情节推进)
  • 起因
  • 经过
  • 结果
  • 结尾(深化意义)

什么是结构化提示词?

在与AI交互时,结构化提示词是指以有组织、有逻辑的方式编写的指令。它让AI更容易理解用户的意图,从而提供更准确的回答。

比如,我上次询问的一个问题:

以下代码绘制出了一个图2这样的网格布局。
现在帮我实现一个需求,要求网格中的每一块都可以长按拖动调整位置。
细节点:

  1. 长按后,不需要实时跟随光标或者手指
  2. 长按拖动时,被调整位置的按钮可以直接跟拖动位置的按钮调整位置(拖动位置的按钮以及拖动位置之前的所有按钮都往前移动一格位置,为被拖动按钮腾出空间),但是不立即生效
  3. 长按拖动结束时(松开时),位置的改变开始生效
  • 提供了两个附件作为上下文背景
  • “以下代码绘制出了一个图2这样的网格布局。”表明我附件的内容是什么
  • “现在帮我实现一个需求,要求网格中的每一块都可以长按拖动调整位置。”开始步入我的需求内容要求达到什么目的
  • “细节点:”让AI注意到以下内容是要特别关注的,要求AI按照以下细节来解决我的需求

结构化提示词询问的优势

可以说结构化的提示词询问带来的优势非常多:

  • 提高响应准确度:结构化的问题能让AI更准确理解需求
  • 获得规范化输出:明确的格式要求能得到更有条理的答案
  • 便于后续处理:结构化的提示词更容易让NLP进行整理和分析
  • 减少歧义:清晰的层次结构能降低理解偏差

万金油人工智能结构化提示词框架

Po主说句实话,结构化语言提示词这个东西根据每个人情况不同,写法也大不一样。我这里只提供一个框架思路,只可意会。

  1. 问题背景:一定要阐述问题背景,提供上下文,否则NLP无法结合你的背景解决你目前遇到的问题(生活常识问答等除外)。比如,现在项目用的是什么框架,用的什么语言,如果用的LLM输入Token够长,甚至能直接贴代码。

  2. 想要解决的需求或者问题:详细阐述下你目前遇到了什么问题,遇到了什么异常。还是那句话,一定要结合第一步提供的上下文去阐述。另外,最好先自己去了解下这个问题产生的当前环境是什么样的。比如说我下面遇到的这个问题,页面中图片无法加载,我就自己先去获取这个问题更多的信息,打开控制台发现,div里面img的src标签不见了,我就可以把这个信息提供给AI去让他更精准的捕获Bug根源。

  3. (尝试过的方式):可选项,可以将自己已经尝试过的方式阐述给AI,这样就能让AI规避掉你已经尝试过的方法,提供更多方法给你,更高效率的解决问题。

  4. 想要达到的效果:也就是达到的目的,如上一节中我所描写的:“现在帮我实现一个需求,要求网格中的每一块都可以长按拖动调整位置。”,这里不多赘述。当然,目的写的越详细越好。

  5. (限制解决的方法):可选项,缩小AI的处理方法,避免AI放飞自我用现在没有用到的技术栈来解决问题,亦或者不想影响到其他内容来解决问题。比如不想影响 XX 的前提下解决,只用编写 JS 解决这个问题等等

  6. ……(根据实际情况来处理增加)

DLC

根据上下文优化提示词内容

ChatGPT和Claude等LLM都采用对话形式来处理用户询问,在同一个会话页面中可以包含多轮对话,那么这些对话都共享同一个上下文环境
这时候(除了首轮对话),如果我们想解决同一个问题背景的问题,就可以不用重复描述上一个对话中的背景,直接开始阐述我们的目的。
比如:
这是首轮对话的内容


后来我发现AI提供的解决方案有Bug,那么我可以这么问:

欸?!我直接说了“有一个大Bug”,没有提供任何背景信息,这是不是不符合我上面说的框架?此言差矣,由于我是在同一个上下文中进行的对话,所以这轮对话AI可以直接捕获已经产生的背景信息(即,首轮对话中我发出的提示词内容和AI回应的内容)来回答我后续的问题。换句话说,AI已经产生了记忆

避免上下文干扰

按照我上一节所说,也就需要避免不同背景的问题都写在同一个上下文中,可能会让AI产生不必要的误解(日常知识问答除外)

必要时添加额外描述

由于LLM自身的参数影响(比如温度等),可能会对所写的提示词(也就是人类语言)产生可能的歧义,对于可能产生歧义的地方最好加上额外的描述。
比如,我昨天问的一个问题:


这里我先说明下,问题中的文本框是:XXX 框框框框框框。也就是带标签的文本框。提示词中,我所写的是“input框要占满一整行”,这里我认为可能会产生歧义,让我们先看代码:

<el-form-item label="管理员密码" prop="adminPassword">
  <el-input
    v-model="loginForm.adminPassword"
    placeholder="请输入管理员密码"
    @focus="handleInputFocus('adminPassword')"
  ></el-input>
</el-form-item>

我担心input框的框子会占满一行,标签被AI处理在了框的上面,所以我在后面的括号内做了额外描述,让AI更准确的解决我遇到的问题。

有关写文章的提示词示例

就拿我当前正在写的文章为例,给大家做一个参考:

我现在正在编写一个,关于如何编写高效率处理问答的“Prompt”的博客文章,我计划首先让大家了解人工智能是使用NLP去处理任务的。那么我该如何去通俗易懂的解释什么是NLP,NLP是如何处理大家的询问的?
篇幅不要太长,150字以内就行。语气不要死板,稍微带点活泼的语气就行,但也要保持严谨的态度,因为这是一篇教学文章。

  • 主题一定要有:“关于如何编写高效率处理问答的“Prompt”的博客文章”。
  • 首先要写什么内容:“我计划首先让大家了解人工智能是使用NLP去处理任务的”
  • 这个首先要写的内容做一个分段,内容的第一段写什么:“解释什么是NLP”
  • 内容的第二段写什么呢:“NLP是如何处理大家的询问的”
  • 如何去写呢:“通俗易懂的”
  • 对这个要写的内容做一个限制:“篇幅不要太长,150字以内就行”
  • 做个性化处理:“语气不要死板,稍微带点活泼的语气就行,但也要保持严谨的态度”
  • 对内容做一个规范、做一个调整:“这是一篇教学文章”

可以看到,还是如我所说,一定要按照结构化提示词结构化提示词结构化提示词!来写,重要的事情说三遍!

结束

本文篇幅不长,内容均源自个人实践与思考。由于经验所限,难免存在疏漏或不准确之处,敬请谅解,欢迎各位大佬在评论区批评指正。希望大家都能善用科技的力量,让工作与生活更加便捷高效。同时也希望大家都能成为“提示词高手”。再次感谢各位阅读本文。

82 个赞

谢谢佬的分享

1 个赞

感谢分享。。。

谢谢佬的分享

1 个赞

其实就是引导的艺术。而引导的结果是你期望的结果(推理)。所以引导需要针对你期望的结果做出发散,将你想要知道的结果范围内所知道的和不知道的内容提交给模型推理。而引导的越精确推理结果就是越是想要的。但引导需要一个度,不要将过度的内容提交从而导致泛化的可能性降低。
而目前结构化的引导(提示词),只是为了让模型更好的理解引导的语义。

3 个赞

感谢大佬分享。

感谢分享,很有用.

1 个赞

感谢大佬的分享,真的有用

感谢分享。。。

感谢分享大佬厉害啊

感谢佬的分享

感谢OP,对初学者很有帮助,挺适合给学生们看的精华文章。

码字辛苦,先赞:+1:后看

感谢大佬分享

ChatGPT, Copilot, #职场添加

感谢大佬分享,马克一下

怎么防止后续发散呢