ChatGPT-Api
个人 ChatGPT 体验地址:http://chatgpt.tycoding.cn/
如果你觉得 ChatGPT 官网注册过于繁琐,可以看看这篇文章。
作者在自己的服务器上部署了一套服务,通过调用 ChatGPT-Api 实现。本篇文章将讲解 Api 的调用过程。
注意:上述服务使用作者个人账户 Key,因为 ChatGPT 逐渐开始收费,个人账户免费的调用额度并不多,不过可以部署一套服务先供给大家玩耍(大家请勿恶意访问,且用且珍惜)
有兴趣的朋友还是建议看作者上篇文章:2023 年了,不许还有人不知道怎么玩 ChatGPT
-
体验地址:http://chatgpt.tycoding.cn/ -
官方 API 文档:https://openai.com/api/ -
依赖的开源项目:https://github.com/transitive-bullshit/chatgpt-api/ -
本人 GitHub:https://github.com/tycoding
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 <API_KEY>`,
'Content-Type': 'application/json',
},
});
API_KEY
怎么拿到?
同样还是刚才的地址,可以创建本账户的 API KEY。目前而言,每个账户有免费的调用额度,超过额度后此账户就无法进行会话了(选择充值 20 美元/月、或者重新注册账号)。
免费的额度目前是 18 美元,在 5 月 1 号之前是免费的。
ChatGpt-Api
上面仅仅介绍了简单实用 JS 如何实现直接调用接口进行会话。
但是,我们知道,官网的会话其实是能识别上下文语境的,而使用上述直接掉接口的方式,是无法做到上下文语句的功能的,每次推送的消息都将是一个新的 ConversationId。
这里就要介绍一个比较著名的开源项目了:https://github.com/transitive-bullshit/chatgpt-api
此项目实现了会话上下文的支持,主要涉及两个参数:
{
conversationId, //此次会话的conversationId
parentMessageId //上次会话的messageId
}
提一嘴,官方的 API 文档中,并未出现这两个参数,但是 ConversationId 是确实存在的
但是官方 API 接口中并未暴露太多相关参数。
如何使用
注意:
-
此项目是基于 Node.js 的服务端项目,且 Node Version >= 18 -
此项目只能是作为 Node 服务端独立运行,不能在 Vite、Webpack 等 Web 组件中调用相关函数 -
不能在 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 依赖做数据处理。
联系我
-
个人博客:http://tycoding.cn[6] -
GitHub:https://github.com/tycoding -
微信公众号:程序员涂陌 -
QQ 交流群:866685601
原文始发于微信公众号(程序员涂陌):如何部署一套ChatGPT项目
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/145652.html