HOOOS

用Python打造智能企业微信助手:关键词回复与自然语言处理实践

0 4 智能小助手 Python企业微信Rasa
Apple

想让你的企业微信更智能吗?想解放双手,让机器人自动处理一些重复性的消息回复吗?本文将带你使用Python,结合自然语言处理技术,打造一个可以根据关键词自动回复,并提供流畅对话体验的智能企业微信助手。

重要提示: 直接操作微信个人账号的API是被微信官方禁止的。为了安全和合规,我们推荐使用企业微信的API或者其他第三方平台提供的API来实现类似的功能。本文将基于假设你已经拥有企业微信账号并开通了相应的API权限进行讲解。

1. 技术选型

  • 编程语言: Python (简洁易用,拥有丰富的第三方库)
  • 自然语言处理 (NLP) 库:
    • 推荐: Rasa (一个开源的对话式AI框架,功能强大,易于定制,适合构建复杂的对话机器人)
    • 备选: Dialogueflow (Google提供的自然语言理解平台,集成度高,但定制性相对较弱)
    • 轻量级: SnowNLP (一个简单的中文自然语言处理库,适合处理简单的关键词匹配和情感分析)
  • 企业微信 API 封装库: 使用企业微信官方提供的Python SDK或者第三方封装的SDK,方便调用企业微信的各种接口。

这里我们选择 Rasa 作为主要的 NLP 库,因为它在构建复杂对话机器人方面具有很大的优势,可以实现更流畅的对话体验。当然,对于简单的关键词回复,SnowNLP 也是一个不错的选择。

2. 环境搭建

  1. 安装 Python: 确保你的电脑上已经安装了 Python 3.6 或更高版本。
  2. 安装 Rasa:
    pip install rasa
    pip install rasa-sdk
    
  3. 安装企业微信 SDK (以 WeRoBot 为例):
    pip install werobot
    

3. Rasa 项目初始化

  1. 创建 Rasa 项目:
    rasa init --no-prompt
    
    这会在当前目录下创建一个包含 Rasa 项目所需文件的目录结构。

4. 定义 NLU 模型 (自然语言理解)

data/nlu.md 文件中,定义你的意图 (intent) 和实体 (entity)。意图代表用户的目的,实体代表用户提供的信息。

例如,我们定义一个 greet 意图和一个 ask_weather 意图:

## intent:greet
- 你好
- 很高兴认识你
- 早上好
- 晚上好
- hi
- hello

## intent:ask_weather
- 今天天气怎么样
- 明天会下雨吗
- 北京的天气如何
- 查一下上海的天气
- weather in beijing

5. 定义对话流程 (Stories)

data/stories.md 文件中,定义你的对话流程。故事描述了用户与机器人之间的交互过程。

例如,我们定义一个简单的 greet 故事和一个 weather 故事:

## greet
* greet
  - utter_greet

## weather
* ask_weather
  - utter_ask_weather

6. 定义回复模板 (Responses)

domain.yml 文件中,定义你的回复模板。回复模板是机器人回复用户的内容。

responses:
  utter_greet:
  - text: "你好!很高兴为你服务。"

  utter_ask_weather:
  - text: "请问你想查询哪个城市的天气?"

  utter_default:
  - text: "抱歉,我不太明白你的意思。"

7. 训练 Rasa 模型

在项目根目录下,运行以下命令来训练 Rasa 模型:

rasa train

8. 创建自定义 Action (可选)

如果你需要执行一些自定义的逻辑,例如调用天气 API,你需要创建一个自定义 Action。Action 是一个 Python 函数,它可以访问 Rasa 的 Tracker 对象,并执行一些操作。

  1. 创建 actions.py 文件:

    from rasa_sdk import Action
    from rasa_sdk.events import SlotSet
    import requests
    
    class ActionGetWeather(Action):
        def name(self):
            return "action_get_weather"
    
        def run(self, dispatcher, tracker, domain):
            city = tracker.latest_message.get("text") # 从用户输入中获取城市名称
            # 调用天气 API (这里需要替换成你自己的 API)
            try:
                response = requests.get(f"https://api.example.com/weather?city={city}")
                weather_data = response.json()
                temperature = weather_data["temperature"]
                condition = weather_data["condition"]
                message = f"{city}的天气是{condition},温度{temperature}度。"
            except:
                message = "抱歉,获取天气信息失败。"
    
            dispatcher.utter_message(text=message)
            return []
    
  2. 更新 domain.yml 文件:

    • actions 部分添加 action_get_weather
    • stories.md 中更新 weather 故事,使其调用 action_get_weather
    ## weather
    * ask_weather
      - action_get_weather
    

