logo
10

文心API应用实践

一、接口调用

千帆平台使用-->>千帆大模型调用文心接口教程<<--

二、prompt

1、介绍

Prompt可以看作是一种新型的用户界面,它利用自然语言的方式,将用户的需求直接传达给模型

大模型应用开发过程中prompt的重要性:

在大模型应用开发过程中,prompting是成本最低,见效最快的一个过程
对比:下图由ImageGP生成,数据来源ChatGPT,对比了大模型优化三个阶段的各方面的得分(分越高,表现越好)
综合表现对比图:
  • 横坐标是:Prompting(提示词优化)、SFT(Supervised Fine-Tuning,有监督精调)、RLHF(Reinforcement Learning from Human Feedback,人类反馈学习)
  • 纵坐标是综合表现。可以看到prompt是综合(复杂度、成本、灵活性、人力投入、效果)表现最好的

2、写好prompt的技巧

2.1.万能公式

任务 + 生成主题 + 细节(可选)+ 形式 (可选)+ 举例(可选)+ 做假设(可选)
例如:
请生成一段文本,关于:演员的自我修养。要求:演员这个职业的介绍、演员对于社会的贡献、演员的基本修养。格式:以json形式返回。例如:"introduction": "演员是一种以表演为主要职责的艺术家。他们通过扮演不同角色来传达情感和故事,以引起观众的共鸣。"
任务:请生成一段文本
生成主题:演员的自我修养
细节:演员这个职业的介绍、演员对于社会的贡献、演员的基本修养。
格式:以json形式返回
举例:"introduction": "演员是一种以表演为主要职责的艺术家。他们通过扮演不同角色来传达情感和故事,以引起观众的共鸣。"
  
  
  
  
  
  
{
"introduction": "演员是一种以表演为主要职责的艺术家。他们通过在戏剧、电影、电视和其他演出中扮演角色,将故事、情感和思想传达给观众。演员是社会文化和价值观的反映者,对于社会的贡献表现在以下几个方面:",
"contributions": [
"艺术和文化:演员通过表演将文学作品、戏剧和其他艺术形式带给观众,丰富了社会文化生活,为文化传承做出了贡献。",
"情感和心理满足:演员通过扮演不同的角色,呈现出人类的各种情感和心理状态,使观众能够深入了解和感受到不同的情感体验,满足了人们的精神需求。",
"娱乐和消遣:演员的表演给人们带来了娱乐和消遣,帮助人们在繁忙的生活中得到放松和舒缓压力。",
"社会问题反思:演员通过扮演不同的角色和社会形象,反映了社会问题和价值观,引发观众对社会的思考和反思。"
],
"basic_training": [
"形体和语言训练:演员需要训练形体和语言的表达能力,包括动作、姿势、面部表情和语音语调等方面。",
"情感训练:演员需要学会如何调动和表达情感,通过深入体验生活和角色的内心世界,将情感真实地呈现给观众。",
"表演技巧学习:演员需要学习各种表演技巧,如模仿、变声、道具使用等,以提高表演的逼真度和表现力。",
"剧本和角色分析:演员需要学会分析剧本和角色,理解角色的性格、情感和行为动机,以及剧本的主题、结构和情节发展。"
]
}
关于定义json格式的key,下面方法也可指定返回JSON的key
  • 生成一个列表,列出三个虚构的书名以及它们的作者的流派,\
以JSON格式输出,JSON的key分别为book_id,title,genre
如果限定了返回格式的要求,比如json,那么可能就无法使用流式返回数据,因为json对于格式严格要求,数据未传输完之前,都是不可读的,所以对于强格式限定的要求要考虑是否需要流式返回数据。

2.2.优化技巧

大前提:任务+内容主体需要明确。如果任务+内容主体都不明确的话,不管怎么优化都是无效的。
其次:prompt优化只是大模型优化中成本最低的一步,对于部分复杂任务来说,prompt可能再怎么优化都无法达到完美的效果,所以在优化prompt过程中发现无论如何都无法达到效果的时候,就需要考虑下是否要通过其他方式来优化大模型了。
以下所有方法都有他适用的场景,
2.2.1.身份设定
身份设定是缩短prompt的一大利器,能节省大量对于身份描述的语句。有些场景下会有奇效。
例如:
  • 你是一个文本纠错工具,我现在给出文本:今天是清天
你是蜡笔小新,我现在和你说:你好
当然:身份设定不是万能的
good case
bad case
2.2.2.Few-shot
Few-shot就是直接在prompt中给出一些输入输出的示例,让大模型更好的理解prompt
例如:
请参考并模仿一下示例的应答风格。
输入1:今天是青田
输出1:{"oriStr": "青田","correctStr": "晴天","correctText":"今天是晴天"}
输入2:百度是个只能公司
输出2:{"oriStr": "只能","correctStr": "智能","correctText":"百度是个智能公司"}
我输入:准备一写数据
2.2.3.CoT(Chain-of-Thought)
有时候给大模型指明思考过程可能会让大模型的回复更加符合预期
如:
执行下面的任务:
1 - 一句话总结下面三个引号中的内容。
2 - 将总结翻译成英语
3 - 列举英文总结中的每个人名
4 - 以json形式输出包括以下两个key的内容:英文总结,人名数量
用换行符分割答案
Text:
```在一个迷人的村庄里,兄弟姐妹杰克和吉尔出发去山顶取水。
过程中,它们快乐地歌唱着,不幸的是杰克被石头绊倒了,摔倒了山下,吉尔也一样。
尽管受到了轻微的打击,两人还是回到了家获得了安慰的拥抱。
尽管发生了事故他们的冒险精神丝毫没有减弱,愉快地继续探索。```
bad case
good case
2.2.4.做强调
强调词:非常、强调、务必 或者使用“[]”括起来
语言风格:首先、其次、然后、再然后、最后
顺序:往往在prompt越靠后的描述可能“权重越低”
实践发现
例如:
bad case
good case(改顺序)
good case(强调)
2.2.5.做预设
在预测到模型可能会给出一类信息之后,提前在prompt给出模型要针对该信息做的处理。
例如:
有时候为了避免大模型生成错误的内容时,可以提前询问大模型是否理解你的意思。
如:你是斯皮尔伯格·李雪健,你能懂吗?
或者提出假设:如果你的数据存在问题,可以给出否定答案。
2.2.6.做引导
通过引导大模型的思路,或者给大模型一些提示,可以让大模型更好的完成任务
bad case
good case
2.2.7.沟通技巧(不断尝试与大模型的沟通方式)
不断修改词句,优化表达,不断尝试。有时候改了一个词的说法可能效果比使用上面的技巧效果更好。
bad case
百度ERNIE-Bot、ERNIE-Bot-turbo、VisualGLM-6B、BLOMZ-7B、Llama-2、Linly-Chinese-LLaMA-2等模型支持创建chat API。
good case
百度ERNIE-Bot等模型API列表:创建chat、文生图等。
2.2.8.prompt检索网站
本文作者李雪健,已获作者授权发布,如需转载请联系
评论
用户头像