doomiaichat
Version:
Doomisoft OpenAI
93 lines (92 loc) • 4.55 kB
JavaScript
;
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;