揭秘 ChatGPT,如何打造自己的自定义指令 | 京东云技术团队
一、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 的形式:
对比指令和提示词,指令更像是引导指示命令的意思,提示词更像是可参考可引用的意思,这种语义上的细微差别,还是相当有意思的~
二、体验个性化指令
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 如下:
关键代码实现如下:
1、插件配置新增 GPTProfile
新增指令配置项,支持配置多个,支持用户切换
2、在调用 GPT 时读取 Profile 传给 systemMessage
这里需要注意,对于 GPT 来说英文描述的权重会高于中文描述
,算是一个小小的 Prompt Trick
HiBox 中测试一下
本地测试下翻译官和模拟面试场景,效果基本复合预期
HiBox 是公司内部自研的 VSCode 插件,HiBox 在 v2.9.1 开始支持用户配置自定义指令,总体使用效果可对齐 ChatGPT 官网。
作者:京东零售 陈隆德
来源:京东云开发者社区 转载请注明来源
版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/15eac50b1c511a5028f3c8f19】。文章转载请联系作者。
评论