UNPKG

n8n-nodes-openai-analytics

Version:
113 lines (112 loc) 4.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.textClassifierAgent = void 0; const simpleMemory_1 = require("./simpleMemory"); /** * 텍스트 분류 에이전트 * AI Agent, LLM Model, 메모리 노드를 조합한 구조 */ async function textClassifierAgent(context) { var _a, _b; const { openai, functionThis, i, items } = context; // 매개변수 const operation = functionThis.getNodeParameter('textClassifierAgentOperation', i); const targetText = functionThis.getNodeParameter('agentTargetText', i); const categories = functionThis.getNodeParameter('agentCategories', i); const model = functionThis.getNodeParameter('agentModel', i, 'gpt-3.5-turbo'); const useMemory = functionThis.getNodeParameter('useMemory', i, true); const memoryKey = functionThis.getNodeParameter('memoryKey', i, 'default'); // 기본 프롬프트 const systemPrompt = `당신은 텍스트를 정확하게 분류하는 AI 에이전트입니다. 주어진 텍스트를 다음 카테고리 중 하나로 분류해야 합니다: ${categories.map(cat => `- ${cat}`).join('\n')} 응답 형식: { "category": "선택한 카테고리명", "confidence": 0.95, // 확신도 (0~1 사이 숫자) "reasoning": "분류 이유에 대한 간략한 설명" }`; const userPrompt = `다음 텍스트를 분류해주세요: "${targetText}"`; // 이전 대화 내역 가져오기 let conversationHistory = []; if (useMemory) { const memoryData = simpleMemory_1.memoryInstance.retrieve(`${memoryKey}_history`); if (memoryData && Array.isArray(memoryData.messages)) { conversationHistory = memoryData.messages; } } // 메시지 배열 구성 const messages = [ { role: 'system', content: systemPrompt }, ...conversationHistory, { role: 'user', content: userPrompt } ]; try { // 요청 파라미터 const apiParams = { model, messages, temperature: 0.2, response_format: { type: "json_object" }, }; // OpenAI API 호출 const response = await openai.chat.completions.create(apiParams); // 응답 처리 const aiResponse = ((_b = (_a = response.choices[0]) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.content) || ''; let result = {}; try { // JSON 응답 파싱 result = JSON.parse(aiResponse); } catch (e) { // JSON 파싱 실패시 텍스트 응답 처리 result = { category: aiResponse.includes(':') ? aiResponse.split(':')[1].trim() : aiResponse.trim(), confidence: 0.7, reasoning: "응답이 구조화되지 않아 텍스트에서 추출했습니다." }; } // 이력 저장 if (useMemory) { const newHistory = [ ...conversationHistory, { role: 'user', content: userPrompt }, { role: 'assistant', content: aiResponse } ]; // 최대 10개 메시지만 유지 (오래된 메시지 제거) const limitedHistory = newHistory.slice(-10); simpleMemory_1.memoryInstance.store(`${memoryKey}_history`, { messages: limitedHistory }); simpleMemory_1.memoryInstance.store(`${memoryKey}_lastResult`, result); } // 일반적인 반환 객체 (모든 경우에 사용) const outputJson = { ...result, originalText: targetText, categories: categories, model: model, }; // 분기 작업을 위한 메타데이터 추가 if (operation === 'branch') { // 각 카테고리에 대한 출력 여부 정보를 메타데이터에 포함 const branchData = {}; for (const category of categories) { branchData[category] = result.category === category; } // 메타데이터에 분기 정보 추가 outputJson._categoryBranches = branchData; } return { json: outputJson }; } catch (error) { return { json: { success: false, error: error.message, } }; } } exports.textClassifierAgent = textClassifierAgent; //# sourceMappingURL=textClassifierAgent.js.map