关于chatgpt:三分钟搭建一个自己的-ChatGPT-从开发到上线

44次阅读

共计 3342 个字符,预计需要花费 9 分钟才能阅读完成。

原文链接:https://icloudnative.io/posts/build-chatgpt-web-using-laf/

OpenAI 曾经颁布了 ChatGPT 正式版 API,背地的新模型是 gpt-3.5-turbo,这是 OpenAI 目前最先进的模型,响应速度更快,价格更便宜。

作为开发人员,咱们还是心愿通过 API 将 ChatGPT 和相干模型集成到本人的产品和利用中,难堪的是,目前无法访问 ChatGPT API,起因大家都懂得。于是网上呈现了各种各样的 API 反代服务,咱们能够间接通过反代服务来变相拜访 ChatGPT API。

即便咱们解决了 API 的拜访问题,还要筹备一个开发环境,比方对于 Node.js 客户端来说,须要筹备一个 Node.js 环境。

有没有一种简略快捷的办法来调用 ChatGPT API 呢?

那当然是用 Laf 了。

Laf 是一个 齐全开源 的一站式云开发平台,提供了开箱即用的云函数,云数据库,对象存储等能力,让你能够像写博客一样写代码。

GitHub:https://github.com/labring/laf

如果你心愿疾速理解 Laf 的用法,能够参考这篇文章:三分钟学会 Laf。

言归正传,上面咱们开始计时,三分钟工夫用 Laf 实现一个本人的 ChatGPT!

前提条件:你须要筹备一个 ChatGPT 账号并且生成一个 API Key (这一步能够问 Google)

云函数教学

首先须要登录 laf.dev,而后新建一个利用。

点击开发按钮进入开发页面。

在 NPM 依赖面板中点击右上角的 +

而后输出 chatgpt 并回车进行搜寻,抉择第一个搜寻后果,保留并重启:

重启之后,自定义依赖项中便呈现了 chatgpt。

而后就能够像我一样新建一个云函数名字叫 send,并写入以下内容:

import cloud from '@lafjs/cloud'
export async function main(ctx: FunctionContext) {const { ChatGPTAPI} = await import('chatgpt')
  const api = new ChatGPTAPI({apiKey: cloud.env.CHAT_GPT_API_KEY})

  let res = await api.sendMessage('“鸡你太美”指的是中国大陆哪位男艺人?给你个提醒,他喜爱唱、跳、篮球、Rap')
  console.log(res.text)

  return res.text
}

API Key 是通过环境变量 CHAT_GPT_API_KEY 传入的,所以咱们还须要创立一个环境变量。点击左下角的设置图标:

顺次抉择「环境变量」–>「新增环境变量」,输出环境变量的名称和值,而后点击「确定」,再点击「更新」,便会重启利用。

当初点击右上角的「运行」,即可调试运行。

Perfect!当初咱们来试试增加 追踪上下文 的性能。其实也很简略,只须要在对话时传入上一次对话的 ID 即可,代码如下:

import cloud from '@lafjs/cloud'
export async function main(ctx: FunctionContext) {const { ChatGPTAPI} = await import('chatgpt')
  const api = new ChatGPTAPI({apiKey: cloud.env.CHAT_GPT_API_KEY})

  let res = await api.sendMessage('“鸡你太美”指的是中国大陆哪位男艺人?给你个提醒,他喜爱唱、跳、篮球、Rap')
  console.log(res.text)

  // 传入 parentMessageId 追踪上下文
  res = await api.sendMessage('不对,他姓蔡,请从新答复', {parentMessageId: res.id})
  console.log(res.text)

  return res.text
}

运行一下看看:

好厉害,居然两次就答对了我的问题!

好了,当初才开始真的计时,因为刚刚是教学环节,不计入耗时😁

云函数

接下来咱们就能够开始入手打造本人的 ChatGPT 了,首先把上一节的函数替换为上面的内容:

import cloud from '@lafjs/cloud'

export async function main(ctx: FunctionContext) {const { ChatGPTAPI} = await import('chatgpt')
  const data = ctx.body

  // 这里须要把 api 对象放入 cloud.shared 不然无奈追踪上下文
  let api = cloud.shared.get('api')
  if (!api) {api = new ChatGPTAPI({ apiKey: cloud.env.CHAT_GPT_API_KEY})
    cloud.shared.set('api', api)
  }

  let res
  // 这里前端如果传过来 parentMessageId 则代表须要追踪上下文
  if (!data.parentMessageId) {res = await api.sendMessage(data.message)
  } else {res = await api.sendMessage(data.message, { parentMessageId: data.parentMessageId})
  }
  return res
}

当初应该很好了解这个函数了吧?

前端

咱们要实现的是 Web 版 ChatGPT,所以还须要一个前端页面。首先须要装置 Laf 的 SDK:

$ npm install laf-client-sdk

接下来,须要创立一个 cloud 对象:

import {Cloud} from "laf-client-sdk"; 

// 创立 cloud 对象 这里须要将 <appid> 替换成本人的 App ID
const cloud = new Cloud({
  baseUrl: "https://<appid>.laf.dev",
  getAccessToken: () => "", // 这里不须要受权,先填空});

这里咱们看一下前端的外围代码,十分的简略,就是把发问的内容和上下文 id 传入云函数就能够了。

async function send() {

// 咱们发问的内容
const message = question.value;

let res;
// 与云函数逻辑一样,有上下文 id 就传入
if (!parentMessageId.value) {res = await cloud.invoke("send", { message});
} else {res = await cloud.invoke("send", { message, parentMessageId: parentMessageId.value});
}

// 回复咱们的内容在 res.text 

// 这个是上下文 id
parentMessageId.value = res.id;
}

到这一步 咱们曾经能够发信息给 ChatGPT 并且拿到回复的音讯了。

咱们只有略微加 亿点点 细节,就能够变成这样:

加完这点细节之后,根本开发工作就实现了,接下来就是把我的项目上线分享给你的敌人,顺便装个杯。

说到上线咱们当初应该要去买一台服务器装置 Nginx,配置 Nginx,解析域名,绑定域名 …

NO NO NO 我不容许你节约年老而美妙的生命,life is short, you need laf 😃

上线

关上你的 Laf,点击存储界面 –> 点击上方加号 –> 创立一个权限为 readonly 的存储桶(名字随便)。

创立完之后,在你的前端我的项目中运行打包命令。我这里用的是 npm run build

打包结束之后找到打包好的 dist 文件夹,像我一样把 dist 文件外面的所有货色都上传到咱们刚刚创立的存储桶外面,记住是一成不变的上传哦,文件就是文件,文件夹就是文件夹。

上传完毕之后,发现右上角有一个“开启网站托管”,点一下它!

点完之后进去一个链接,咱们点击一下拜访看看是啥货色。

哦!我的老天鹅呀 这不就是我刚刚开发的我的项目吗??

祝贺,到这里你的我的项目曾经上线了,快分享给你的好敌人吧!


  • 我的项目源码:https://github.com/zuoFeng59556/chatGPT
  • 示例网站:https://jyf6wk-chat-gpt.site.laf.dev/

正文完
 0