揭秘ChatGPT,如何打造自己的自定义指令 | 京东云技术团队

news2024/12/23 16:04:14

一、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官网。

作者:京东零售 陈隆德

来源:京东云开发者社区 转载请注明来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成集云 | 飞书审批同步金蝶云星空 | 解决方案

源系统成集云目标系统 方案介绍 飞书员工报销审批通过后,审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台,将即时沟通、日历、云文档、云盘和工作台深度整合,通过开放兼容的平台,…

小白学Go基础01-Go 语言的介绍

Go 语言对传统的面向对象开发进行了重新思考,并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵服务器上的所有核心,而且它编译大型项目的速度也很快。 用 Go 解决现代编程难题 Go 语言开发团队花了很长时间来解决当今软件开发人员…

C位运算做标识位使用

C位运算做标识位使用

【重要】为什么串行NAND Flash不支持XiP?

并行/串行NOR Flash都支持XIP,但是串行NAND Flash不支持。 今天给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP。 在嵌入式世界里,当我们提起XiP设备(支持代码原地执行的存储器),首先想到的应…

从传统到智能化:汽车内部通信的安全挑战与SecOC解决方案

01/需求背景 Demand background 在传统的汽车电子结构中,车内的电控单元(ECU)数量和复杂性受到限制,通信带宽也受到限制。因此,人们普遍认为车内各个ECU之间的通信是可靠的。只要ECU节点接收到相应的消息&#xff0c…

SQL高阶语句

1、概念 1.1、概述 在MySQL中,高阶语句是指一些复杂、高级的查询语句或操作,用于满足更特定和复杂的数据需求。这些高阶语句通常涉及更多的SQL功能和技巧,以扩展MySQL的功能和性能。 在MySQL中,它们扩展了基本的SELECT、INSERT、…

[ROS]虚拟机ubuntu18.04系统里面运行usb_cam

首先安装usb_cam sudo apt-get install ros-melodic-usb-cam 运行: roscore roslaunch usb_cam usb_cam-test.launch 如果一运行报错,首先确认是否存在/dev/video0 可以使用ls /dev/video*查看,如果没有就是没有连接摄像头,…

ChatGPT总结(持续更新)

目录 体验渠道 weTab CSDN-AI助手 其他插件 ChatGPT简介 ChatGPT主要用途 ChatGPT发展历程 GPT-4架构的特点和优势 ChatGPT的工作原理 神经网络和自然语言处理技术 Transformer模型 模型训练优化技巧 ChatGPT对程序员的帮助 与ChatGPT交互和提问技巧 ChatGPT未来…

中国移动携手移远通信等合作伙伴发布 RedCap“1+5+5”创新示范之城

日前,《关于推进5G轻量化(RedCap)技术演进和应用创新发展的通知(征求意见稿)》正式公布,将进一步推进5G RedCap 技术演进、产品研发及产业化,大力推动5G应用规模化发展。 为加快推动RedCap规模…

TSMaster小功能分享—Python小程序如何导入外部库

今天给大家介绍TSMaster功能之Python小程序如何导入外部库。通过在 TSMaster 默认的解析器路径下导入外部库来介绍,以便我们去使用 Python 外部库。TSMaster 默认 Python 解析器下安装外部库。 步骤一 在 TSMaster 工具->系统信息->python 环境设置中选择打开…

Windows安装Nginx及部署vue前端项目操作

先在nginx官网下载windows下安装的包,并解压,到ngnix目录下 双击nginx.exe,会有黑窗闪过。 用cmd命令窗口,cd 到nginx解压目录,./nginx启动。 在浏览器中访问http://localhost:80,出现以下界面说明启动成功(由于笔者电脑80端口被…

windows生成ios证书的方法

使用hbuilderx的uniapp框架开发ios应用,在测试阶段和发布阶段,需要ios证书进行打包,云打包的界面提供了生成ios证书的教程,但是教程令人很失望,它只能使用mac电脑来生成ios证书。假如没有mac电脑,就无法安照…

RK3562 VS RK3566 性能解析

RK3562是深圳触觉智能最新推出的一款高性能核心板及其开发套件,采用四核A53Mali G52架构,主频2GHz,内置1T NPU算力以及13M ISP,拥有丰富的外围接口。其次在解码方面,支持H.264 1080P60fps、H.265 4K30fps;编…

解决css样式中last-child不生效的问题

需求 项目中需要使用v-for指令来渲染一个图片列表, 现状 发现,最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right:36px,影响到了最后一个格子 所以使用last-child 将最后一个格子的margin 属性…

Java版企业电子招标采购系统源码—企业战略布局下的采购寻源

统一供应商门户 便捷动态、呈现丰富 供应商门户具备内外协同的能力,为外部供应商集中推送展示与其相关的所有采购业务信息(历史合作、考察整改,绩效评价等),支持供应商信息的自助维护,实时风险自动提示。…

Python学习 -- 异常分类

在编写Python代码时,异常处理是至关重要的一部分,它能够帮助我们更好地应对意外情况,提高程序的健壮性。本文将详细介绍Python中常见的异常类型,包括AttributeError、FileNotFoundError、IndexError、KeyError、NameError、TypeEr…

K8S - 架构、常用K8S命令、yaml资源清单部署、Ingress、故障排查、存储卷

K8S K8S官网文档:https://kubernetes.io/zh/docs/home/学习东西还是要从官方文档入手;用于管理、扩展、自动部署容器; 其实就是 对多个跨机器的Docker集群; K8S特性 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 …

思路灰度传感器及红外传感器线序

四路红外传感器 黑线读取数据为0 白线读取数据为1 四路灰度传感器 黑线读取数据为1 白线读取数据为0

03-MySQL

1、什么是BufferPool? 1.1、Buffer Pool基本概念 Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由缓存数据页(Page)和 对缓存数据页进行描述的控制块 组成,…

5个IT事件管理的最佳实践

什么是IT事件? IT事件是一个影响很大的紧急问题,通常会影响整个组织或其主要部分。重大事件几乎总是导致组织的服务变得不可用,这导致组织的业务受到打击,并最终影响其财务状况。以下是5个重大IT事件管理的最佳实践: …