如何在5分钟内用GPT调教一个专属于你的小黑子?

释放双眼,带上耳机,听听看~!
本文介绍如何利用GPT终端在5分钟内调教一个专属于你的小黑子,包括使用GPT生成图片的简单接口调用和后端实战的操作。

专栏目录

耗时一下午,我实现了 GPT Terminal,真正拥有了专属于我的 GPT 终端!

如何用 GPT 在 5 分钟内 ”调教“ 出一个专属于你的 ”小黑子“?

如何丝滑实现 GPT 打字机流式回复?Server-Sent Events!

我是如何让我的 GPT Terminal “长记性” 的?还是老配方!

一个合格的类 GPT 应用需要具备什么?一文带你打通 GPT 产品功能!

开发一个 ChatGPT 真的只是当 “接口侠” 吗?GPT Terminal 细节分享!

如何借助于 OpenAI 以命令的方式在 GPT 终端上画一只 “坤”?

不满足当 ChatGPT “接口侠”?轻松可视化 Fine-tuning 训练你的模型!

耗时一下午,我终于上线了我的 GPT 终端!(内含详细部署方案记录)

项目地址:中文文档

会话补全功能咱们在之前的文章中已经多次提到了,其实就是常规意义上的聊天功能。而使用图片生成功能则要更加简单一些,如下即为接口内容。大家可以在自己的终端中直接执行,执行之前记得配置好 API Key 哦!

curl https://api.openai.com/v1/images/generations 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer $OPENAI_API_KEY" 
  -d '{
    "prompt": "A cute baby sea otter",
    "n": 2,
    "size": "1024x1024"
  }'

这其实就是一个很常规的接口调用,接口参数有:

  • prompt – 所要生成图片的提示内容,比如:一只 🐔
  • n – 生成图片的数量,经过测试后我发现免费用户的 API Key 一次最多 5 张
  • size – 图片的尺寸大小,可供选择有:256x256 / 512x512 / 1024x1024

其中,prompt 是必填参数,nsize 是可选参数,n 默认为 1,size 默认为 1024x1024(可恶,默认大图好赚钱是吧!)

接口的返回内容也是很简洁的,包含了创建时间与图片 url 数组,咱们通过访问该 url 地址,便可获取到图片啦!

{
  "created": 1589478378,
  "data": [
    {
      "url": "https://..."
    },
    {
      "url": "https://..."
    }
  ]
}

GPT Terminal 项目实战

相信大家看了接口之后,会觉得竟然如此简单。没错,就是这么简单!咱们火速进入实战环节!

首先,咱们需要在 GPT Terminal 的前端中请求后端服务,其中定义了图片生成接口。在该后端接口中,去请求 OpenAI 服务。如果大家看了之前的系列文章,一定会对这个流程十分熟悉。

如何在5分钟内用GPT调教一个专属于你的小黑子?

后端实战

后端服务中,我集成了 OpenAI 提供的 SDK 包,咱们可以通过简单的方法直接调用 OpenAI 提供的服务。

如下代码位于项目 server/src/thirdpart/gptApi/gptApi.js 文件

// 配置 API Key,得到操作 OpenAI 接口的对象
const configuration = new Configuration({
  apiKey: gptConfig.key,
});
const openai = new OpenAIApi(configuration);

// 生成图片的方法
async function createImage(prompt, number = 1, size = "256x256") {
  const res = await openai.createImage({
    prompt: prompt,
    n: number,
    size: size,
  });
  console.log(res.data.data);
  if (res?.data?.data && res?.data?.data?.length) {
    return res.data.data;
  }
  throw new Error("Failed to get response from OpenAI service.");
}

这段代码很简单,相信聪明的大家一看就懂!

首先我们需要配置 OpenAI,以便于操作接口。之后通过 OpenAI SDK 中提供的 createImage 方法得到响应结果。在进行基本的判断后,将结果返回。

  • 其中,我们需要注意的是 nsize 并非必填参数。虽然 OpenAI 接口中有默认参数,但默认尺寸是最大的,花钱也最多,所以我们将 size 默认值设置为 256x256(绝不能让它薅我们羊毛!)

在写好 OpenAI 第三方服务的代码后,我们还需要写一个后端接口,并暴露给前端,使前端能够进行调用。

如下代码位于项目 server/src/controller/gptController.js 文件

