UNPKG

@agentkai/core

Version:

AgentKai核心包,提供AI助手系统的基础功能

127 lines (122 loc) 4.15 kB
import OpenAI from 'openai'; import { v4 as uuidv4 } from 'uuid'; import { Logger } from '../utils/logger'; export class OpenAIModel { constructor(config) { Object.defineProperty(this, "client", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "config", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "logger", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.config = config; this.client = new OpenAI({ apiKey: config.apiKey, baseURL: config.apiBaseUrl, dangerouslyAllowBrowser: true, }); this.logger = new Logger('OpenAIModel'); } async generateText(prompt) { try { const response = await this.client.chat.completions.create({ model: this.config.model, messages: [{ role: 'user', content: prompt }], temperature: this.config.temperature, max_tokens: this.config.maxTokens, }); return response.choices[0].message?.content || ''; } catch (error) { this.logger.error('生成文本失败:', error); throw error; } } async generateResponse(messages) { try { const response = await this.client.chat.completions.create({ model: this.config.model, messages: messages.map((content) => ({ role: 'user', content })), temperature: this.config.temperature, max_tokens: this.config.maxTokens, }); const promptTokens = response.usage?.prompt_tokens || 0; const completionTokens = response.usage?.completion_tokens || 0; return { response: response.choices[0].message?.content || '', tokens: { prompt: promptTokens, completion: completionTokens, total: promptTokens + completionTokens, }, }; } catch (error) { this.logger.error('生成响应失败:', error); throw error; } } async generateDecision(context) { try { const prompt = this.buildDecisionPrompt(context); const response = await this.generateText(prompt); const parsed = JSON.parse(response); return { id: uuidv4(), action: parsed.action || 'respond', confidence: parsed.confidence || 0.5, reasoning: parsed.reasoning || '基于输入生成的决策', timestamp: Date.now(), context: { memories: context.memories.map((m) => m.content), tools: context.tools.map((t) => t.name), goals: [], }, }; } catch (error) { this.logger.error('解析决策失败:', error); return { id: uuidv4(), action: 'error', confidence: 0.5, reasoning: '解析决策失败', timestamp: Date.now(), context: { memories: [], tools: [], goals: [], }, }; } } buildDecisionPrompt(context) { const memories = context.memories.map((m) => m.content).join('\n'); const tools = context.tools.map((t) => t.name).join(', '); return `基于以下信息做出决策: 记忆: ${memories} 可用工具: ${tools} 环境信息: ${JSON.stringify(context.environment, null, 2)} 请以JSON格式返回决策,包含以下字段: { "action": "要执行的动作", "confidence": 0-1之间的数字, "reasoning": "推理过程" }`; } }