文章内容

2023/4/25 14:11:47,作 者: 黄兵

如何部署一套ChatGPT项目

如果你觉得 ChatGPT 官网注册过于繁琐,可以看看这篇文章。

作者在自己的服务器上部署了一套服务,通过调用 ChatGPT-Api 实现。本篇文章将讲解 Api 的调用过程。

Api

打开官方地址:https://openai.com/api/ 登陆并查看相关 API 文档。

如上,对于消息的推送其实只需要调用这一个接口即可实现。调用 JS 伪代码:

const response = await axios.post('https://api.openai.com/v1/completions', {
  prompt: this.inputText,
  model: "text-davinci-003",
  max_tokens: 100,
  n: 1,
  stop: null,
  temperature: 0.5,
}, {
  headers: {
    'Authorization': `Bearer `,
    'Content-Type': 'application/json',
  },
});

API_KEY 怎么拿到?


同样还是刚才的地址,可以创建本账户的 API KEY。目前而言,每个账户有免费的调用额度,超过额度后此账户就无法进行会话了(选择充值 20 美元/月、或者重新注册账号)。


关于如何注册账号,在这几篇文章中都有介绍,需要的可以看看:

1、ChatGPT最新注册攻略

2、无需等待 一键注册ChatGPT

3、ChatGPT账号申请,3分钟搞定

免费的额度目前是 18 美元,在 5 月 1 号之前是免费的。

ChatGpt-Api

上面仅仅介绍了简单实用 JS 如何实现直接调用接口进行会话。

但是,我们知道,官网的会话其实是能识别上下文语境的,而使用上述直接掉接口的方式,是无法做到上下文语句的功能的,每次推送的消息都将是一个新的 ConversationId。

这里就要介绍一个比较著名的开源项目了:https://github.com/transitive-bullshit/chatgpt-api


此项目实现了会话上下文的支持,主要涉及两个参数:

{
 conversationId, //此次会话的conversationId
 parentMessageId //上次会话的messageId
}

提一嘴,官方的 API 文档中,并未出现这两个参数,但是 ConversationId 是确实存在的


但是官方 API 接口中并未暴露太多相关参数。

如何使用

注意:

  1. 此项目是基于 Node.js 的服务端项目,且 Node Version >= 18
  2. 此项目只能是作为 Node 服务端独立运行,不能在 Vite、Webpack 等 Web 组件中调用相关函数
  3. 不能在 Vue 组件中调用此项目的相关函数(因为 Vue 是 Web 组件)

安装:

npm install chatgpt

使用:

import { ChatGPTAPI } from 'chatgpt'

async function example() {
  const api = new ChatGPTAPI({
    apiKey: process.env.OPENAI_API_KEY
  })

  const res = await api.sendMessage('Hello World!', {
    conversationId: res.conversationId, //可选
    parentMessageId: res.id //可选
  })
  console.log(res.text)
}

消息存储

同样,ChatGPT 官方并未提供获取 Conversation 下所有历史会话信息的接口,因此想要存储历史会话消息,必须本地数据存储。

幸运的是,chatgpt-api 项目作为一个 Node 后端服务,也封装了数据存储接口。代码如下:

import KeyvRedis from '@keyv/redis'
import Keyv from 'keyv'
import { ChatGPTAPI } from 'chatgpt'

async function example() {
  // 选择存储在Redis中
  const redisUrl = process.env.REDIS_URL || 'redis://localhost:6379'
  const store = new KeyvRedis(redisUrl)
  const messageStore = new Keyv({ store, namespace: 'chatgpt-demo' })

  const api = new ChatGPTAPI({
    apiKey: process.env.OPENAI_API_KEY,
    messageStore
  })

  const res = await api.sendMessage('Hello World!', {
    conversationId: res.conversationId, //可选
    parentMessageId: res.id //可选
  })
  console.log(res.text)
}

但是,此 API 对 Redis 操作的支持很少,仅仅支持基本 String 类型数据的 get/set。

如果想要自定义数据结构,可以使用基于 Node 的其他 DB 依赖做数据处理。

其它相关推荐:

1、ChatGPT注册需要的手机号推荐


2、一键部署!1分钟拥有你自己的 ChatGPT网站,回答速度飞快!秒回

3、ChatGPT最新注册攻略


4、为什么说你一定要常用 ChatGPT?

5、无需等待 一键注册ChatGPT

分享到:

发表评论

评论列表