跳至主要內容

微信机器人(2):自动回复源码分析

upfinder原创...大约 3 分钟微信机器人

上节回顾

前情提要

上一节,我们通过接入讯飞星火大语言模型的形式,实现了一个拥有大语言模型能力的自动回复机器人,本节我们来重点看一下自动回复机器人的实现逻辑,为我们后续的自定义机器人打好理论基础。

项目结构

首先我们从整个项目的文件结构上,对代码有一个整体印象。

  • 项目通过app.py中的 run()函数启动
  • channel 文件夹中主要是项目支持的渠道逻辑,比如微信、飞书、微信公众号、企业微信等
  • bot文件夹中主要存放的是项目现已支持的大模型 比如ChatGPT、OpenAI、百度文心一言、讯飞星火等
  • bridge文件夹中是桥接channelbot的一些逻辑

项目启动

1.我们通过app.py文件分析一下项目的启动流程

def run():
    try:
        # load config
        load_config()
        # ctrl + c
        sigterm_handler_wrap(signal.SIGINT)
        # kill signal
        sigterm_handler_wrap(signal.SIGTERM)

        # create channel
        channel_name = conf().get("channel_type", "wx")

        if "--cmd" in sys.argv:
            channel_name = "terminal"

        if channel_name == "wxy":
            os.environ["WECHATY_LOG"] = "warn"
            # os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = '127.0.0.1:9001'

        channel = channel_factory.create_channel(channel_name)
        if channel_name in ["wx", "wxy", "terminal", "wechatmp", "wechatmp_service", "wechatcom_app", "wework", const.FEISHU]:
            PluginManager().load_plugins()

        # startup channel
        channel.startup()
    except Exception as e:
        logger.error("App startup failed!")
        logger.exception(e)


if __name__ == "__main__":
    run()
  • 首先第 4 行代码通过load_config() 将配置文件config.json配置文件加载到项目中

  • 然后第 11、20 行,通过配置文件中配置的channel_type字段,通过channel_factory去创建一个对应的channel

  • 最后第 25 行 ,调用对应channelstartup()函数启动

channel

下面我们重点看一下channel模块组成,以及WechatChannel(个人微信)对应的startup 的逻辑

  • 从红框 1 可以看出这个项目支持的渠道有 飞书、命令行、微信、微信公众号、企业微信等
  • 从红框 2 可以看出 个人微信渠道的实现是通过itChat这个库来实现的,可以通过 itChat详细了解
  • 通过代码我们可以看出WechatChannel 继承自 ChatChannel,我们可以在chatChannel 中查看详细的消息回复部分逻辑

消息回复

回复消息的创建逻辑实现在ChatChannel 的 _generate_reply() 函数中,如下图

image-20231211172859219
image-20231211172859219

我们重点查看红框部分可知,replay的构建通过父类的 build_replay_content() 函数实现,在ChatChannel 的父类 Channel 中

image-20231211173122682
image-20231211173122682

我们继续追踪代码,可以发现,回复的消息最终通过一个具体的 bot进行创建

image-20231211173307327
image-20231211173307327

bot

下边我们来查看下项目中 bot部分的组成

image-20231211173644904
image-20231211173644904

从bot 部分截图我们可知,该项目现已支持的机器人有 百度文心一言、chatGPT、LinkAI、openAI、讯飞星火等,通过分析XunFeiBot 可知,机器人的实现主要通过继承 Bot类,实现replay()函数来实现 由此,整个项目的核心流程我们已经分析完了,下边我们做一个总结

总结

以微信渠道搭配讯飞星火大模型为例

  1. 在启动过程中,首先通过config.json配置文件中的 **"channel_type": "wx"**确定使用微信渠道,使用 **"model": "xunfei"**确定使用讯飞星火大语言模型。

  2. WechatChannelstartup函数中,使用itChat 库来模拟微信的PC端登录,监听微信消息。

    微信截图_20231212102545
    微信截图_20231212102545
  3. 在收到消息后,通过Bridge中的fetch_reply_content()找到配置的对应的 XunFeiBot机器人去回复消息。

上次编辑于:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8