十分钟搭建一个免费的 OpenAI 服务

最近 chatGPT 十分火,也出现了许多依据 chatGPT 写的插件,本次文章准备解说一下依据 OpenAI 如何搭建一个 gpt 服务,并完成如下两个功用:

  • 完成内容对话
  • 完成依据内容生成 AI 图片

源码地址:github.com/MRwangqi/ch…

作用演示:

如下是作用演示:

  • 内容对话:http-nodejs-production-32b8.up.railway.app/chat?prompt…

十分钟搭建一个免费的 OpenAI 服务

  • AI 作画:http-nodejs-production-32b8.up.railway.app/image?promp…

十分钟搭建一个免费的 OpenAI 服务

本次内容会涉及到一点点 Node.js 的开发,但代码量很少(只要 56 行代码),我相信,从事 Android 开发的你,一定能看得懂。本文涉及到的知识点:
  • OPEN AI 开发者文档
  • Node.js 开发
  • Railway 布置(每个月有 5$ 的免费额度)

前期准备

1、OpenAI API 接入文档: platform.openai.com/docs/api-re… 2、获取 OpenAI API Keys 和 Organization 安排 ID (前提是有 OpenAI 账号) 点击链接 platform.openai.com/account/api… 获取 API Keys,假如没有,可点击 Create new secret key进行创立:

十分钟搭建一个免费的 OpenAI 服务

点击链接 platform.openai.com/account/org… 获取安排 ID:

十分钟搭建一个免费的 OpenAI 服务

正式开发

OpenAI API 文档提供了三种接入方法:

不管用哪种方法接入,所对应的运用方法都差不多,仅仅只是技能栈不同而已,咱们来看个 Http 恳求的示例 :

curl https://api.openai.com/v1/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "text-davinci-003",
  "prompt": "今天星期几?",
  "max_tokens": 7,
  "temperature": 0
}'

恳求参数:

  1. model :模型 Id,此处的文本生成模型为 GPT-3
  2. prompt:提示语
  3. max_tokens:回复成果的最大 tokens 数量,依据模型所定,有的最大2048,有的 4096,依据官网 tokenizer 描绘,关于普通英文文本,100 个 tokens 差不多等于 75 个单词,具体计算规矩可检查 platform.openai.com/tokenizer
  4. temperature:采样准确度,介于 0~2 之间,值越低约准确。

以官方示例为准,咱们运用 Node.js 开端开发(需求装置 Node 环境,可自行查找装置)。 履行初始化环境指令,依据提示完成项目创立

npm init

履行装置 openai 依靠指令:

npm install openai

装置完成后,咱们在当前目录创立个 index.js 文件,为了能加载 ES 模块,咱们还需在 package.json 中添加下 "type": "module",复制官方示例到该文件下,并替换掉 organization 安排 Id 与 apiKey 即可,装备作用如下:

十分钟搭建一个免费的 OpenAI 服务

假如 API KEY 和安排 Id 装备正确的话,咱们能够履行运行指令:

node index.js

假如控制台没有任何报错的话,则表示装备成功,假如控制台有打印日志,则需求检查是 API KEY 装备不正确,仍是安排 ID 装备不正确。

接下来,咱们在此基础上,运用 gpt-3 文本模型开发功用:

// ... 省掉上面代码
const res = await openai.createCompletion({
  // text 模型
  model: "text-davinci-003",
  prompt: "周杰伦有多少张专辑?",
  max_tokens: 2048,
  temperature: 0.2
})
// 打印成果
console.log(res.data.choices)

这儿咱们询问 周杰伦有多少张专辑?,并履行 node index.js,检查打印的成果:

十分钟搭建一个免费的 OpenAI 服务

一个简单的问答成果出来了,接下来,咱们暂时注释掉该段代码,测验下 AI 作画的才能,编辑如下代码:

