UNPKG

chinese-naming-mcp

Version:

A comprehensive MCP toolset for Chinese name generation, analysis, and cultural interpretation

743 lines (663 loc) 24.9 kB
const BaseTool = require('../../utils/base-tool'); /** * 姓名风水分析器 * 基于传统风水理论分析姓名的风水属性和影响 */ class NameFengshuiAnalyzer extends BaseTool { constructor() { super(); this.name = 'name-fengshui-analyzer'; this.description = '基于传统风水理论分析姓名的风水属性和影响'; this.initializeData(); } /** * 初始化风水数据 */ initializeData() { // 八卦属性 this.baguaAttributes = { '乾': { element: '金', direction: '西北', meaning: '天、父、首领', energy: 'yang' }, '坤': { element: '土', direction: '西南', meaning: '地、母、包容', energy: 'yin' }, '震': { element: '木', direction: '东', meaning: '雷、长男、动', energy: 'yang' }, '巽': { element: '木', direction: '东南', meaning: '风、长女、入', energy: 'yin' }, '坎': { element: '水', direction: '北', meaning: '水、中男、险', energy: 'yang' }, '离': { element: '火', direction: '南', meaning: '火、中女、丽', energy: 'yin' }, '艮': { element: '土', direction: '东北', meaning: '山、少男、止', energy: 'yang' }, '兑': { element: '金', direction: '西', meaning: '泽、少女、悦', energy: 'yin' } }; // 方位属性 this.directionAttributes = { '东': { element: '木', season: '春', color: '青绿', energy: 'yang' }, '南': { element: '火', season: '夏', color: '红', energy: 'yang' }, '西': { element: '金', season: '秋', color: '白', energy: 'yin' }, '北': { element: '水', season: '冬', color: '黑', energy: 'yin' }, '东南': { element: '木', season: '春末', color: '绿', energy: 'yin' }, '西南': { element: '土', season: '长夏', color: '黄', energy: 'yin' }, '西北': { element: '金', season: '秋末', color: '白金', energy: 'yang' }, '东北': { element: '土', season: '冬末', color: '土黄', energy: 'yang' }, '中央': { element: '土', season: '四季', color: '黄', energy: 'balance' } }; // 风水格局 this.fengshuiPatterns = { '龙凤呈祥': { level: 'excellent', description: '龙凤配合,大吉大利' }, '金水相生': { level: 'good', description: '金生水,财源广进' }, '木火通明': { level: 'good', description: '木生火,文昌兴旺' }, '土金相生': { level: 'good', description: '土生金,稳中求财' }, '水木相生': { level: 'good', description: '水生木,生机勃勃' }, '火土相生': { level: 'good', description: '火生土,温暖厚德' }, '金木相克': { level: 'bad', description: '金克木,易有冲突' }, '木土相克': { level: 'bad', description: '木克土,根基不稳' }, '土水相克': { level: 'bad', description: '土克水,阻碍流通' }, '水火相克': { level: 'bad', description: '水火不容,矛盾激烈' }, '火金相克': { level: 'bad', description: '火克金,损耗严重' } }; // 风水宜忌 this.fengshuiTaboos = { '字形': { '宜': ['方正', '圆润', '稳重', '向上'], '忌': ['尖锐', '破损', '倾斜', '向下'] }, '笔画': { '宜': ['均衡', '流畅', '有序', '协调'], '忌': ['过多', '过少', '杂乱', '断续'] }, '音韵': { '宜': ['清亮', '和谐', '响亮', '悦耳'], '忌': ['沉闷', '刺耳', '拗口', '不雅'] }, '寓意': { '宜': ['吉祥', '向上', '光明', '和谐'], '忌': ['凶险', '消极', '阴暗', '冲突'] } }; // 风水调理方法 this.adjustmentMethods = { '五行不平衡': { '缺金': ['佩戴金属饰品', '使用白色物品', '朝西方发展'], '缺木': ['多接触绿色', '养植物', '朝东方发展'], '缺水': ['多用蓝黑色', '近水而居', '朝北方发展'], '缺火': ['多用红色', '增加光照', '朝南方发展'], '缺土': ['多用黄色', '接触土地', '居中发展'] }, '格局不佳': { '相克严重': ['使用通关五行', '调整方位', '改变环境'], '能量不足': ['增强对应元素', '改善环境', '调整作息'], '冲突激烈': ['寻找平衡点', '缓解对立', '和谐统一'] } }; // 风水应用建议 this.applicationSuggestions = { '居住': { '方位选择': '根据姓名五行选择合适的居住方位', '房间布置': '按照五行相生原理布置房间', '颜色搭配': '使用与姓名五行相配的颜色' }, '事业': { '行业选择': '选择与姓名五行相配的行业', '办公方位': '选择有利的办公方位', '合作伙伴': '选择五行互补的合作伙伴' }, '人际': { '交友': '与五行相生的人交往', '婚配': '选择五行和谐的伴侣', '子女': '为子女起与家庭五行和谐的名字' } }; } /** * 执行风水分析 * @param {object} params - 分析参数 * @returns {object} 分析结果 */ async execute(params) { try { const { name, birthInfo, analysisDepth = 'basic' } = params; if (!name) { throw new Error('姓名不能为空'); } // 解析姓名结构 const nameStructure = this.parseNameStructure(name); // 分析五行属性 const elementAnalysis = this.analyzeElements(nameStructure); // 分析八卦属性 const baguaAnalysis = this.analyzeBagua(nameStructure); // 分析方位属性 const directionAnalysis = this.analyzeDirections(elementAnalysis); // 分析风水格局 const patternAnalysis = this.analyzePatterns(elementAnalysis, baguaAnalysis); let result = { name, nameStructure, elementAnalysis, baguaAnalysis, directionAnalysis, patternAnalysis, overallScore: this.calculateOverallScore(elementAnalysis, patternAnalysis) }; // 根据分析深度添加详细信息 if (analysisDepth === 'detailed' || analysisDepth === 'comprehensive') { result.tabooAnalysis = this.analyzeTaboos(nameStructure); result.adjustmentSuggestions = this.generateAdjustmentSuggestions(elementAnalysis, patternAnalysis); } if (analysisDepth === 'comprehensive') { result.applicationGuidance = this.generateApplicationGuidance(elementAnalysis, baguaAnalysis); result.detailedRecommendations = this.generateDetailedRecommendations(result); if (birthInfo) { result.personalizedAnalysis = this.generatePersonalizedAnalysis(result, birthInfo); } } return this.createSuccessResponse(result, '风水分析完成'); } catch (error) { return this.createErrorResponse(`风水分析失败: ${error.message}`); } } /** * 解析姓名结构 * @param {string} name - 姓名 * @returns {object} 姓名结构信息 */ parseNameStructure(name) { const chars = name.split(''); const surname = chars[0]; const givenName = chars.slice(1).join(''); return { fullName: name, surname, givenName, totalChars: chars.length, chars, structure: `${surname}(${chars.slice(1).length}字名)` }; } /** * 分析五行属性 * @param {object} nameStructure - 姓名结构 * @returns {object} 五行分析结果 */ analyzeElements(nameStructure) { const elements = { '金': 0, '木': 0, '水': 0, '火': 0, '土': 0 }; const charElements = []; // 简化的字符五行判断(实际应用中需要完整的字典) const elementMapping = { '金': ['金', '银', '铁', '钢', '锋', '利', '刀', '剑', '钱', '财'], '木': ['木', '林', '森', '树', '花', '草', '竹', '松', '柏', '梅'], '水': ['水', '江', '河', '海', '湖', '泉', '雨', '雪', '冰', '波'], '火': ['火', '炎', '焰', '光', '明', '亮', '阳', '日', '星', '辉'], '土': ['土', '地', '山', '石', '岩', '田', '园', '城', '墙', '堡'] }; nameStructure.chars.forEach(char => { let charElement = '土'; // 默认为土 for (const [element, chars] of Object.entries(elementMapping)) { if (chars.some(c => char.includes(c))) { charElement = element; break; } } elements[charElement]++; charElements.push({ char, element: charElement }); }); // 计算五行平衡度 const totalChars = nameStructure.chars.length; const balance = this.calculateElementBalance(elements, totalChars); return { elements, charElements, balance, dominantElement: this.getDominantElement(elements), lackingElements: this.getLackingElements(elements), elementInteractions: this.analyzeElementInteractions(elements) }; } /** * 分析八卦属性 * @param {object} nameStructure - 姓名结构 * @returns {object} 八卦分析结果 */ analyzeBagua(nameStructure) { // 简化的八卦对应(实际应用中需要更复杂的算法) const baguaMapping = { 1: '乾', 2: '兑', 3: '离', 4: '震', 5: '巽', 6: '坎', 7: '艮', 8: '坤' }; const totalStrokes = nameStructure.chars.reduce((sum, char) => { // 简化的笔画计算 return sum + char.length * 5; // 假设每个字符5画 }, 0); const baguaIndex = (totalStrokes % 8) + 1; const bagua = baguaMapping[baguaIndex]; const baguaInfo = this.baguaAttributes[bagua]; return { bagua, baguaInfo, totalStrokes, calculation: `总笔画${totalStrokes} % 8 + 1 = ${baguaIndex}`, meaning: baguaInfo.meaning, element: baguaInfo.element, direction: baguaInfo.direction, energy: baguaInfo.energy }; } /** * 分析方位属性 * @param {object} elementAnalysis - 五行分析结果 * @returns {object} 方位分析结果 */ analyzeDirections(elementAnalysis) { const favorableDirections = []; const unfavorableDirections = []; const dominantElement = elementAnalysis.dominantElement; for (const [direction, attributes] of Object.entries(this.directionAttributes)) { if (attributes.element === dominantElement) { favorableDirections.push({ direction, reason: `与主导五行${dominantElement}相同`, attributes }); } else if (this.isElementGenerating(dominantElement, attributes.element)) { favorableDirections.push({ direction, reason: `${dominantElement}生${attributes.element},有利发展`, attributes }); } else if (this.isElementRestraining(attributes.element, dominantElement)) { unfavorableDirections.push({ direction, reason: `${attributes.element}克${dominantElement},不利发展`, attributes }); } } return { favorableDirections, unfavorableDirections, bestDirection: favorableDirections[0]?.direction || '中央', worstDirection: unfavorableDirections[0]?.direction || '无' }; } /** * 分析风水格局 * @param {object} elementAnalysis - 五行分析 * @param {object} baguaAnalysis - 八卦分析 * @returns {object} 格局分析结果 */ analyzePatterns(elementAnalysis, baguaAnalysis) { const patterns = []; const elements = elementAnalysis.elements; // 检查五行相生格局 if (elements['金'] > 0 && elements['水'] > 0) { patterns.push(this.fengshuiPatterns['金水相生']); } if (elements['木'] > 0 && elements['火'] > 0) { patterns.push(this.fengshuiPatterns['木火通明']); } if (elements['土'] > 0 && elements['金'] > 0) { patterns.push(this.fengshuiPatterns['土金相生']); } if (elements['水'] > 0 && elements['木'] > 0) { patterns.push(this.fengshuiPatterns['水木相生']); } if (elements['火'] > 0 && elements['土'] > 0) { patterns.push(this.fengshuiPatterns['火土相生']); } // 检查五行相克格局 if (elements['金'] > 0 && elements['木'] > 0) { patterns.push(this.fengshuiPatterns['金木相克']); } if (elements['木'] > 0 && elements['土'] > 0) { patterns.push(this.fengshuiPatterns['木土相克']); } if (elements['土'] > 0 && elements['水'] > 0) { patterns.push(this.fengshuiPatterns['土水相克']); } if (elements['水'] > 0 && elements['火'] > 0) { patterns.push(this.fengshuiPatterns['水火相克']); } if (elements['火'] > 0 && elements['金'] > 0) { patterns.push(this.fengshuiPatterns['火金相克']); } // 评估整体格局 const goodPatterns = patterns.filter(p => p.level === 'good' || p.level === 'excellent'); const badPatterns = patterns.filter(p => p.level === 'bad'); let overallLevel = 'average'; if (goodPatterns.length > badPatterns.length) { overallLevel = 'good'; } else if (badPatterns.length > goodPatterns.length) { overallLevel = 'bad'; } return { patterns, goodPatterns, badPatterns, overallLevel, patternScore: this.calculatePatternScore(goodPatterns, badPatterns) }; } /** * 分析风水宜忌 * @param {object} nameStructure - 姓名结构 * @returns {object} 宜忌分析结果 */ analyzeTaboos(nameStructure) { const analysis = { suitable: [], unsuitable: [], suggestions: [] }; // 字形分析 const hasComplexChars = nameStructure.chars.some(char => char.length > 1); if (!hasComplexChars) { analysis.suitable.push('字形简洁,符合风水宜简不宜繁的原则'); } else { analysis.unsuitable.push('字形较复杂,可能影响运势流通'); analysis.suggestions.push('建议选择笔画适中的字符'); } // 笔画分析 const totalChars = nameStructure.totalChars; if (totalChars >= 2 && totalChars <= 4) { analysis.suitable.push('姓名长度适中,符合风水平衡原则'); } else { analysis.unsuitable.push('姓名长度不够理想'); analysis.suggestions.push('建议调整姓名长度到2-4个字'); } return analysis; } /** * 生成调理建议 * @param {object} elementAnalysis - 五行分析 * @param {object} patternAnalysis - 格局分析 * @returns {object} 调理建议 */ generateAdjustmentSuggestions(elementAnalysis, patternAnalysis) { const suggestions = { immediate: [], longTerm: [], environmental: [], lifestyle: [] }; // 基于缺失五行的建议 elementAnalysis.lackingElements.forEach(element => { const methods = this.adjustmentMethods['五行不平衡'][`缺${element}`]; if (methods) { suggestions.immediate.push(...methods); } }); // 基于不良格局的建议 if (patternAnalysis.badPatterns.length > 0) { suggestions.longTerm.push('通过环境调整化解五行相克'); suggestions.environmental.push('调整居住和工作环境的五行配置'); } // 生活方式建议 suggestions.lifestyle.push('保持积极心态,相信自己的能力'); suggestions.lifestyle.push('多接触与姓名五行相配的事物'); return suggestions; } /** * 生成应用指导 * @param {object} elementAnalysis - 五行分析 * @param {object} baguaAnalysis - 八卦分析 * @returns {object} 应用指导 */ generateApplicationGuidance(elementAnalysis, baguaAnalysis) { const guidance = {}; // 居住指导 guidance.residence = { direction: baguaAnalysis.direction, colors: this.getRecommendedColors(elementAnalysis.dominantElement), layout: this.getLayoutSuggestions(baguaAnalysis.bagua) }; // 事业指导 guidance.career = { industries: this.getRecommendedIndustries(elementAnalysis.dominantElement), workDirection: baguaAnalysis.direction, partnerships: this.getPartnershipAdvice(elementAnalysis) }; // 人际指导 guidance.relationships = { compatibility: this.getCompatibilityAdvice(elementAnalysis), communication: this.getCommunicationAdvice(baguaAnalysis.energy), networking: this.getNetworkingAdvice(elementAnalysis.dominantElement) }; return guidance; } /** * 生成详细建议 * @param {object} analysisResult - 完整分析结果 * @returns {object} 详细建议 */ generateDetailedRecommendations(analysisResult) { return { priority: this.getPriorityRecommendations(analysisResult), optional: this.getOptionalRecommendations(analysisResult), timeline: this.getImplementationTimeline(analysisResult), monitoring: this.getMonitoringAdvice(analysisResult) }; } /** * 生成个性化分析 * @param {object} analysisResult - 分析结果 * @param {object} birthInfo - 出生信息 * @returns {object} 个性化分析 */ generatePersonalizedAnalysis(analysisResult, birthInfo) { // 这里可以结合出生时间进行更精确的分析 return { birthElementCompatibility: '根据出生信息分析五行匹配度', seasonalInfluence: '分析出生季节对姓名风水的影响', personalizedAdjustments: '基于个人信息的专属调理方案' }; } // 辅助方法 calculateElementBalance(elements, totalChars) { const average = totalChars / 5; let variance = 0; for (const count of Object.values(elements)) { variance += Math.pow(count - average, 2); } return Math.max(0, 100 - (variance / totalChars) * 100); } getDominantElement(elements) { return Object.keys(elements).reduce((a, b) => elements[a] > elements[b] ? a : b); } getLackingElements(elements) { return Object.keys(elements).filter(element => elements[element] === 0); } analyzeElementInteractions(elements) { const interactions = []; const elementList = Object.keys(elements).filter(e => elements[e] > 0); for (let i = 0; i < elementList.length; i++) { for (let j = i + 1; j < elementList.length; j++) { const elem1 = elementList[i]; const elem2 = elementList[j]; const relationship = this.getElementRelationship(elem1, elem2); interactions.push({ elem1, elem2, relationship }); } } return interactions; } isElementGenerating(element1, element2) { const generatingCycles = { '金': '水', '水': '木', '木': '火', '火': '土', '土': '金' }; return generatingCycles[element1] === element2; } isElementRestraining(element1, element2) { const restrainingCycles = { '金': '木', '木': '土', '土': '水', '水': '火', '火': '金' }; return restrainingCycles[element1] === element2; } getElementRelationship(elem1, elem2) { if (this.isElementGenerating(elem1, elem2)) return '相生'; if (this.isElementGenerating(elem2, elem1)) return '相生'; if (this.isElementRestraining(elem1, elem2)) return '相克'; if (this.isElementRestraining(elem2, elem1)) return '相克'; return '平和'; } calculateOverallScore(elementAnalysis, patternAnalysis) { const balanceScore = elementAnalysis.balance; const patternScore = patternAnalysis.patternScore; return Math.round((balanceScore + patternScore) / 2); } calculatePatternScore(goodPatterns, badPatterns) { const goodScore = goodPatterns.length * 20; const badScore = badPatterns.length * 15; return Math.max(0, Math.min(100, 50 + goodScore - badScore)); } getRecommendedColors(element) { const colorMapping = { '金': ['白色', '银色', '金色'], '木': ['绿色', '青色', '翠色'], '水': ['蓝色', '黑色', '深蓝'], '火': ['红色', '橙色', '紫色'], '土': ['黄色', '棕色', '土色'] }; return colorMapping[element] || ['中性色']; } getLayoutSuggestions(bagua) { const layoutMapping = { '乾': '西北方位放置重要物品', '坤': '西南方位保持整洁', '震': '东方位增加活力元素', '巽': '东南方位保持通风', '坎': '北方位注意水元素', '离': '南方位增加光照', '艮': '东北方位稳固布置', '兑': '西方位保持愉悦' }; return layoutMapping[bagua] || '保持整体和谐'; } getRecommendedIndustries(element) { const industryMapping = { '金': ['金融', '珠宝', '机械', '汽车'], '木': ['教育', '出版', '农业', '家具'], '水': ['运输', '物流', '水产', '饮料'], '火': ['能源', '电子', '娱乐', '餐饮'], '土': ['房地产', '建筑', '陶瓷', '农业'] }; return industryMapping[element] || ['综合性行业']; } getPartnershipAdvice(elementAnalysis) { const dominant = elementAnalysis.dominantElement; const generating = { '金': '水', '水': '木', '木': '火', '火': '土', '土': '金' }; return `寻找五行属${generating[dominant]}的合作伙伴,能够形成良好的互补关系`; } getCompatibilityAdvice(elementAnalysis) { return { best: `与五行相生的人最为和谐`, good: `与同五行的人容易理解`, avoid: `避免与相克五行的人产生冲突` }; } getCommunicationAdvice(energy) { if (energy === 'yang') { return '适合主动沟通,表达直接'; } else if (energy === 'yin') { return '适合温和沟通,循序渐进'; } else { return '保持沟通平衡,刚柔并济'; } } getNetworkingAdvice(element) { return `多参与与${element}相关的活动和圈子,有利于扩展人脉`; } getPriorityRecommendations(analysisResult) { const recommendations = []; if (analysisResult.patternAnalysis.badPatterns.length > 0) { recommendations.push('优先化解不良风水格局'); } if (analysisResult.elementAnalysis.lackingElements.length > 0) { recommendations.push('补充缺失的五行元素'); } return recommendations; } getOptionalRecommendations(analysisResult) { return [ '优化居住环境布局', '调整个人作息习惯', '选择合适的发展方向' ]; } getImplementationTimeline(analysisResult) { return { immediate: '立即可以实施的调整(1-7天)', shortTerm: '短期内的改善措施(1-3个月)', longTerm: '长期的风水优化(3个月以上)' }; } getMonitoringAdvice(analysisResult) { return { frequency: '建议每季度评估一次效果', indicators: '关注运势变化和生活改善', adjustments: '根据实际情况灵活调整方案' }; } /** * 获取工具参数模式 * @returns {object} 参数模式 */ getParameterSchema() { return { type: 'object', properties: { name: { type: 'string', description: '要分析的姓名', example: '王小明' }, birthInfo: { type: 'object', description: '出生信息(可选)', properties: { year: { type: 'number', description: '出生年份' }, month: { type: 'number', description: '出生月份' }, day: { type: 'number', description: '出生日期' }, hour: { type: 'number', description: '出生时辰' } } }, analysisDepth: { type: 'string', enum: ['basic', 'detailed', 'comprehensive'], description: '分析深度', default: 'basic' } }, required: ['name'] }; } /** * 获取使用示例 * @returns {array} 使用示例 */ getUsageExamples() { return [ { description: '基础风水分析', input: { name: '李明', analysisDepth: 'basic' } }, { description: '详细风水分析', input: { name: '张雅琴', analysisDepth: 'detailed' } }, { description: '综合风水分析(含出生信息)', input: { name: '王子轩', birthInfo: { year: 1990, month: 5, day: 15, hour: 14 }, analysisDepth: 'comprehensive' } } ]; } } module.exports = NameFengshuiAnalyzer;