大模型参数
在介绍Prompt之前,我们先来了解大模型的两个参数:Temperature和Top_p
Temperature
模型输出的随机性参数。temperature 的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果。对于需要创造性回答的场合,更高的temperature有助于提高回答的创造性和多样性,而对于需要精准性的回答的场景,需要降低该参数以期获得精准的回答
Top_p
同用来控制模型返回结果的真实性的参数。如果你需要准确和事实的答案,就把参数值调低。如果你想要更多样化的答案,就把参数值调高一些。
Prompt工程
Prompt简介
大模型输出场景下,用于引导模型生成特定的输出。对比传统编程,使用代码来构建方法,使用编译器来解释,而对于AI场景来说,则是使用Prompt来构建方法,使用大模型来解释和执行代码。
一个优秀的prompt,通常包含几个部分
- 指令:模型需要执行的任务或指令
- 上下文:外部的知识库信息,历史对话等,帮助模型更好的输出结果
- 输入:用户本次输入的内容和问题
- 输出样式:需要模型提供的输出格式
另外,为了让模型更合理的输出结果,我们通常在Prompt中加入角色,让大模型以指定角色回答问题,以期获得更合理的回答效果
Prompt分类
目前Prompt有多种分类,包括零样本提示,少样本提示,链式思考CoT等,网上Prompt参考资料很多,这不一一细说了。可以参考: promptingguide
Prompt最佳实践
- 为AI提供一个角色
- 将重要指令放在开头,对于较长的输入,在结尾处可以再次补充提示以便强化模型输出
- 使用精准的要求而非模糊的要求,如“限制200字以内”来替代“简短的输出”
- 使用###或"""等来分隔各部分
- 对于复杂的任务,可以使用逐步思考等提示,让AI分部执行来完成
- 可以提供样例输入输出来帮助大模型更好的理解指令
- 谨防Prompt注入攻击
SK中的Prompt
prompt参数
在sk中,prompt参数使用 {{$argName}}形式来表示,例:
@"请参考上下文回答用户问题
###
上下文:{{$context}}
###
用户输入:{{$input}}
###
输出:"
在调用sk函数时,传入名为context/input的参数,即可完成方法的调用
prompt调用function
在prompt中,也可以完成任意注入的function调用,prompt如下:
@"{{namespace.functionName $functionArgs}}"
其中,functionName为注册到kernel中的函数名称,而functionArgs则是调用该函数的参数
prompt中的特殊参数
当prompt参数中出现引号时,为了避免需要特殊的语法,在处理包含单引号的值时,我们建议用双引号包装该值。类似地,当使用包含双引号的值时,用单引号将值括起来。
例:
...text... {{ functionName "one 'quoted' word" }} ...text...
...text... {{ functionName 'one "quoted" word' }} ...text...
对于复杂场景,使用""进行转义和包围使用引号相同的引号,例如:
... {{ "quotes' \"escaping\" example" }} ... //""中,使用\"来转义",使用\'同样可以转义',即使不需要
... {{ 'quotes\' "escaping" example' }} ... //''中,使用\'来转义',使用\"同样可以转义",即使不需要
参考资料:
微软官方文档:https://learn.microsoft.com/en-us/semantic-kernel/prompts/
promptingguide: https://www.promptingguide.ai/zh