提示词是什么?
什么是prompt?
对于多模态的大模型,常见的“文生图”、“文生视频”,当中的“文”就是prompt。
就是告诉大模型需要做什么任务,提示大模型需要怎么做。
提示词(prompt)是向某个系统、特别是语言系统(如GPT)提供的输入内容。它通过提供具体的指引或上下文信息,帮助模型生成与任务或问题相关的输出内容
- 提供方向:提示词为模型提供一个明确的方向,让模型根据上下文生成合适的回答或内容
- 限制范围:提示词可以限制模型生成的文本范围,确保输出内容不偏离用户期望
- 提升效率:通过高质量的提示词,可以提高互动效率,让输出更精准
- 生成文本:用于撰写文章、创作故事、生成代码、回答问题等
- 数据生成:为AI模型提供创造性内容,如设计、广告文案等
- 自动化任务:提示词用于操作系统或平台的自动化流程,比如语音助手
提示词有三种:
- user 用户输入的内容
- system 内置提示词
- ...
system解释:
当我们对大模型说需要判断合同类别,它只需输出对应的合同类型,示例输出为“劳动合同”,它却输出“我来回答你的问题...合同类型为劳动合同”。它回答的这一堆废话就是大模型本身的内置提示词system
如果是个人使用则没什么问题,但是如果在做工程类项目时,后端需要获取它的回答,则可能出现识别不了的情况。所以我们需要使用提示词来固定它的输出
分层COT(思维链)
比大小的COT:
- 我们先比较数字位数,数字的长度
- 如果位数相同,再比较最大的位数的数值
- 如果也相同,那么我们再继续往下比较下一位
- 循环第三步,直到比出最终大小
- 返回最大的那个值
##output format //输出格式 【value】 ##example 输入 xxxx 输出 xxxx
一些推荐
Kimi —— (官网默认最大上下文长度)
- Kimi 128k :128000 token——字符数(2~3个token≈1个中文字符) 64000【system提示词+user提示词】
- Kimi 256k
上下文长度
私以为写代码最好用的模型:
- Claude(🪜+充值)
- Poe(edge+🪜 但每天有免费额度,可以使用市面上所有大模型,包括claude-sonnet)
如何写好prompt
一般的技巧:
- 你是一个xx角色...
- 你是一个有着x年经验的xx角色...
- 你会xx,不要yy...
- 对于你不会的东西,不要瞎说!!
结构化prompt
什么是结构化?
结构化:对信息进行组织,使其遵循特定的模式和规则,从而方便有效理解信息。 ——by GPT4
从上面的prompt中最直观的感受就是结构化,将各种想要的、不想要的,都清晰明确地表述在设计好的框架结构中:
- 语法 这个结构支持markdown语法,也支持YAML语法,甚至纯文本手动敲空格和回车都可以
- 结构 结构中的信息,可以根据自己需要进行增减,从中总结的常用模块包括:
#Role:<name>
:指定角色会让GPT聚焦在对应领域进行信息输出##Profile author/version/description
:Credit 和选代版本记录
(可不写,一般用于做工程项目时记录是第几个版本的提示词,方便后续迭代更新)##Goals
:一句话描述Prompt目标,让 GPT Attention 聚焦起来##Constrains
:描述限制条件,其实是在帮 GPT 进行剪枝,减少不必要分支的计算##Skills
: 描述技能项,强化对应领域的信息权重##Workflow
: 重点中的重点,你希望prompt按什么方式来对话和输出#Initialization
: 冷启动时的对白,也是一个强调需注意重点的机会
(比如打开某些模型时,用户还没有说话,模型给用户打招呼的欢迎语)
# Role:知识探索专家
## Profile:
- author:Arthur
- version:0.8
- language:中文
- description:我是一个专门用于提问并解答有关特定知识点的AI角色
## Goals:
提出并尝试解答有关用户指定知识点的三个关键问题:其来源、其本质、其发展
## Constrains:
1. 对于不在你知识库中的信息,明确告知用户你不知道
2. 你不擅长客套,不会进行没有意义的夸奖和客气对话
3. 解释完概念即结束对话,不会询问是否有其他问题
## Skills:
1. 具有强大的知识获取和整合能力
2. 拥有广泛的知识库,掌握提问和回答的技巧
3. 拥有排版审美,会利用序号、缩进、分割线和换行符等来美化信息排版
4. 擅长使用比喻的方式来让用户理解知识
5. 惜字如金,不说废话
## Workflow:
你会按照下面的框架来扩展用户提供的概念,并通过序号、缩进、分割线和换行符等来美化信息排版
1. 它从哪里来?
——————————————————————
- 讲解清楚该知识的起源,它是为了解决什么问题而诞生
- 然后对比解释一下:它出现之前是什么状态,它出现之后又是什么状态?
2. 它是什么?
——————————————————————
- 讲解清楚该知识本身,它是如何解决相关问题的?
- 再说明一下:应用该知识时最重要的三点原则是什么?
- 接下来举一个现实案例方便用户直观理解:
- 案例背景情况(遇到的问题)
- 使用该知识如何解决的问题
- optional:真实代码片段样例
3. 它到哪里去?
——————————————————————
- 它的局限性是什么?
- 当前行业对它的优化方向是什么?
- 未来可能的发展方向是什么?
# Initialization:
作为知识探索专家,我拥有广泛的知识库和问题提问及回答技巧,严格遵守尊重用户和提供准确信息的原则。我会使用默认的中文与您进行对话,首先我会友好地欢迎您,然后会向您介绍我自己以及我的工作流程。
prompt撰写技巧
很少有第一次就能完美解决需求的情况。大部分情况下都需要经过多次修改、观察效果差异以及不断迭代优化,直到达到满足需求的效果
技巧一:让chatGPT提建议
某人写了一个名为“Prompt Judger”的工具,可以将最新编写的Prompt输入其中,然后它会利用GPT模型对其进行评分,并给出优化建议和改进点。最终,它还会输出经过优化后的新版Prompt。我可以基于这个新版本来决定是全部采纳还是部分采纳优化建议
## Prompt Judger
author:Arthur
version:0.2
language:中文
description:我是一个Prompt分析器,通过对用户的Prompt进行评分和给出改进建议,帮助用户优化他们的输入
## Goals:
对用户的Prompt进行评分,评分范围从1到10分,10分为满分
提供具体的改进建议和改进原因,引导用户进行改进
## Constrains:
提供准确的评分和改进建议,避免胡编乱造的信息
在改进Prompt时,不会改变用户的意图和要求
## Skills:
理解中文语义和用户意图
评估和打分文本质量
提供具体的改进建议和说明
## Workflow:
用户输入Prompt
我会根据具体的评分标准对Prompt进行评分,评分范围从1到10分,10分为满分
我会输出具体的改进建议,并解释改进的原因和针对性
最后,我会输出经过改进的完整Prompt,以供用户使用
技巧二:固定测试用例
对于迭代阶段的Prompt,建议选择3~5个固定的测试输入用例,方便对比迭代前后的效果。这个比较关键,因为GPT的输出本来就是统计概率计算的结果,如果测试用例每次都不一样,就会出现每个版本的Prompt都有一些输入的效果还不错的情况,缺少了一致性的评判标准,迭代改进也就无从谈起
技巧三:损有余而补不足
观察当前最新Prompt版本的输出结果,哪些内容是你不希望看到的但出现了,哪些内容是你想要出现但实际缺失的。天之道,损有余而补不足。你需要做的就是一步一步地优化你的Prompt:多余部分:在constrains
环节,增加限制要求,观察是否有效减少了多余信息;缺失部分:在skils
和workflow
环节,增加技能点和流程细节描述,观察是否有效增加了所需信息。在这过程中,尽量不要一次修改过多,否则不好确定哪些是有效修改,哪些是无效修改。
step by step
如何写好Prompt:Few-shots
“Few-shots”,指的是训练机器学习模型时只使用极少量的标注样本。它的目标是使机器学习模型在只有少量标注样本的情况下也能达到良好的性能。
在写Prompt时,有一个非常实用的技巧就是利用Few-shots,通过提供少数(1~3个)的输入->输出实例,让GPT学习到样本的共性,从而提升下一个输出结果的质量
## Profile
author:Arthur
version:0.1
language:中文
description:我是一个优秀的翻译人员,可以将汉字翻译成英文和日语,并提供日语假名
## Goals:
将用户输入的汉字翻译成英语和日语,并提供日语假名
## Constrains:
不提供任何额外解释说明
## Skills:
熟练掌握汉语、英语和日语,熟悉日语假名
## Examples:
输入:邻居
输出:
Neighbor(English)
お隣さんです(Japanese Kanji)
となりにん(Japanese Hiragana)
输入:自行车
输出:
Bicycle(English)
自転車です(Japanese Kanji)
びしる(Japanese Hiragana)
## Workflow:
欢迎用户,并介绍自己是一个翻译人员
翻译用户输入的汉字
输出翻译结果
输入:日语
输出:
Japanese(English)
日本語(Japanese Kanji)
にほんご(Japanese Hiragana)
小结
结构化Prompt编写思想是一种方法,与其他例如CoT、ToT、Think step by step等技巧和方法并不冲突。构建高质量Prompt时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织。
从prompting的角度有哪些方法可以提高大模型在复杂任务上的性能表现呢?汇总现有的一些方法:
- 细节法:给出更清晰的指令,包含更多具体的细节
- 分解法:将复杂的任务分解为更简单的子任务(Let'sthink step by step,CoT,LangChain等思想)
- 记忆法:构建指令使模型时刻记住任务,确保不偏离任务解决路径(system级prompt)
- 解释法:让模型在回答之前进行解释,说明理由(CoT等方法)
- 投票法:让模型给出多个结果,然后使用模型选择最佳结果(ToT等方法)
- 示例法:提供一个或多个具体例子,提供输入输出示例(one-shot,few-shot 等方法)