写一个 ChatGPT token 编解码 Node.js 服务【含源码】

背景介绍

最近做了一个 ChatGPT 相关的项目 - Ai 玩伴,这是一个微信小程序。Ai 玩伴是基于OpenAI 的 GPT-3.5 语言模型,搭建富有性格特色的「Ai 玩伴」智能聊天机器人。它可以陪你聊天、陪你玩、为你解答各种问题,具体功能可以微信中搜索【Ai 玩伴】进行功能体验。如果想要了解 Ai 玩伴小程序相关的开发历程,我可以在下一篇博客中进行分享。

关于 token

token 是 ChatGPT 中的一个重要的概念。了解过 ChatGPT 的老玩家都知道,
ChatGPT 在 API 处理用户输入的内容之前,会先将内容转化成 token。我们可以简单的把 token 理解成字符,但是 token 的分割并不是严格意义上的一个单词,它的与实际字符数对应关系如下:

1 token ~= 4 英文字符
1 token ~= 3/4 个字
100 token ~= 75 个单词

更多 token 相关说明可以参考官方提供的这篇文章 **What are tokens and how to count them?。**同时,官方还提供一个 token 解析的在线工具(Tokenizer tool),帮助你更加直观的了解 token 的转化过程。具体页面如下:

在这里插入图片描述

由于 Ai 玩伴小程序采用了和官方一样的计费模式,所以我们需要对用户输入的内容进行分词处理,然后计算分词数量进行计费。在分词过程中我们需要保证和官方的分词算法保持一致,这就给我们的开发实践提出的不小的难题。经过一段时间的调研,我们发现 **gpt-3-encoder 这个 npm 包能够完美解决我们的问题。

gtp-3-encoder 是对 GPT-2/GPT-3 编解码的基础库,是用 javascript 实现的。原版是使用 Python 实现的。gpt-3-encoder 通过使用字符匹配编码的方式,将用户的输入内容转化为 OpenAI model 能够识别的一串数字。例如:【中国】两个字在经过 encode 之后会转化成 [40792,32368,121]。

下面我们就来看看在实际的项目中如何使用。

项目开发

环境准备

检查 node 环境

$ node -v
v16.18.1$ npm -v
8.19.2

初始化项目

# 新建项目目录
$ mkdir chat-gpt-node && cd chat-gpt-node# 初始化 package.json
$ npm init -y

安装依赖

$ npm i express gpt-3-encoder body-parser

依赖说明

  1. express:极简、高效的 Node.js web 框架;
  2. body-parser:Node.js body 转化中间件,能够将 body 中的内容转化为 js 对象;
  3. gpt-3-encoder:GPT-2/GPT-3 编解码库。

核心代码

