共计 3507 个字符,预计需要花费 9 分钟才能阅读完成。
一、ChatGPT-0720 更新
又在深夜,正要关上 ChatGPT 官网测试下 pdf 对话性能,发现 ChatGPT 又有更新。本次更新总结有 2 点:
1. 对于 Plus 用户,GPT- 4 的应用限额从 25 条 /3h 晋升至 50 条(整整晋升 1 倍~ $20 的订阅费又更超值了)
2. 新增 Custom instructions
(个性化指令),简略能够了解为集体角色和冀望答复定义
Why instructions?
Custom instructions
中文翻译过去叫 个性化指令
会比拟精确,为什么是 instruction 这个单词?在大语言模型的训练中,常常会看到 Instruct Tuning(指令微调)这个单词,GPT 家族中也有一个 InstructGPT 的模型(指令微调后的 GPT),通过指令微调的 LLM 会更依照咱们冀望的形式输入。一些 LLM 的训练语料中也会采纳 instruction 的模式:
{
"instruction": "将不同颜色混合后的后果",
"input": "红色、黄色",
"output": "橙色"
}
比照指令和提醒词,指令更像是疏导批示命令的意思,提醒词更像是可参考可援用的意思,这种语义上的细微差别,还是相当有意思的~
二、体验个性化指令
1、开启
ChatGPT 的 plus 用户,在 Beta features 开启后,集体面板中会新增Custom instructions
菜单。
2、配置
而后关上Custom instructions
进行自定义指令的输出。指令的输出分为 2 局部:
配置项:个人简介
官网的提示信息如下,简略来说就是一些对于个人信息的要害提取:
- Where are you based? — 所在地点
- What do you do for work? — 工作内容
- What are your hobbies and interests? — 兴趣爱好
- What subjects can you talk about for hours? — 最近交谈关注的事项
- What are some goals you have? — 指标与打算
配置项:如何答复
官网的提示信息如下,次要是对于 GPT 输入格局和格调的定义:
- How formal or casual should ChatGPT be? — 聊天语气
- How long or short should responses generally be? — 答复的长短
- How do you want to be addressed? — 你心愿被如何称说
- Should ChatGPT have opinions on topics or remain neutral? — 对话题持有观点还是保持中立
3、比照
接下来简略测试下 ChatGPT 开启 Custom instructions 前后的变动
比照成果(未开启)
发问在我的项目中集成单元测试,GPT 不晓得我的工作畛域(前端),在输入时也没有针对性得给到解决方案,而是在做整体介绍:
比照成果(开启个性化指令)
开启个性化指令(前端工程师 # 代码 解决方案 Typescript),雷同的问题 GPT 的输入会参考我的身份和我所冀望的答复内容,倡议采纳 Jest,并且给出残缺的装置配置教程。
4、总结
Custom instructions
技术上就是提前注入一条用户本人定义的提醒词,解决的问题是用户每次新建对话不须要反复输出用户身份和冀望的答复,OpenAI 官网微博也提到:
咱们在用户反馈中发现,每次开始 ChatGPT 对话都须要从新加上固定提醒词所带来的不便。通过与 22 个国家的用户进行交换,咱们加深了对角色定义和操作定义在应用 LLM 时的重要性意识,这些定义指令可能无效反映各种背景和每个人独特需要方面。
三、HiBox 如何实现?
通过珍藏提醒词实现
公司外部同学在应用 HiBox 中也遇到相似的问题,例如应用 HiBox 进行 IT 畛域单词的翻译,每次关上都要从新定义,最初给他的解决方案也是应用提前注入 Prompt 实现:
你是一个同时精通汉语和英语的研发工程师,请将我后续发送的内容翻译成英文
这个提醒词其实就是自定义指令
那为什么 OpenAI 不通过提醒词的形式,而是另外做个性化指令来实现呢?我感觉起因有 2 个:
一方面,用户有些 通用的共性的
信息(例如:性别、年龄、地区、工作畛域等),通过配置个性化指令,不须要每次都拼接在提醒词外面。
另一方面,个性化指令的形式后续可扩大积淀,例如零碎依据用户最近的问答行为,主动揣测用户的信息和爱好,相似打造专属的私人助手。
通过 systemMessage 实现
systemMessage 是什么?
GPT 接口的 messages 是一个音讯对象汇合,每个音讯中都有一个字段 role
,取值有:
1.system
(零碎)
2.assistant(GPT 助手)
3.user(用户)
其中 system
就是用来定义以后对话的零碎层面的信息,并且它在 GPT 的推理过程中,权重高于其它两种音讯(Function_calling 的实现就用到了 systemMessage)。
参考 GPT 官网的实现(用户个人简介、答复倾向性),通过个别剖析总结,咱们补充 1 个对 GPT 助手的简介,共有 3 块内容。以面试场景为例:
1.AssistantProfile(助手简介): 京东资深前端工程师、面试官
2.UserProfile(用户简介): 前端实习生,名字叫小方
3.AssistantReplyStyle(助手回复格调): 被动发问、庄重主观、全面考查
将上述内容组装到 role=system
的 message 里,实践上就能实现相似官网个性化指令的成果。
一个典型的 messages 如下:
[
{
"role": "system",
"content": "#AssistantProfile: 京东面试官 \\n #Userprofile: 应届前端实习生 \\n #AssistantReplyStyle: 被动发问、庄重主观、全面考查"
},
{
"role": "user",
"content": "你好面试官,我筹备好了"
}
]
要害代码实现如下:
1、插件配置新增 GPTProfile
新增指令配置项,反对配置多个,反对用户切换
"HiBox.config.chatgptProfiles": {
"type": "array",
"default": [{"assistantProfile": "由 OpenAI 训练的大语言模型 -ChatGPT", "userProfile": "","answerStyle":" 简洁 "}],"markdownDescription":" 调用 ChatGPT 时自定义的指令,反对配置多个 ","items": {"type":"object","properties": {"assistantProfile": {"type":"string","description":" 定义 ChatGPT 的角色 / 名称等,例如:面试官、名字是小爱同学 "},"userProfile": {"type":"string","description":" 定义你的个人信息,例如:我叫小明,在京东团体做前端开发 "},"AssistantReplyStyle": {"type":"string","description":" 定义 ChatGPT 的答复偏向,例如:具体、中文、尽量用代码答复 "}
}
}
}
2、在调用 GPT 时读取 Profile 传给 systemMessage
这里须要留神,对于 GPT 来说 英文形容的权重会高于中文形容
,算是一个小小的 Prompt Trick
export function getSystemMessageWithProfile() {
// 读取用户设置的个性化指令(中文模板,易于用户了解)const profileStr = GlobalState.get('chatgptCurrentProfile');
// 改成英文(英文模板,晋升权重)return profileStr
.replace('[零碎简介]', '#AssistantProfile')
.replace('[个人简介]', '\\n#UserProfile')
.replace('[答复格调]', '\\n#AssistantReplyStyle');
}
// 申请 GPT 的时候
const body = {
// ...
systemMessage: getSystemMessageWithProfile() || '你是 ChatGPT,由 OpenAI 训练的大型语言模型,请尽可能简洁地答复。',};
HiBox 中测试一下
本地测试下翻译官和模仿面试场景,成果根本复合预期
HiBox 是公司外部自研的 VSCode 插件,HiBox 在 v2.9.1 开始反对用户配置自定义指令,总体应用成果可对齐 ChatGPT 官网。
作者:京东批发 陈隆德
起源:京东云开发者社区 转载请注明起源