9. 集成企业微信 API

  1. 获取企业微信 Access Token:

    你需要先在企业微信后台获取你的 corp_idcorp_secret,然后使用以下代码获取 Access Token:

    import requests
    
    corp_id = "YOUR_CORP_ID"
    corp_secret = "YOUR_CORP_SECRET"
    token_url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corp_id}&corpsecret={corp_secret}"
    token_response = requests.get(token_url).json()
    access_token = token_response["access_token"]
    
  2. 接收企业微信消息:

    使用 WeRoBot 或其他企业微信 SDK 提供的接口,监听企业微信服务器推送的消息。

  3. 将消息发送给 Rasa:

    将接收到的消息发送给 Rasa 的 REST API,获取 Rasa 的回复。

  4. 将 Rasa 的回复发送给用户:

    使用企业微信 API 将 Rasa 的回复发送给用户。

以下是一个简单的示例代码,展示了如何使用 WeRoBot 接收消息并将回复发送给用户:

import werobot
from werobot.contrib.flask import make_middleware
from flask import Flask
import requests
import json

app = Flask(__name__)
robot = werobot.WeRoBot(token='YOUR_WECHAT_TOKEN') # 你的企业微信Token

RASA_ENDPOINT = "http://localhost:5005/webhooks/rest/webhook" # Rasa REST API 地址

@robot.handler
def message_handler(message):
    user_message = message.content

    # 将消息发送给 Rasa
    data = {"sender": message.source, "message": user_message}
    headers = {'Content-type': 'application/json'}
    response = requests.post(RASA_ENDPOINT, data=json.dumps(data), headers=headers)
    rasa_response = response.json()

    # 获取 Rasa 的回复
    if rasa_response:
        bot_response = rasa_response[0]['text']
        return bot_response
    else:
        return "抱歉,我没有理解你的意思。"

app.wsgi_app = make_middleware(app.wsgi_app, robot)

if __name__ == '__main__':
    app.run(debug=True, port=80)

代码解释:

  • YOUR_WECHAT_TOKEN: 需要替换成你在企业微信后台配置的 Token。
  • RASA_ENDPOINT: 需要替换成你的 Rasa REST API 地址。通常是 http://localhost:5005/webhooks/rest/webhook,除非你修改了 Rasa 的配置。
  • message.source: 用户的 ID,用于区分不同的用户。
  • message.content: 用户发送的消息内容。
  • 代码首先将用户的消息发送给 Rasa 的 REST API,然后获取 Rasa 的回复,最后将回复发送给用户。

10. 运行你的企业微信助手

  1. 启动 Rasa 服务:

    rasa run actions  # 如果你使用了自定义 Action
    rasa run         # 如果你没有使用自定义 Action
    
  2. 启动 Flask 应用:

    运行上面的 Python 代码,启动 Flask 应用。确保你的企业微信后台配置了正确的服务器地址和 Token。

现在,你的智能企业微信助手就可以开始工作了!你可以尝试发送一些消息给你的企业微信机器人,看看它是否能够正确地回复。

总结

本文介绍了如何使用 Python 和 Rasa 构建一个简单的智能企业微信助手。通过定义 NLU 模型和对话流程,你可以让机器人理解用户的意图,并根据不同的意图回复不同的内容。通过集成企业微信 API,你可以将机器人部署到企业微信平台上,为你的团队提供更智能的服务。

进一步学习:

希望本文能够帮助你快速入门企业微信智能助手的开发!

点评评价

captcha
健康