You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JavaScript聊天机器人识别语句中的关键词而非单个单词?

问题

我正在开发一款新的聊天机器人,目前该机器人仅能匹配单个单词,匹配成功时会展示对应文本文件的内容。例如输入“address”,会显示地址文本文件;但如果输入“what's your address?”这类语句,机器人会返回“I don't understand”。

请问是否有办法实现扫描用户的回复内容,提取匹配的关键词并触发对应响应?

当前示例代码:

_processSay(message) {
        const address = this._address;
        const events = this._events;
        let content;
 
        if (message == 'address') {
        content = fs.readFileSync(address).toString();
        }
        
        else if (message == 'events') {
        content = fs.readFileSync(events).toString();
        }
 
        else {
        content = "sorry, I did not understand you";
        }
 
        return content;
        }

我完全是JavaScript新手,正在尝试解决这个问题。我一直在寻找类似contains或includes的匹配语句,而非使用==这类精确相等判断,但目前还没找到可行方法。


解决方案

你要找的就是JavaScript原生的includes()方法,它可以直接检查字符串是否包含指定子串,正好解决你的需求。下面是具体修改方案:

1. 基础修改:用includes()替代精确匹配

把原来的message == 'address'改成message.includes('address'),这样只要用户输入内容里包含目标关键词,就能触发对应响应。

2. 处理大小写问题

如果用户输入"Address"或者"ADDRESS",includes()会匹配失败,所以可以先把用户消息统一转成小写再检查:

const lowerCaseMessage = message.toLowerCase();

3. 优化代码结构(推荐)

如果后续要添加更多关键词,一堆else if会显得杂乱,你可以用对象映射关键词和对应文件路径,扩展起来更方便:

修改后的完整代码:

_processSay(message) {
        // 定义关键词与文件路径的映射关系
        const keywordMap = {
            'address': this._address,
            'events': this._events
        };
        let content;
        // 统一转小写,避免大小写匹配问题
        const lowerCaseMessage = message.toLowerCase();

        // 遍历所有关键词,检查是否存在于用户输入中
        for (const keyword in keywordMap) {
            if (lowerCaseMessage.includes(keyword)) {
                content = fs.readFileSync(keywordMap[keyword]).toString();
                // 找到匹配后跳出循环,避免多关键词冲突
                break;
            }
        }

        // 未匹配到任何关键词时返回默认提示
        if (!content) {
            content = "sorry, I did not understand you";
        }

        return content;
        }

代码说明

  • toLowerCase():将用户输入统一转为小写,确保无论输入大小写关键词都能匹配
  • keywordMap:集中管理关键词和对应文件路径,后续新增关键词只需在对象中添加一行即可
  • for...in循环:遍历所有关键词,找到第一个匹配项就返回对应内容,避免重复匹配

这样修改后,用户输入"what's your address?"或者"Show me the events list"这类语句,机器人都能正确触发对应的响应了。


内容的提问来源于stack exchange,提问作者Richard Foleher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:10:13