前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建属于自己的 chatgpt api 服务

搭建属于自己的 chatgpt api 服务

原创
作者头像
王磊-字节跳动
修改2023-03-04 15:03:58
6.6K1
修改2023-03-04 15:03:58
举报
文章被收录于专栏:01ZOO01ZOO

chatgpt openapi 的限制

现在有一个坏消息,一个好消息。

好消息是,chatgpt 已经开放了 openapi。

坏消息是,openapi 是收费的,而且并不像你想的那么便宜。

目前官网的标价是:每1,000 token 收费0.002 美元,约为 750 个单字。但是目前 API 不会记得你的 conversation 内容,也就是说,openapi 是没有 context 信息的。如果你希望 chatgpt 足够智能,能够像网页版本一样跟你产生真正有上下文的对话,那么你每次调用API 时,都必须叠加上之前的对话内容,而文字越多,花费的token 就越多。所以token 的花费会是指数型增加。

这样看的话,一个对话,有可能很容易就能消费掉 1w 个token,甚至更高。

模拟网页端身份进行对话

那么是否可以模拟网页端的身份来和 chatgpt 对话,并基于此做一个服务呢,这样不就可以免费使用了吗,而且网页端的功能有可能比 openapi 功能更新更及时。

答案是可以的。一个比较知名的项目是 acheong08/ChatGPT,这是一个 python 的项目,短短几个月时间,已经获得了接近 2w 个 star。这个项目目前提供模拟网页登录的 python 库,也提供了 openapi 的版本(openapi 的版本是最近更新的,2w 个star 并不是因为这部分能力)。但是这个服务并没有提供现成可用的 api 版本,使你在非 python 的项目中使用这个项目可能会有一点困难。而 u2takey/chatgpt-go 这个 go 的项目,不仅仅提供了 go 语言版本的 sdk,而且提供了一个 开箱即用的 api 服务,以及 dockerfile,相对而言就方便多了。

如何使用

这个项目我们从使用 u2takey/chatgpt-go docker service 版本的角度看看怎么使用。目前项目已经提供了一个开箱即用了 docker 镜像: ccr.ccs.tencentyun.com/leiwang/chat-service:v0 ,在你的主机上 pull 这个镜像,并且运行起来即可。

代码语言:txt
复制
# 启动运行
root@VM-0-8-ubuntu:/home/ubuntu# docker run -d  -p 8088:8088 ccr.ccs.tencentyun.com/leiwang/chat-service:v0
c2f95863b5c476fe722f2fc48d95f082739e844c9aa499fee0d97cd0cc6bd1c1

# 检查运行状态
root@VM-0-8-ubuntu:/home/ubuntu# docker ps
CONTAINER ID   IMAGE                                             COMMAND                  CREATED         STATUS         PORTS                              NAMES
c2f95863b5c4   ccr.ccs.tencentyun.com/leiwang/chat-service:v0    "/usr/local/bin/chat…"   5 seconds ago   Up 2 seconds   0.0.0.0:8088->8088/tcp             unruffled_bohr

这个服务非常简单,主要只有两个 api:

  1. bind: 意思是将你的 chatgpt 网页账号记录到服务中,这样服务就有了你的身份,模拟你的身份登录进行 chatgpt 的 api 访问。bind 支持多种登录方式,如:
代码语言:txt
复制
#Email/Password 不支持 Google/Microsoft 帐户
{
  "email": "email",
  "password": "your password"
}

# Session token 来自 cookies on chat.openai.com as "__Secure-next-auth.session-token"
{
  "session_token": "..."
}

# 3. Access token 访问 https://chat.openai.com/api/auth/session 就可以获取
{
  "access_token": "<access_token>"
}

同时 bind 的时候,你需要带一个 user_id 参数,标识你的身份,后面访问 其他接口,带上 user_id 即可。下面是一个 使用 Access token 绑定身份的例子,首先访问 https://chat.openai.com/api/auth/session, 把 token copy 出来,然后 bind。

代码语言:txt
复制
# 使用 Access token 绑定身份的例子
root@VM-0-8-ubuntu:/home/ubuntu# curl localhost:8088/bind -d '{"user_id": "test", "access_token": "your token"}'
{"code":200,"message":""}
  1. ask:ask 就是真正的提问环节了,参数也非常简单,最主要的参数是 prompt, 标识你提问的问题,如果你要继续一个对话,将上次返回的 conversation_id 作为参数传入即可。
代码语言:txt
复制
root@VM-curl localhost:8088/ask -d '{"user_id": "test", "prompt": "什么是快乐星球"}' | jq

{
  "code": 0,
  "message": "",
  "data": {
    "message": "抱歉,我不知道“快乐星球”是指哪个具体的概念或事物。可以提供更多的背景信息或上下文吗?这样我才能更好地回答你的问题。",
    "conversation_id": "d0b3a4f8-b889-46f1-b113-2d0fed3d6a56",
    "parent_id": "caf08b56-6f4d-4aa2-9a67-c3fbe04125d7",
    "model": ""
  }
}


curl localhost:8088/ask -d '{"user_id": "test", "prompt": "出现在中国的一个电视剧里面", "conversation_id": "d0b3a4f8-b889-46f1-b113-2d0fed3d6a56"}' | jq

{
  "code": 0,
  "message": "",
  "data": {
    "message": "如果“快乐星球”是出现在中国的一部电视剧里面,那么可能是该电视剧中的一个虚构的地方或组织。很抱歉,由于我不知道具体是哪一部电视剧,也不清楚“快乐星球”在该剧中的角色和背景,无法提供更详细的回答。",
    "conversation_id": "d0b3a4f8-b889-46f1-b113-2d0fed3d6a56",
    "parent_id": "d7ec14ea-56fa-4dd2-a1db-99548911d8b4",
    "model": ""
  }
}

结语

模拟用户登录的 u2takey/chatgpt-go 项目使用起来非常简单,而且免费,但是也有缺点,即如果 openapi 官方改变了网页端的登录鉴权方式,项目也有对应的进行更新才能继续使用。

使用 u2takey/chatgpt-go 搭建属于自己的 chatgpt api 服务之后,你就可以发挥想象力了,你可以基于此做一个微信聊天机器人,或者一个 alfred 插件,或是一个命令行工具,也可以小范围免费分享你 api,作为团队的共享工具。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • chatgpt openapi 的限制
  • 模拟网页端身份进行对话
  • 如何使用
  • 结语
相关产品与服务
智能硬件 AI 语音助手
腾讯云小微智能硬件 AI 语音助手(Intelligent Hardware AI Voice Assistant,IHAVA)为您提供前沿的 AI 语音全链路能力、硬件方案咨询及认证服务,整合腾讯系优质内容和服务,面向智能硬件行业打造全方位的自然人机交互体验。该方案支持 Linux、Android、RTOS 多种操作系统,灵活提供云端 API 和设备 SDK 两种接入方式,让硬件迅速获得本地智能和云端智能。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档