UNPKG

doomiaichat

Version:

Doomisoft OpenAI

93 lines (92 loc) 4.55 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const declare_1 = require("./declare"); const gptbase_1 = __importDefault(require("./gptbase")); const TOKEN_CACHE_KEY = "key:_doomisoft:baiduwenxin:"; class BaiduWenXinAI extends gptbase_1.default { /** * * @param credential 调用OpenAI 的key * @param cacher 用作accesstoken的缓存 * @param apiOption 用作accesstoken的缓存 */ constructor(credential, cacher) { super(); this.credential = credential; this.Cacher = cacher; } /** * 获取调用Api的Token */ getAccessToken() { return __awaiter(this, void 0, void 0, function* () { ////如果当前应用是一个委托到第三方的 ///公众号或小程序,则需要用关联的第三方平台来获取api调用的accesstoken ////如果是需要缓存token,则首先看缓存中是否有AccessToken const accesstoken = this.Cacher ? (yield this.Cacher.get(TOKEN_CACHE_KEY + this.credential.apikey)) : null; if (accesstoken) return { successed: true, access_token: accesstoken }; const option = { url: `https://wenxin.baidu.com/moduleApi/portal/api/oauth/token?grant_type=client_credentials&client_id=${this.credential.apikey}&client_secret=${this.credential.securitykey}`, method: "post", }; const tokenData = yield (0, declare_1.request)(option); if (tokenData.successed == true && !tokenData.data.code) { ///把api accesstoken缓存起来 if (this.Cacher) { this.Cacher.set(TOKEN_CACHE_KEY + this.credential.apikey, tokenData.data.data, 3600 * 20); } return { successed: true, access_token: tokenData.data.data }; } return { successed: false, error: tokenData.data.msg }; }); } /** * 请求GPT接口 */ chatRequest(chatText, _paramOption, axiosOption = {}) { return __awaiter(this, void 0, void 0, function* () { console.log('call baidu'); if (!chatText) return { successed: false, error: { errcode: 2, errmsg: '缺失聊天的内容' } }; const accessToken = yield this.getAccessToken(); if (!accessToken.successed || !accessToken.access_token) return { successed: false, error: 'accesstoken get failed' }; try { let param = Object.assign(Object.assign({}, axiosOption), { method: "post", data: { text: `问题:${chatText}\n回答:`, seq_len: 512, topp: 0.5, penalty_score: 1.2, min_dec_len: 12, min_dec_penalty_text: "。?:![<S>]", task_prompt: "qa", mask_type: "paragraph" }, url: `https://wenxin.baidu.com/moduleApi/portal/api/rest/1.0/ernie/3.0.25/zeus?access_token=${accessToken.access_token}` }); console.log('param', param); const response = yield (0, declare_1.request)(param); if (response.successed && !response.data.code) { return Object.assign({ successed: true }, response.data); } return Object.assign({ successed: false }, response.data); } catch (error) { console.log('result is error ', error); return { successed: false, error }; } }); } } exports.default = BaiduWenXinAI;