开发个人微信机器人时,关键词匹配通常是最基础的消息处理方式。但随着规则增加,简单的字符串包含判断就可能不够用了。

例如,机器人需要识别“订单12345”“查询订单 12345”等不同表达方式,如果为每种写法单独添加规则,代码会越来越复杂。

Python 的正则表达式可以帮助处理这类具有固定格式的消息。

一、普通关键词匹配的局限

最简单的写法通常是:

def match_message(text):
    if "帮助" in text:
        return "help"

    if "订单" in text:
        return "order"

    return "unknown"

这种方法容易理解,但也容易误匹配。例如,“订单处理不了”可能只是反馈问题,并不一定意味着用户要查询订单。

因此,规则设计不仅要关注关键词,还要考虑消息的具体格式和业务意图。

二、使用正则表达式提取参数

假设机器人需要识别“查询订单 12345”这种格式,可以使用正则表达式提取订单编号。

import re

ORDER_PATTERN = re.compile(
    r"^\s*查询订单\s+([A-Za-z0-9-]+)\s*$"
)

def parse_message(text):
    match = ORDER_PATTERN.match(text)

    if match:
        return {
            "intent": "query_order",
            "order_id": match.group(1)
        }

    return {
        "intent": "unknown"
    }

例如,输入:

查询订单 A12345

程序会识别出意图 query_order,并提取订单编号 A12345。

这里的订单格式只是示例,实际规则应根据业务编号的长度、字符范围和格式进行调整。

三、匹配成功后不要直接执行敏感操作

提取到订单编号,只代表消息符合指定格式,不代表当前用户有权限查看订单。

在调用业务服务前,还需要完成身份验证、数据权限检查和参数合法性校验。

同样,如果机器人支持发送消息、修改资料等操作,也应将消息解析与实际执行分开,避免错误匹配直接触发业务动作。

四、规则越来越多时怎么维护?

当机器人支持多种消息类型后,可以将规则独立存放,并为每条规则定义名称、匹配方式和处理函数。

开发过程中建议注意以下几点:

  • 为容易冲突的规则设置明确的优先级。

  • 对空消息、特殊字符和超长输入进行处理。

  • 为每条规则编写正常输入与异常输入测试。

  • 记录匹配结果和未匹配原因,但避免保存不必要的敏感内容。

  • 对固定格式使用正则表达式,对复杂语义再考虑大语言模型。

正则表达式适合识别格式明确的指令,但不适合独立处理所有自然语言。将规则匹配与语义理解结合,通常更容易兼顾准确性和可维护性。

总结

个人微信机器人可以使用 Python 的字符串匹配和正则表达式实现基础指令解析。关键是明确匹配规则、提取参数,并在执行实际业务之前完成必要的权限与数据校验。

API文档:GeWe API - GeWe API|微信 API 开发文档

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