// ... 省掉上面代码
const res = await openai.createImage({
    model: "image-alpha-001",
    prompt: "空山新雨后,气候晚来秋",
    size: "256x256",
    n: 1
})
// 打印图片 url
var url = res.data.data[0].url
console.log(url)
  • model 为 AI 图片模型
  • prompt 为描绘的内容,这儿,咱们引证古诗,来检查终究的作用
  • size 为生成的图片大小
  • n 为生成的张数,这儿咱们就填写一张

履行成功后,会打印图片的 url:

十分钟搭建一个免费的 OpenAI 服务

咱们将其复制出来到浏览器检查:

十分钟搭建一个免费的 OpenAI 服务

为了使这两个功用通过服务的方法拜访,咱们还需求装置两个依靠 koa 和 koa-router,履行如下指令装置:

npm install koa koa-router

重新编辑 index.js 文件,引进 koa 和 koa-router:

import Koa from "koa"
import Router from "koa-router";
// ... 省掉 openai 初始化代码
const app = new Koa()
const router = new Router();
router.get("/chat", async (ctx, next) => {
    // 获取恳求中的 prompt 参数
    const { prompt } = ctx.request.query;
    const res = await openai.createCompletion({
        model: "text-davinci-003",
        prompt: prompt,
        max_tokens: 2048,
        temperature: 0.2
    })
    // 将生成的内容回来给客户端
    ctx.body = res.data.choices
});
// 启用路由
app.use(router.routes()).use(router.allowedMethods());
// 启动服务器,端口暂时设置为 3000
app.listen(3000, () => {
    console.log("Server is started ");
});

总体过程就是启用个端口为 3000 的服务,将本来履行的代码放到了 /chat 路由途径中,拜访该途径即可履行该代码回来成果,接下来,咱们持续履行 node index.js指令,然后拜访如下链接:

http://localhost:3434/chat?prompt=周杰伦是谁

十分钟搭建一个免费的 OpenAI 服务

一个简单的服务拜访已经开发好了,接下来,咱们需求脱敏,将安排 ID、API KEY、端口 等设置成环境变量,并推到自己的 github 中(Railway 布置时需求挑选该库房),能够直接挑选该项目,以避免秘钥泄漏,咱们将其改成:
  • process.env.APP_ORG
  • process.env.APP_KEY
  • process.env.PORT

具体操作代码可直接检查源码,这儿就不贴了,避免代码太多影响阅览,接下来,咱们需求开端布置应用了。

布置应用

拜访 railway.app/dashboard 链接,主张运用 Github 方便登录 Railway ,并点击 New Project创立项目:

十分钟搭建一个免费的 OpenAI 服务

这儿咱们直接挑选 Depoly from Github repo,直接挑选自己库房里的项目:

十分钟搭建一个免费的 OpenAI 服务

找到自己刚刚 push 到 github 的库房,例如,我挑选的项目是 chatGPT-nodejs 库房,你也能够直接 fork 我这个库房,找到该库房进行布置:

十分钟搭建一个免费的 OpenAI 服务

咱们挑选该项目,先不着急布置,咱们先把前面的环境变量先设置上:

十分钟搭建一个免费的 OpenAI 服务

挑选 `New Variable`创立 APP_ORG 和 APP_KEY 环境变量,并将对应的值写入到 value 中:

十分钟搭建一个免费的 OpenAI 服务

完成添加之后,Railway 会自动布置项目,咱们挑选左边的 `Depolyments`检查布置成果:

十分钟搭建一个免费的 OpenAI 服务

布置成功之后,咱们需求生成 Domains 链接,咱们持续点击右边的 Settings 选项卡,挑选 `generate Domain`,此时会生成布置的域名链接:

十分钟搭建一个免费的 OpenAI 服务

咱们拿到该链接,就能够开端拜访了,复制此链接,咱们来拜访下 AI 作画(链接+路由):

chatgpt-nodejs-production.up.railway.app/image?promp…

十分钟搭建一个免费的 OpenAI 服务