@agentkai/core
Version:
AgentKai核心包,提供AI助手系统的基础功能
127 lines (122 loc) • 4.15 kB
JavaScript
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": "推理过程"
}`;
}
}