const express = require('express');
const bodyParser = require('body-parser');
const { encode, decode } = require('gpt-3-encoder');const app = express();// 使用 bodyParser 中间件
app.use(bodyParser.json({type: 'application/json',})
);/*** 将字符串转化成 token*/
app.post('/encode', (req, res) => {try {// 编码核心逻辑const token = encode(req.body.str);res.send({code: 0,message: 'success',data: token,});} catch (error) {console.error('encode-failed: ', error);}
});/*** token 解码*/
app.post('/decode', (req, res) => {try {// 解码核心逻辑const decoded = decode(req.body.data);res.send({code: 0,message: 'success',data: decoded,});} catch (error) {console.error('encode-failed: ', error);}
});app.listen(1234, '0.0.0.0', function () {console.log('dataServer running at port 1234');
});

运行

启动 express 服务,在命令行执行命令:

$ node index.js

当看到命令行输出如下内容后,表示服务已经正常启动:

dataServer running at port 1234

验证

使用 curl 进行验证

在命令行执行命令:

$ curl -H "Content-Type: application/json" -X POST -d '{"str": "中国"}'  http://localhost:1234/encode

当看到命令行输出如下内容后,表示解码成功:

{"code":0,"message":"success","data":[40792,32368,121]}

使用 postman 进行验证

如果看到如下内容,则表示服务正常。
在这里插入图片描述

部署

使用 pm2 启动 Node.js 服务:

$ pm2 start index.js

同样可以使用上述验证方法进行验证。

可以通过在命令行执行下列命令,查看 Node 服务运行状态:

$ pm2 list

总结

通过本这篇文章的学习,我们了解到了 ChatGPT 中的一个核心概念 token。通过官方提供的工具,我们能直观的体会 token 的转化过程。

通过 gpt-3-encoder 的使用,我们可以在 Node 服务中能够对用户的输入进行编码,将用户的输入内容转化成和官方一样的 token 序列,帮助我们完成相关的需求功能。

关于 gpt-3-encoder 更多的内容就留给你进行探索了。如果有什么问题,欢迎在评论区进行友好交流。

Ai 玩伴项目用到的 gpt-encode-node 工程源码可以在附件中进行下载。

附件:gpt-encode-node 源码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决captcha验证码无法显示的问题

新装的Linux服务器,安装好了JDK1.6,却未设置JAVA_HOME,想不到这为此问题埋下了诱因。 在旧服务器上captcha的验证码没有任何问题。 问题描述: 1.跟踪log,发现servlet调用已经进来了,而且生成验证码的代码也已经走到了…

TP5.1 captcha 验证码刷新不出来(图片显示不了)

captcha 验证码安装路径: 解决办法: 2.打开文件后,加入 ob_clean(); 再次刷新页面就好了

谷歌验证码无法显示问题

解决方案 Google 人机验证(reCaptcha)无法显示解决方案(可解决大多数 CSP 问题) – Azure Zeng Blog 对于Edge,获取Header Editer的方式如下 注意点,Header Editer下载规则时候,需要把解决方案中的网址敲到URL的输入框里

谷歌验证码收不到 / Kaggle注册时无法验证 - 解决方案

谷歌验证码收不到 / Kaggle注册时无法验证 - 解决方案 前言问题解决方案 前言 科研时,需要注册或登录很多(Foreign)网站,极有可能发生谷歌验证码收不到的情况,本文以Kaggle网站为例介绍解决方案。 问题 Kaggle网址&…

验证码验证失败的那些事

原因就是我做登录操作时一直返回验证码不正确 我想着这不就一个手机号一个验证码吗 怎么还能错 ..... 然后我就把锅甩给了后台 (php) 后台说使用了Session让我去搜一下... From 李诗雨—http://blog.csdn.net/cjm2484836553/article/details/77341779 发现问题了 就让后台在我…

登录注册时手机验证码发送的实现

短信验证 首先需要通过个人账户获得 授权码(id、密码),再通过这些信息获得服务通过对阿里云网址 : https://www.aliyun.com/获得短信发送的权限(sms): 登录 / 注册 阿里云点击 AccessKey 管理…

CAPTCHA验证码无法加载/验证失败(UDebug)解决办法

问题 一些网站要机器验证但没有加载出验证按钮,如: UDebug… 通常是需要引用 [ www.google.com/recaptcha ] 在国内通常访问不了 so 解决 安装(开源)浏览器插件 Gooreplacer GiHub源码库 Chrome商店 Edge扩展商店 Firefox 安装好后,点击扩展中的 单击 Config Rules/配置…

为什么自学 Python 很久却还是不会用?

打个恰当又不恰当的比方,为什么考过科目一却还是不会开车? 理论上会了不是会了,在脑力里想象着速度与狂飙是没用的,不然赵括也不会纸上谈兵谈的被秦军射杀,小命儿都没了。 对于 Python 来说也是一样,编程…

程序员,职场上请远离这种人!

对有些职场人来讲,甩锅就是一种生存手段。 01.从大学打篮球说起 上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于是左脚经常性崴脚,这是背景…

后台登录界面和首页

router 管理组件 在index.vue api 管理 接口,获取后暴露出来 $http store vuex 统一管理数据状态 user 和 menu $store.state.user.info app.vue 为主业渲染 login.vue 为注册页渲染 目录标题 logoinwebpack 配置 logo.vue with elementlogo.js import element-ui …

服务器运行打开一直转圈,快速解决登录PC端一直转圈数据读取中,不能进入正常聊天界面...

快速解决登录PC端一直转圈数据读取中,不能进入正常聊天界面 大家都在查:正在连接服务器,请等待.正在连接服务器,请等待.快速解决登录PC端一直转圈数据读取中,怎么连不上怎么一直连不上 怎么一直连接不上 怎么连接不上不能进入正常聊天界面,数据读取中&am…

信创JAVAWEB的相关记录

前提,由于最近信创 不少客户要求服务器上的也需要国产化, 服务器上用的是 统信UOS 具体版本为:Linux TAXC1507 4.19.0-loongson-3-desktop #4114 SMP Wed Sep 1 15:23:48 CST 2021 mips64 GNU/Linux 这个版本的JDK需要上龙芯的官网上下载专…

助力金融信创生态建设,麒麟信安亮相2021中国国际金融展信创专题展

10月13日至14日,以“聚力金融信创,筑牢数字新基建”为主题的2021中国国际金融展信创专题展(长三角)在上海举行。来自长三角地区多个金融监管机构、金融机构、科技企业的领导和代表观展参会,共同推动金融信创工作的高质…

信创电脑运行Windows程序

一、使用环境: 龙芯3A5000 UOS 专业版 v20 1050 二、wine介绍 1、在linux上安装wine,可以实现运行Windows exe程序,但并不是所有程序都可以运行. 2、wine最新版本为wine7,本次测试环境使用wine5 3、wine官网链接:W…

信创环境经典版SuerMap iManager ARM版部署流程

一、环境 操作系统:银河麒麟kylin V10CPU:鲲鹏920SuperMap iManager 10.2.1硬件:4H32G机器磁盘分区格式建议如下(请严格按照如下,减少后期有用/目录资源不够,导致Docker调度失败,还需要重新更换…

全方位解析《中国电信行业信创建设偏好报告》

电信作为信创28重点行业之一,电信、移动、联通三大电信运营商早在2020年开始,就陆续进行业务招标、集采国产服务器、建立信创实验室,抓紧高速、全面地进行信创布局。 随着数字经济时代的到来,各大运营商对于信息安全的关注度与日…

灵雀云ACP成功通过金融信创生态实验室适配验证

近日,灵雀云全栈云原生开放平台ACP(以下简称灵雀云ACP)成功通过了金融信创生态实验室适配验证,在金融科技领域的技术实力和专业水平得到了权威认可。 金融信创生态实验室(以下简称“实验室”)是由中国人民银…

“麒”聚信创,共赢未来——信创解决方案分享会(首场)成功举办

11月18日上午,“麒”聚信创,共赢未来——信创解决方案分享会(首场)于线上举行。本次会议由麒麟信安主办,百信信息技术有限公司(简称:百信)、杭州迪普科技股份有限公司(简…

科技云报道:信创基础设施迎来“升级潮”,可持续性架构成关键技术

科技云报道原创。 如果说单一领域的技术突破是河流,信创毫无疑问是汪洋大海。 随着“数字中国”战略的明确,数字化转型进程加速,信创产业成为国家战略布局的重点领域之一,是缩短科技发展周期以及国内外科技差距的一剂良方。 2…