async function getGptImage(event, req, res) {
  try {
    let authResp = await openaiAuth();
  } catch (e) {
    throw new MyError(NO_AUTH_ERROR_CODE, "API Key 配置不正确");
  }
  console.log("event -", event);
  if (event.prompt === "") {
    throw new MyError(REQUEST_PARAMS_ERROR_CODE, "生成图像提示不能为空");
  }

  if (event.number && (event.number > 5 || event.number < 1)) {
    throw new MyError(REQUEST_PARAMS_ERROR_CODE, "图片数量必须为1~5之间的整数");
  }
  if (
    event.size &&
    event.size != "256x256" &&
    event.size != "512x512" &&
    event.size != "1024x1024"
  ) {
    throw new MyError(REQUEST_PARAMS_ERROR_CODE, "生成图像尺寸格式错误");
  }
  return await createImage(
    event.prompt,
    event.number || 1,
    event.size || "256x256"
  );
}

在如上代码中,我们需要对前端传入的参数进行额外的校验。此外,我们还看到方法一开始调用了 openaiAuth 方法,对 API Key 进行了校验。这个方法其实是我调用了 OpenAI 提供的 listModels 方法,其主要目的就是为了判断你能否正常请求到它的服务。

前端校验往往是不可靠的,后端的这层校验是必须的

如下代码位于项目 server/src/thirdpart/gptApi/gptApi.js 文件

// API Key 验证
async function openaiAuth() {
  return await openai.listModels();
}

前端实战

前端流程其实相对比较复杂,因为其中涉及到了 命令读取命令解析 流程,但是这部分并不是我们今天重点关注的,暂时跳过。如果大家对其感兴趣,可以看看 GPT Terminal 项目源码中的 src/core 部分。或者你也可以直接问我,我会在 24 小时内解答。

在前端代码中,咱们也需要定义一个调用方法,去请求后端服务。

如下代码位于项目 src/core/commands/gpt/subCommands/image/imageApi.ts 文件

import myAxios from "../../../../../plugins/myAxios";

export const getImage = async (
  prompt: string,
  number: number,
  size: string
) => {
  return await myAxios.post("/gpt/getImage", {
    prompt,
    number,
    size,
  });
};

之后,咱们通过在 ImageBox.vue 组件中调用此方法,获取返回的响应结果,并将其渲染到页面中即可!

onMounted 方法中,即组件加载时,咱们去调用后端接口,并处理响应结果

如下代码位于项目 src/core/commands/gpt/subCommands/image/ImageBox.vue 文件

const res: any = await getImage(prompt.value, number.value, size.value)
if (res?.code !== 0) {
    // 服务端异常处理
    return;
}
imageUrlList.value = res.data

最后,咱们将 mageUrlList渲染到组件中。

在这里,我使用了 Ant-Design-Vue 提供的 GridImage 组件。

<a-row :gutter="[0, 40]">
    <a-col :span="4" v-for="(item, index) in imageUrlList" :key="index">
        <a-image :src="item.url" />
    </a-col>
</a-row>

如果大家去看 GPT Terminal 代码的话,会发现 onMounted 方法中除了请求后端接口,还包含了其它操作,如定时器控制 Loading、向父组件发送事件等。

这些代码讲解位于 上一篇文章 中。

结果展示

代码已经完工!咱们就来测试一下看看,在 GPT Terminal 中画一只 “坤” 是什么样的体验!

如何在5分钟内用GPT调教一个专属于你的小黑子?

总结

今天给大家讲解并展示了如何用 OpenAI 提供的 AI 图片生成接口,为我们生成 “坤”(小黑子油饼食不食!),咱们在日后做自己的 ChatGPT 应用的过程中,也应该多多参考官方提供的文档教程,而且其中还有很多有意思并且值得探索的东西。

后记

那么今天就先到这里啦!

最后再小小地提一下,GPT Terminal 目前已经基本实现了主体功能啦,还有一些 Bug 需要修改,如果大家想要了解 GPT Terminal 项目的更多细节与解锁更多玩法的话,请到其主页查看哦。

如果各位小伙伴关于文章或项目有什么不懂的地方,请直接提出 Issue,我会在 24 小时内回复!

看在我这么认真的份上,大家点个 Star、点个赞不过分吧(磕头!)下期再见!

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

Adapter Tuning:大模型参数高效微调技术原理综述(四)

2023-12-19 10:43:14

AI教程

Elyra图形化构建Pipeline指南

2023-12-19 10:56:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索