提示词是一个小白最容易上手大模型的方式,提示词就是你告诉大模型应该如何去完成一项工作的系统性的命令,所以写一个好的提示词是比较关键的,那么如何写好一个提示词呢?
要写好提示词,其实就像我们要把一些命令清晰地传达出来,大家想象我们在职场中要交给别人一个任务的时候,比如让分析师去分析下数据,我们一般是不是要告诉这个分析师对应的工作任务是什么,然后有哪些对应的业务的背景信息,这个分析的样例之前有没有呢,这个任务完成后给你的交付物应该是什么,是ppt还是一个word或者一个表格就行了呢?
1.1: 提示词框架
一个任务去如何完成是上述的一个步骤,所以我们去写提示词的时候也是遵循一个大体的框架,就是如下几步:
1: 设定好角色
2: 确定好任务目标
3: 描述清晰背景
4: 给定些样例
5:明确输出格式
当然,这个对应的提示词可能我们自己写起来比较麻烦,有的时候我们只需要确定好任务目标后,使用些现成的提示词工具去扩展,然后改写下就行,比如Kimi和阿里云百炼的提示词优化工具;
1.2: 提示词模版
有了上述的对应的框架,我们自己就可以构建对应的提示词了,但是如果我们自己想让我们的应用去回答用户的问题,肯定不能让用户自己去写对应的提示词,那么这个对应的提示词的一些内嵌的信息我们自己要规定好,把客户的问题透出去让客户自己写就行,所以我们自己可以先规定一个提示词模版,如下所示:
构建提示词模板
prompt_template_string = ("你是公司的客服小蜜,你需要简明扼要的回答用户的问题""【注意事项】:\n""1. 依据上下文信息来回答用户问题。\n""2. 你只需要回答用户的问题,不要输出其他信息\n""以下是参考信息。" "---------------------\n" "{context_str}\n" "---------------------\n" "问题:{query_str}\n。""回答:"
) rag.update_prompt_template(query_engine,prompt_template_string)
1.3: 如何构建高效的提示词
1.3.1: 清晰表达需求,并且使用分隔符 ,这个可以让大模型更加清晰的明白任务是什么,并且使用分隔符可以帮它明白对应的背景信息和输入是什么,有什么具体要求1.3.2: 指定对应的角色和受众,说白了这个就是让大模型知道它是谁,它在为谁工作1.3.3: 提供少量样本,对于一些专业领域的东西,可能大模型还不是很精通,所以可以提供少量样本让他学习下,以便可以让他在这个对应的领域更加精通点1.3.4: 指定好输出格式,毕竟我们在编写程序应用的时候,结构化的输出格式能更好的让我们去分析数据1.3.5: 给模型一些思考的时间,这样可以让模型的回答更加完善,毕竟我们自己去经过对应的比较长的思考对于问题的回答会更加好嘛
所以一个比较好的示例如下:
question_task= """
【任务要求】
请根据用户的主题,结合下面【样例】给的例子,理解和使用一致的风格和结构继续创作内容,不要输出多余的内容。
---
【输出要求】
最终输出需要以Markdown格式呈现,请注意,在你的回答中包含所有必要的Markdown元素,如标题、列表、链接、图片引用、加粗等,以便于阅读、后续编辑和保存。
---
【样例】
### 示例1: 制作简易书签
# 简易书签制作教程## 材料清单
- 彩色卡纸
- 剪刀
- 装饰贴纸
- 铅笔## 步骤
1. 选择一张彩色卡纸。
2. 用铅笔在卡纸上画出一个长方形,尺寸约为2英寸 x 6英寸。
3. 沿着铅笔线剪下长方形。
4. 使用装饰贴纸对书签进行个性化装饰。
5. 完成!现在你有了一个独一无二的书签。## 结束语
希望这个教程能帮助你制作出满意的书签!---
【用户输入】
以下是用户的要求创作的主题:
"""
question_doc = "制作手工贺卡"question = question_task + question_doc
ask_llm(question, query_engine)
1.4: 如何让提示词进行意图识别
按照上面的步骤我们设计好了对应的提示词后,如果问大模型一个问题,然后大模型答非所问,比如下面这种情况,你让大模型去审查句子,但是由于它的召回文本挺多相关性内容,导致大模型回答错误,
所以有的时候我们可以决定用不用rag应用,这就要在前面做个判断,进行下意图识别,如果是正常的就让大模型正常回答,如果涉及到专业领域就让rag回答,所以对应的提示词就需要更改下,让提示词帮忙进行意图识别
1.5: 当提示词遇见了推理模型怎么办
在DeepSeek出现之前,很多时候我们在编写提示词的时候是需要思维链(COT)的,什么意思呢?就是说我们想让模型回答的更精确,我们是需要告诉模型该如何一步步去思考一个问题,然后把对应的答案给到我们,让模型思考的慢一点,这样就可以给到我们相应的解决方案,如下所示:
但是DeepSeek出现了之后,相信大家都知道Deepseek基本上已经内嵌了思维链,所以我们就不需要去写cot了,这样反而会干扰对应的推理模型,导致它的思考出现了偏差,反而给出的答案不严谨
综上所述,当推理大模型出现了之后可能我们不需要写那么详细的提示词,但是提示词还是需要写的,而且在写提示词的时候最关键的一点是要明白,我们一定要清晰地明白一个点:清晰有效的任务目标是很重要的,提供丰富且有效的背景信息