chinese-naming-mcp
Version:
A comprehensive MCP toolset for Chinese name generation, analysis, and cultural interpretation
743 lines (663 loc) • 24.9 kB
JavaScript
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;