UNPKG

aisapi

Version:

A JavaScript/TypeScript API library for multiple AI providers

209 lines 8.08 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZhipuProvider = exports.ZhipuModel = void 0; const base_1 = require("./base"); /** * 智谱AI可用模型 */ var ZhipuModel; (function (ZhipuModel) { ZhipuModel["GLM_4"] = "glm-4"; ZhipuModel["GLM_3_TURBO"] = "glm-3-turbo"; ZhipuModel["CHATGLM_PRO"] = "chatglm_pro"; // 旧版对话优化模型 })(ZhipuModel || (exports.ZhipuModel = ZhipuModel = {})); /** * 智谱AI API实现 */ class ZhipuProvider extends base_1.BaseProvider { /** * 创建智谱AI提供商实例 */ constructor(options = {}) { super(options); this.name = 'Zhipu'; this.model = options.model || ZhipuModel.GLM_3_TURBO; } /** * @inheritdoc */ getDefaultBaseUrl() { return 'https://open.bigmodel.cn/api/paas/v4'; } /** * 获取请求头 */ getHeaders() { const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${this.apiKey}` }; return headers; } /** * @inheritdoc */ generateText(params) { return __awaiter(this, void 0, void 0, function* () { const model = params.model || this.model; // 准备请求体 const messages = [ { role: 'user', content: params.prompt } ]; // 如果有系统消息,添加到消息列表开头 if (params.systemMessage) { messages.unshift({ role: 'system', content: params.systemMessage }); } // 使用聊天完成API return this.chatCompletion({ model, messages, maxTokens: params.maxTokens, temperature: params.temperature, topP: params.topP, stream: params.stream }); }); } /** * 聊天完成API */ chatCompletion(params) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; const requestBody = { model: params.model || this.model, messages: params.messages, max_tokens: params.maxTokens, temperature: (_a = params.temperature) !== null && _a !== void 0 ? _a : 0.7, top_p: params.topP, stream: params.stream || false }; // 移除undefined字段 Object.keys(requestBody).forEach(key => { if (requestBody[key] === undefined) { delete requestBody[key]; } }); // 发送请求 try { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), this.timeout); const response = yield fetch(`${this.baseUrl}/chat/completions`, { method: 'POST', headers: this.getHeaders(), body: JSON.stringify(requestBody), signal: controller.signal }); clearTimeout(timeoutId); if (!response.ok) { throw new Error(`API请求失败: ${response.status} ${response.statusText}`); } const data = yield response.json(); return { text: data.choices[0].message.content || '', usage: { promptTokens: ((_b = data.usage) === null || _b === void 0 ? void 0 : _b.prompt_tokens) || 0, completionTokens: ((_c = data.usage) === null || _c === void 0 ? void 0 : _c.completion_tokens) || 0, totalTokens: ((_d = data.usage) === null || _d === void 0 ? void 0 : _d.total_tokens) || 0 }, rawResponse: data }; } catch (error) { if (error instanceof Error) { throw new Error(`[${this.name}] ${error.message}`); } throw error; } }); } /** * 流式聊天完成 */ createStreamingChatCompletion(params) { return __awaiter(this, void 0, void 0, function* () { var _a; const requestBody = { model: params.model || this.model, messages: params.messages, max_tokens: params.maxTokens, temperature: (_a = params.temperature) !== null && _a !== void 0 ? _a : 0.7, top_p: params.topP, stream: true }; // 移除undefined字段 Object.keys(requestBody).forEach(key => { if (requestBody[key] === undefined) { delete requestBody[key]; } }); const headers = this.getHeaders(); const url = `${this.baseUrl}/chat/completions`; try { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), this.timeout); const response = yield fetch(url, { method: 'POST', headers, body: JSON.stringify(requestBody), signal: controller.signal }); clearTimeout(timeoutId); if (!response.ok) { throw new Error(`API请求失败: ${response.status} ${response.statusText}`); } return response.body; } catch (error) { if (error instanceof Error) { throw new Error(`[${this.name}] ${error.message}`); } throw error; } }); } /** * 生成JSON格式输出 */ generateJSON(params) { return __awaiter(this, void 0, void 0, function* () { const model = params.model || this.model; // 构建系统消息,指示返回JSON格式 const systemMessage = params.systemMessage ? `${params.systemMessage}\n请以有效的JSON格式返回回复。` : '请以有效的JSON格式返回回复。'; const messages = [ { role: 'system', content: systemMessage }, { role: 'user', content: params.prompt } ]; const response = yield this.chatCompletion({ model, messages, maxTokens: params.maxTokens, temperature: params.temperature || 0.1, // 降低温度以获得更确定的响应 topP: params.topP, stream: false }); try { // 尝试解析响应文本为JSON return JSON.parse(response.text); } catch (error) { // 如果解析失败,返回原始文本 console.warn(`[${this.name}] 无法解析响应为JSON: ${error instanceof Error ? error.message : '未知错误'}`); return { text: response.text, error: '解析JSON失败' }; } }); } } exports.ZhipuProvider = ZhipuProvider; //# sourceMappingURL=zhipu.js.map