记一次与ChatGPT斗争的心酸史,最后靠AIGCaaS取胜

最近ChatGPT非常火爆,听说要干掉程序员,写程序有嘴就行剩下的交给AI,作为程序员的我立马跳起来,打开搜索款,就是一顿劈里啪啦,我得看看究竟是何方神圣,竟然抢我饭碗。
映入眼帘的是这样一个场景。
记一次与ChatGPT斗争的心酸史,最后靠AIGCaaS取胜_第1张图片
瓦特?不让用!好家伙,这对于程序员来说不是事,立马化身米国人,就这么进来了,小Case嘛,谷歌账号登入,一顿操作猛如虎,最后卡在了手机号上,国内的用不了,最终靠机智解决手机号的问题,顺利的进来了。然后开心的用了起来,确实厉害,也确实震惊到我这个CV工程师了。既然这么厉害,就用你来出苦力了。脑海中有了绝妙的idea,就差一个程序员了,巧了么不是,刚好我就是程序员!决定用api搞点事情,搞个小程序用AI造福一下大众,调试的过程中发现频率有限制。这怎么玩,这不是逼我注册多个账号搞轮询吗?注册太麻烦了,那就求助万能的淘宝了。搞了10个号,开心的玩耍了起来。开心是开心,但不多,没几天我那一批号全被封了。我整个人都麻了,一顿操作等于白搭,网传可能是服务器ip的问题,轮询的问题,绑的黑卡,账号注册的问题,反正就是各种猜,没人知道具体原因,我也懒得知道了。痛失一笔巨款啊,我的账号费我的服务器费。为了保证我小程序的正常服务,我只能看看国内有没有这种api服务,让他们去封装好,我直接调就完了,还真让我找到了。确实好用,我都忍不住想分享给大家。
记一次与ChatGPT斗争的心酸史,最后靠AIGCaaS取胜_第2张图片
api非常齐全,费用也非常感人,Chatgpt一次调用0.4金币,1块对应1000金币,我滴妈简直不要钱。除了chatgpt还有其他的图像,音频,各种接口。这里我就不说了,文下有链接。闲聊结束了开始上硬货了,整合代码如下。

const axios = require('axios');
const crypto = require('crypto');

// 密钥信息获取与帮助文档:https://www.aigcaas.cn/article/16.html

const secret_id = '<请替换为自己的密钥信息: SecretId>' // 密钥信息
const secret_key = '<请替换为自己的密钥信息: SecretKey>' // 密钥信息
const application_name = 'chatgpt_chat' // 应用名称
const api_name = 'chat_com' // 接口名称

// 请求地址
const url = `https://api.aigcaas.cn/product/${application_name}/api/${api_name}`

// 构建请求头
const timestamp = Math.round(new Date() / 1000);
const nonce = 10000 + Math.round(Math.random() * 90000);
const hash = crypto.createHash('sha256');
hash.update(`${timestamp}${secret_key}${nonce}`);
const token = hash.digest('hex');
const headers = {
    'SecretID': secret_id,
    'Nonce': nonce,
    'Token': token,
    'Timestamp': timestamp,
    'Content-Type': 'application/json'
}

// 构建请求 body
const data = {
    "messages": ""
};

// 获取响应
axios({
    method: 'post',
    url: url,
    headers: headers,
    data : JSON.stringify(data),
})
.then(function (response) {
    console.log(JSON.stringify(response.data));
})
.catch(function (error) {
    console.log(error);
});

// 如果是流式响应,可以参考以下代码
// const response = await axios.post(url, {
//   headers: headers, 
//   data : JSON.stringify(data),
//   responseType: 'stream'
// });
// 
// const stream = response.data
// stream.on('data', data => { 
//   data = data.toString()
//   console.log(data) 
// })

​支持json和流式返回。文档中还有python和golang的具体可以去网站查看。我这里使用的云平台式laf,简直是前端开发的福音,3分钟你就会爱上他(文末有地址)也是目前为止我知道的唯一一个支持websocket的云开发平台。在微信小程序上面实现了流式返回的就是基于websocket,下面有小程序的码,欢迎体验,感受一下文字在你面前跳动的感觉。
具体的socket代码,laf的文档很详细,我这里简单写一下

import cloud from '@lafjs/cloud'

export async function main(ctx: FunctionContext) {
  // 初始化 websocket user Map 列表
  // 也可用数据库保存,本示例代码用的 Laf 云函数的全局缓存
  let wsMap = cloud.shared.get("wsMap") // 获取 wsMap
  if(!wsMap){
    wsMap = new Map()
    cloud.shared.set("wsMap", wsMap) // 设置 wsMap
  }
  // websocket 连接成功
  if (ctx.method === "WebSocket:connection") {
    const userId = generateUserId()
    wsMap = cloud.shared.get("wsMap") // 获取 wsMap
    wsMap.set(userId, ctx.socket);
    cloud.shared.set("wsMap", wsMap) // 设置 wsMap
    ctx.socket.send("连接成功,你的 userID 是:"+userId);
  }

  // websocket 消息事件
  if (ctx.method === "WebSocket:message") {
    const { data } = ctx.params;
     //在这一块调用aigcaas的接口,并通过ctx.socket.send返回给小程序
    console.log("接收到的信息:",data.toString());
    const userId = getKeyByValue(wsMap, ctx.socket);
    ctx.socket.send("服务端已接收到消息事件,你的 userID 是:"+userId);
  }

  // websocket 关闭消息
  if (ctx.method === "WebSocket:close") {
    wsMap = cloud.shared.get("wsMap") // 获取 wsMap 
    const userId = getKeyByValue(wsMap, ctx.socket);
    wsMap.delete(userId);
    cloud.shared.set("wsMap", wsMap) // 设置 wsMap
    ctx.socket.send("服务端已接收到关闭事件消息,你的 userID 是:"+userId);
  }
}
// 生成随机用户 ID 
function generateUserId() {
  return Math.random().toString(36).substring(2, 15);
}

// 遍历 userID
function getKeyByValue(map, value) {
  for (const [key, val] of map.entries()) {
    if (val === value) {
      return key;
    }
  }
}

​具体代码可以自己去调试一下,laf可以创建免费一个月的服务。

我的基于ChatGPT的小程序——AI麻瓜
记一次与ChatGPT斗争的心酸史,最后靠AIGCaaS取胜_第3张图片
API网站:
https://www.aigcaas.cn/index.html
laf 云开发
https://laf.run/

你可能感兴趣的:(记一次与ChatGPT斗争的心酸史,最后靠AIGCaaS取胜)