原创作品,首发于《AI 科技大本营》:https://mp.weixin.qq.com/s/cXh8r9qsJ5AUtuZOTlJzfA
作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《系统掌握大语言模型提示词 - 从理论到实践》 作者、《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
热门专栏推荐:
热门文章推荐:
一、前言
曾经有一批强大的 AI 模型摆在我面前,我却未曾珍惜,知道发现别人能够轻松驾驭它发挥巨大价值,才后悔莫及,如果上天给我重来一次的机会,我会努力学习经验和技巧,成为第一批熟练驾驭 AI 模型的人!
随着 ChatGPT 的问世,各行各业深受震撼,国内外各种新的大模型也如雨后春笋般相继出现。
一些对机遇反应迅速的人已经开始将 AI 运用到学习和工作中,甚至已经开始借助 AI 赚钱了。
目前市场上的 AI 模型众多,包括国外的 ChatGPT、Claude、Bard 等,国内的文心一言、通义千问、讯飞星火大模型等。现阶段不是缺少 AI 工具,而是缺乏使用这些工具的经验。多人由于缺乏经验,用了几次大模型后发现回答不符合预期就感到失望弃之不用,这非常可惜。其实不同的模型之间能力有差异,但是相同的模型不同人用起来效果也会相差很大,这里的关键在于提示词技巧和使用和业务接入过程中遇到的常见问题是否有好的办法去解决。
虽然现在已经进入 AI 时代,已经可以用自然语言和模型交互,但对提示词的要求还是有点高,在 AI 工具发展的相对早期,很多问题还没有完全解决,很多功能还不完善。在我看来,现在大多数人使用大模型存在两类主要问题,一类是提示词写的不够好,导致回答不满意;一类是大模型的使用和接入经验不足,很多常见问题不知道该如何解决。
提示词掌握不好,可能会遇到下面的困惑:
- 大模型的回答总是简略、空洞和机械,怎么办?
- 大模型的回答总是不能够按照自己想要的格式输出,怎么办?
- 大模型的回答总是不够完善,怎么办?
大模型使用技巧掌握不足,可能会遇到下面的困惑:
- 优化了很多版本提示词,答案总不满意,怎么办?
- 想在公司里使用 ChatGPT ,但是又担心数据泄露,怎么办?
- 和 AI 多轮对话之后, AI 似乎忘记了自己的任务是什么,怎么办?
- 问 AI 问题,但又担心它“说假话”,怎么办?
- 每次都要输入相似的提示词,嫌麻烦,怎么办?
- 收费模型有次数限制(如 GPT-4),如何让它发挥更大作用?
业务接入大模型的经验不足,可能会遇到下面的问题:
- 认为大模型是万能的,啥功能都想用大模型来解决,结果事倍功半。
- 刚开始调通模型就匆忙上线,导致效果不理想,用户流失。
- 构造人工标注太耗费时间。
- 算法工程师不足,开发人员自己训练模型,做了很多优化效果都不理想。
如果你也遇到上述问题,那么本文将对你有所帮助。接下来我将主要介绍如何通过精准的提示词技巧获得想要的答案,以及在使用大模型使用和接入的过程中遇到的常见问题该如何解决。
二、经验
2.1 提示词经验
很多人试用几次大模型,得不到想要的答案,顿感失望然后弃之不用。其实多半是自己的提示词写的不够好导致的。
网上的提示词教程五花八门,要么不成体系,要么过于复杂。接下来将用相对接地气的方式,谈谈提示词的标准、提示词该如何写效果更好。
2.1.1 提示词的标准和原则
在我看来,一个粗略而简单的标准就是:你身边的人是否能够轻松听懂。
如果你写一个提示词,还需要别人再问你好几个问题才能真正明白什么意思,那么这个提示词就不是好的提示词。
好的提示词应该遵循清晰具体,重点突出,充分详尽的原则。在提示词中给出他回答问题所需要的主要信息,并且清楚具体地告诉它要做什么事情。
2.2.2 提示词公式
对于相对简单、通用的任务,由于模型对这类任务通常比较擅长,一般遵循前面所讲的原则直接写提示词即可。
示例 1:
请根据 XXX 起 5 个有吸引力的标题
示例 2:
请帮我找出下面段落中的错别字,段落内容为:XXX。
示例 3:
请给我一个 Java 语言实现策略设计模式的示例代码。
对于相对复杂、专用的任务,可以参考下面的公式:立角色 + 说问题 + 定目标 + 给示例 + 加背景+ 补要求,往往可以得到更好的回答。实际使用过程中并非这四项都要有,可以根据实际情况进行灵活组合。
示例:
我想让你充当我的导游(立角色),我计划从青岛出发去杭州旅游,预算是 10000 元,总共 2 个人,行程 3 天,请给我出一份攻略(说问题,定目标)。注意行程不要安排过于紧凑,不想去网红打卡点,想去有文化底蕴的景点,另外推荐景点时,请附上景点的价格,不去太高档的餐厅吃饭(补要求)。
2.1.3 提示词技巧
提示词的技巧有很多,这里给出一些自己实践过的非常有用的一些经验,更多进阶技巧大家可以再网上搜索更多资料进一步学习。
加分隔符帮助模型区分不同的区块
如果提示词包含多个部分,为了更好地区分开来,可以使用分隔符。如使用三个反引号将命令和待处理的段落分开。
示例 :
执行下面的步骤:
1 将下面由三个引号分隔的文本总结为一句话。
2 将总结翻译成英文
3 统计英文中的每个字母的数量
4 参考三个#分割的文本格式进行输出
“”“{text}”“”
###{“a”:1,“b”:2}###
通过加限定词提要求规范模型的输出
如果 AI 模型输出的风格不符合你的要求,可以通过设置口吻、说明面向的人群等,让大模型按照你的意图来回答问题。如果 AI 模型输出的内容存在 Bad Case,你可以通过强势的情态副词对结果进行干预,如“一定要”,“一定不要”,“必须”、“不许”、“应该”等。身边就有朋友反馈用 AI 写出的内容有“机器味道”,采用了通过设置口吻和设定要求等优化提示词后,写出的内容让他非常满意。
示例 1:
你是一位知名儿童文学作家,请使用亲和力的口吻,帮我写一篇面向幼儿园儿童的,能够体现亲情重要性的故事。
要求:
1 文章内容需要涉及至少两个动物。
2 文章内容要具有想象力。
3 文章内容需积极向上,绝不能出现血腥、暴力的内容。
4 …
说明:提示词中讲口吻、面向人群和具体要求给出到模型,更容易写出让你满意的故事。在提示词中通过“绝不能”的限定,模型构造故事时会刻意避免。
示例 2:
请使用 PlantUML 的语法,帮我生成一个时序图。
时序的对象包括:A、B、C。时序如下:XXX
说明:如果不交代时序对象,模型提取的对象可能和你想的有偏差,而提示词中直接将时序对象交代给 AI 模型,更容易绘制出让你满意的时序图。
示例3:
执行下面的步骤:
1 将下面由三个引号分隔的文本总结为一句话。
2 将总结翻译成英文
3 统计英文中的每个字母的数量
4 参考三个#分割的文本格式进行输出
5 不需要输出中间过程,只需要参考三个#分割的文本格式输出最终结果即可(一定不要输出开头和结尾分隔符#)
“”“{text}”“”
###{“a”:1,“b”:2}###
说明:如果不加上 “一定不要输出开头和结尾的分隔符#”,有些模型会输出结果时前后带上三个 #,通过限定可以完美解决这个问题。
提供参考示例让模型更好理解你的意图
在提示词中给出一些示例,有助于大模型更好地理解你的意图,回答出更符合你要求的答案。
示例 1:
请你充当标题优化助手,我将给你发送一个主题,请从下面的原则中选择最适合的一个原则,给出 5 个参考标题。
好的文章标题遵循三个原则:
(1)数字法则。如“写文章的 5 种技巧”、“工作 5 年,我学到了这 10 点”、“3 种姿势帮你做出精美简历”。(2)给出结论和价值。如“重构的必要性和方法”、“关于软件复杂度的思考”、“工程师也要有产品思维”。
(3)激发好奇心。如“DDD 最短学习路径”、“原来设计模式还可以这么用”、“ 99% 程序员理解错了字符串的可变性”、“不写代码,程序员最重要的技能”。
主题: XXX
示例 2:
请帮我写一个正则表达式,匹配的规则如下:数字或下划线#some.com,并且不能以下划线开头。
正确示例: 123#some.com 、 123_#some.com、1_23#some.com
错误示例:_123#some.com、12ac#some.com
示例 3:
你是一个知名互联网论坛的编辑,请帮我校对一篇专业博文,请指出其中的专业术语错误、拗口的句子等,并给出修改建议。
参考输出格式见三个引号分隔的部分:
“”"
第1处
原文: 在软件开发流程中代码审校非常重要,能够帮助程序员提前发现问题。
原因:“代码审校”专业术语错误,应该是“代码审查”
修改: 在软件开发流程中代码审校非常重要,能够帮助程序员提前发现问题。
第2处
原文: 使用命令 dune init project my_compiler 创建新项目。
原因:此句中对命令的描述不够通顺,建议增加“来”字来连接动作与目的。
修改: 使用命令 dune init project my_compiler 来创建新项目。
“”"
思维链 (Chain-of-Thought,CoT)
人们解决复杂问题时,通常会将其分为一些中间的步骤逐步解决,最终得到答案。思维链就是参考人类的解决办法,思维链提示词模式包括输入问题、思维链和输出结论。让模型可以学习这种推理过程,从而提高大模型在复杂推理时的准确率。
(图片来源:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 》论文)
2.2 模型使用过程中常见问题和解决办法
2.2.1 想使用外部大模型,又担心业务数据泄露
很多人想在公司里使用 AI 工具,但对业务数据泄露持有顾虑。
如果你在大厂,可以考虑公司内部自研的合规模型。也可以选择公司代理(会进行安全过滤)的外国 AI 模型。
如果想直接使用 ChatGPT 、Bard 之类的外国大语言模型试试效果,可以将数据先脱敏、构造 mock 数据或者尝试将遇到的问题转成一个通用的问题来提问即可,得到靠谱的方案或代码再移植到公司内部。
2.2.2 自定义提示词来提高 AI 模型的提问效率
现在 AI 很智能,但是 AI 产品并不智能。 ChatGPT 官方聊天页面只有一个输入框,似乎秉承着 “Simple is Better” 的理念,但很多时候并非越简单越好,使用 ChatGPT 经常需要输入相似的提示词,用起来效率极低。
下面将从四个方面简要解释如何通过预定义提示词提高输入效率。
单平台层面,如果你使用 ChatGPT 官网,推荐 ChatGPT Prompt Plus 插件,支持自定义提示词,可以快速呼出,还支持提示词中定义变量,支持为提示词分组,在呼出提示词时选择或者填写即可进行提问,非常方便。
下图就是通过该插件预定了 “解释某句” 的界面,可以将需要填写的内容定义为变量,使用时呼出后填充即可。
直接通过 “/解释某句” 即可呼出,不需要每次都输入重复的提示词,每次只需要必要的内容,如这里的内容和问题即可自动拼接好提示词发送给 ChatGPT 进行提问。
如果你使用 Poe 平台,可以在平台上预定义机器人,具体方法和上面大同小异,感兴趣可以自行研究。
浏览器层面,可以通过安装 ChatGPT Sidebar 这类的 AI 插件,可以在页面上选择一段内容后,直接选择内置或预定义的提示词进行处理即可。
在输入法层面,可以通过自定义短语设置,来预先定义提示词,输入内容时,可以通过输入缩写自动填充提示词。
在通用方法层面,你可以利用 Alfred 的 Snippets 功能(支持将剪切板内容作为变量自动替换预定义提示词中的占位符)或者 utools 的备忘功能,来预定义并快速粘贴提示词。
2.2.3 提示词怎么优化都得不到想要的答案
在使用 AI 工具时,如果回答不满意,可以检查自己的提示词是否真正符合“清晰具体、重点突出和充分详尽”的原则。
如果调整优化提示词还是得不到想要的答案,可以尝试通过下面的方法解决。
有时候你以为你表达很清楚,其实模型理解和你的表达有偏差,你可以尝试让模型重述你的任务,你可以根据他的重述发现偏差,对提示词进行针对性纠正。
对于提示词并不是很复杂,但是模型似乎不能很好理解你的意图的情况,可以考虑使用英文提问,有时候会有奇效。这可能与模型的语料中英文占比更多,模型更擅长英语有关,也可能是中文提问优先匹配中文语料,但是中文语料质量不高原因导致的。之前就遇到过一个技术问题,用中文对 New Bing 提问很多次都没得到想要的答案,换成英文提问,一次就得到了靠谱的答案的情况。大家如果英文不好,也可以采用“套娃”的方法,如让 ChatGPT 帮你翻译成英文提示词再对 ChatGPT 进行提问。
如果模型理解无误,使用英文提问也没有效果,建议换更高级的模型。在我看来不同的模型就像不同层次的学生,比如有些模型可能是中学生水平,有些模型可能是高中生水平,有些模型则相当于大学生甚至研究生水平。而且不同的模型的擅长之处也有所不同。因此当提示词已经写得很好,但模型回答并不满意时,有条件可以考虑切换到更强大的模型。在我的实际中,能够明显的感觉到 GPT-4 在大多数任务上都会比 GPT-3.5 回答更好,未来或许还会出现更强大的模型。有些涉及到时效性的问题,优先使用支持联网的大模型。比如有些朋友问某个类库是否支持某个功能, GPT-3.5 知识库在 21年9月,很可能不支持,可以使用 New Bing 或 Bard 等支持联网的大模型。
当使用更高级模型也得不到满意的答案,说明当前任务对大模型来说过于复杂,此时可以考虑任务分解。对于复杂任务,建议大家先进行拆解,拆解到模型比较容易完成的步骤,然后每个步骤让模型去完成,往往效果更好。比如你想让模型写出一个类,可以拆解成不同的函数,然后每个函数让模型去写。
当尝试上述方法还是效果不满意时,可以尝试任务接力。所谓“任务接力”是指,将任务拆解后分步骤让** AI 分步完成或者人与 AI 分工合作完成**。比如写代码,你可以开一个对话窗让 AI 写代码,用另外一个对话框让 AI 去找出其中的问题,再让 AI 工具优化代码。比如写稿件,你可以让 AI 写目录供自己参考,也可以让 AI 写草稿自己优化或者你自己直接写稿子,最终再让 AI 去润色。这样复杂任务通过每个步骤拆解成 AI 比较容易完成的粒度或者通过将简单重复的任务分配给 AI ,将复杂 AI不擅长的部分分配给人,可以实现更好地效果。
2.2.4 上下文丢失问题
在使用 AI 工具过程中,经过多轮对话之后,你可能会发现模型已经忘了最初的任务是什么。
对于这种情况,最简单的处理办法就是重新开一个对话窗口,重新表述问题,继续处理后面的材料。
如果步骤特别多,需要重新开太多对话非常麻烦,可以尝试下面的方法。
前面讲到模型重述任务有助于检查模型是否真正理解任务,在我看来对上下文丢失的问题也有帮助,如果你的任务需要多轮对话才可以完成,可以尝试没隔几轮对话问 AI 任务是什么,通过提醒可以降低“遗忘”的概率。
我在实践过程中经常使用“简述任务”这一方法。例如,当需要让模型概括每个段落的重点时,我会在第一个提示词中详细写明要求。然后,在第二轮发送段落前,我都会重述或简述这个要求。这样即使模型忘记了最初的任务,也能根据第二轮之后的简述完成任务。如“请按照我最初的要求,继续提取下面段落重点发送给我。段落内容: XXX”。
如果模型确认或者简述任务方法还不能解决问题,侧面说明这个任务可能对于模型来说有些复杂了,建议可以将任务进一步拆解,让每一个 Chat 界面只做其中的一个步骤或者有些步骤让 AI 来做,有些步骤让人来完成。
2.2.5 回答可靠性问题
很多人用大模型时偶尔会碰到明明回答错误,但是大模型回答的却很有自信的情况,很容易被大模型所“唬住”。
建议对于自己拿不太准的问题可以问多个不同的模型,他们答案之间相互印证,降低都“胡说”的概率。
有时,对于相对严谨的内容,可以将 AI 的回答仅作为基本参考,并需结合传统的研究方式,如使用搜索引擎、查阅论文和其他资料等。
最关键的还是自己要具备辨识能力。因为即使不是 AI 时代,你让其他人帮你准备材料,如果你没有足够的辨识度,也很容易出现问题。虽然 AI 能够提高我们的效率,但是我们比以往更需要提高专业素养,提高对信息真伪的辨识能力。
2.2.6 如何更好发收费模型的价值
以 ChatGPT 为例, GPT-3.5 目前免费使用, GPT-4 则需要开通 Plus 服务,而且还有每 3 小时 50 个 message 的限制(未来有可能进一步提高,甚至完全放开)。在 Poe 平台上,ChatGPT 和 Claude 也分为免费版和收费版本,收费版也有次数限制。
很多简单的任务免费的模型就可以做的很好,优先可以使用免费模型进行处理。对于复杂的任务,可以安排给收费模型进行处理。
在使用收费模型时,可以将多个步骤合并成一个提示词,节省收费模型的调用次数。
可以使用免费模型产出草稿版本,然后让收费的高级模型进行二次优化,这也是一个不错的选择。
2.2.7 业务接入大模型经验
现在很多公司开始自研大模型,很多业务也开始接入大模型,下面谈谈业务接入大模型的一些经验,掌握这些经验可以让你少走一些弯路。
大模型不是万能的,我们不应该“为了使用 AI 而使用 AI”。就像汽车虽然方便快捷,但不是在所有情况下都是最佳选择。在实践过程中,我们发现某些任务通过工程化方式解决效果更佳且成本更低。因此,在接入大模型时,我们需要权衡哪些任务适合工程化解决,哪些任务更适合用大模型来解决。
在正式接入模型之前,需要确定模型的效果评估标准,这样才可以发现模型的不足,针对性优化。我们还需要确定可进行工程化开发的前提,比如生成的代码采纳率在 50%,生成的段落达到 80 分以上等。如果我们过早进入工程化开发,产品可能上线后长时间达不到预期标准,甚至可能永远无法达成,从而导致产品可用性较差,并浪费大量资源。
有些复杂任务需要对模型进行微调,需要大量的人工标注,以及评估模型效果工作。为了提高效率,建议大家可以自己编写脚本,或借助 AI 模型进行辅助,实现自动化或半自动化的流程。
在将 AI 模型落地到业务的过程中,开发人员虽然熟悉业务,但可能不了解模型优化的方法;算法人员虽然更专业,却可能对业务不够了解。因此,想要不断优化大模型的效果,就需要开发同学和算法同学通力合作。而且由于有些公司大模型团队的算法人员紧缺,很多业务又想尽早上线,有些开发人员也开始亲自训练大模型。但缺乏专业指导可能会导致许多优化思路不科学,从而会走许多弯路。因此,建议大家在考虑将业务加入 AI 能力,让 AI 为业务提效时,增加算法同学的投入,让算法和开发同学通力合作,更好地解决问题。
三、总结
或许,提示词只是大语言模型发展早期阶段的一种折中方案。可以类比为汽车的发展,从手动挡逐渐演化到辅助驾驶和自动驾驶,未来我们和大模型的交互可能也会采用更先进的方式,如脑电波、意念等。
虽然 ChatGPT 的出现让人眼前一亮,但是大语言模型还存在很多其他待解决的问题,现在还需要我们去迁就它。
不过,在我看来,这却是一件值得庆幸的事情。正是因为 AI 的不完美,我们才没那么容易失业。
在 AI 发展的当前阶段,我认为最重要的是学好提示词,掌握 AI 工具的最佳实践,才能成为最早一批灵活驾驭大模型来更好解决你生活和工作问题的人,才能在 AI 时代的早期取得一些竞争优势。希望本文提供的一些经验能够让大家少走一些弯路。
你在 AI 工具使用中还有哪些经验?你对当前大语言模型的发展有啥看法?欢迎大家在评论区进行评论补充和讨论。
创作不易,如果本文对你有帮助,欢迎点赞、收藏加关注,你的支持和鼓励,是我创作的最大动力。
欢迎加入我的知识星球,知识星球ID:15165241 (已经经营 3年多)一起交流学习。
https://t.zsxq.com/Z3bAiea 申请时标注来自CSDN。