被微信群的AI机器人惊讶到了!我也手搓一个玩玩!

为了获得更好的阅读体验及支持博主,可以访问文章首发链接:被微信群的AI机器人惊讶到了!我也手搓一个玩玩!

图片[1]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

群里的AI机器人

大家好,我是石小石!今天在某群潜水,突然被一段对话吸引了。

图片[2]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

很明显,这个【前端汤姆猫】是一个AI,我也来逗逗他

图片[3]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

然而,我的弱智吧问题还没来得及问,可怜的机器人就被管理同学关进小黑屋了,不过瘾啊!不过,作为一个程序员,对AI机器人的实现,我非常感兴趣。简单搜索后,我发现AI机器人的实现非常简单,那我也手搓一个玩玩吧。

机器人原理与实现技术方案 原理

如今,AI模型的发展已经非常成熟,我们很容易就能想到AI机器人的原理

用户在微信群中发送消息。机器人监听到消息后,将其转发到 AI 模型进行处理。模型返回生成的内容,机器人再发送回群聊。

刚好,前几天用了一个免费的AI大模型搭建了一个私有的聊天机器人。

文章链接:node+websoket极速构建一个私有ChatGPT!AI套壳居然如此简单!

图片[4]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

文章中实现的效果展示:

图片[5]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

看来,现在我只需要把它接入微信就行了!

技术方案

搭建一个基础的AI机器人,我们会用到下面两个东西

在之前的文章中,我也介绍过,AI大模型有很多,国产的如豆包、文心一言、通义千问、kimi 等。考虑到免费、SDK调用简单等因素,本文我们使用Kimi的月之暗Moonshot模型。

如果需要将搭建的AI机器人接入微信,我们还需要使用Wechaty和qrcode-terminal。

Wechaty是一个开源的 Node.js 库,用于操作微信,提供登录、接收消息、发送消息等功能。它是我们实现微信AI机器人的核心,它的官网有非常详细的使用介绍

图片[6]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

qrcode-terminal是一个非常简单的插件,它的作用是在终端打印二维码,用于扫描登录微信。

实现目标

通过以上技术栈,我们将从0到1搭建一个微信群 AI 聊天机器人,它具备以下功能:

基础功能:使用 Wechaty 登录微信并监听群聊消息,当群成员@机器人时触发智能回复。智能化回复:通过上下文记忆提供连续对话,借助KImi月之暗模型进行回复。个性化与趣味化:预设机器人角色(如“爱开发的程序员”),提升对话趣味性,并通过自定义触发词和消息过滤优化使用体验。

最终我们将实现一个既智能又人性化、具有实用性的微信 AI 机器人。

代码实现 准备开发环境

我们服务端使用nodejs,因此,首先确保安装 Node.js (推荐 v14 或更高版本)环境。

创建项目并初始化:

mkdir ai-chatbot && cd ai-chatbot
npm init -y

安装依赖:

npm install wechaty qrcode-terminal axios

登录微信

扫码登录是实现微信聊天机器人的第一步,我们需要通过wechaty qrcode-terminal两个插件在服务端实现微信登录,只有这样,我们才能实现调试开发。

通过wechaty,我们只需要6行代码,就可以 通过个人号 搭建一个 微信机器人功能 ,用来自动管理微信消息,它的核心代码如下

注:为避免官方封号,建议大家用小号!由于您自己操作导致的封号,本文概不负责!

import { Wechaty } from 'wechaty'
Wechaty.instance()
.on('scan',        qrcode  => console.log('扫码登录:' + qrcode))
.on('login',       user    => console.log('登录成功:' + user))
.on('message',     message => console.log('收到消息:' + message))
.on('friendship',  friendship => console.log('收到好友请求:' + friendship))
.on('room-invite', invitation => console.log('收到入群邀请:' + invitation))
.start()

我们在项目根目录创建index.js,写一个最基础的登录代码。

const { WechatyBuilder, ScanStatus, log } = require("wechaty");
const qrcodeTerminal = require("qrcode-terminal");
// 创建 Wechaty 实例
const bot = WechatyBuilder.build({ name: "chatanywhere-bot" });
// 处理扫码事件
bot.on("scan", (qrcode, status) => {
  if (status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
    qrcodeTerminal.generate(qrcode, { small: true });
    console.log(
      `扫码链接:https://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`
    );
  } else {
    log.info("扫码状态:", status);
  }
});
// 登录与登出事件
bot.on("login", (user) => console.log(`登录成功:${user.name()}`));
bot.on("logout", (user) => console.log(`已登出:${user.name()}`));
// 启动机器人
bot.start().catch((e) => console.error(e));

上面的代码实现了二维码生成、二维码扫描、扫码后登录状态的监控等功能,在控制台输入node index.js运行代码,我们就能看到一个微信二维码。

用微信扫描后,你就可以看到手机端的登录提示

图片[7]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

实际上,这个二维码是一个用于登录微信网页版的二维码,但是,现在用网页登录不上了。

图片[8]-被微信群的AI机器人惊讶到了!我也手搓一个玩玩!-JieYingAI捷鹰AI

这意味着,想接入微信手机版或pad,你需要购买一个token或申请使用。为了便于演示核心,本文不会教你如何购买token和配置,请参考官方教程

监听群聊消息

扫码成功后,我们可以继续实现监听群聊消息的功能

// 监听消息事件
bot.on('message', async (msg) => {
  const talker = msg.talker(); // 消息发送者
  const text = msg.text(); // 消息内容
  const room = msg.room(); // 群聊信息
  if (room) {
    const topic = await room.topic(); // 获取群名称
    console.log(`[群聊: ${topic}] ${talker.name()}: ${text}`);
  } else {
    console.log(`[私聊] ${talker.name()}: ${text}`);
  }
});

引入 Kimi AI大模型

要让机器人智能回复,我们需要借助 Kimi的月之暗 模型。具体的使用方法参考我之前的文章:

import axios from 'axios';
const OpenAI = require("openai");
// 配置 Moonshot AI 客户端
const client = new OpenAI({
  apiKey: "你自己在kimi后台创建的API key",
  baseURL: "https://api.moonshot.cn/v1", // Moonshot API 的基础路径
});
async function getAIResponse(message) {
  try {
    const response = await client.chat.completions.create({
        model: "moonshot-v1-8k",
        messages: [
          { role: "user", content },
        ],
        temperature: 0.3, // 控制回答的随机性
      });
    // 3.获取 Kimi 的回答内容
    const reply = completion.choices[0]?.message?.content 
    // 4.将回答返回
    return reply;
  } catch (error) {
    console.error('AI Error:', error);
    return '抱歉,我的大脑短路了,请稍后再试!';
  }
}

上述代码中,我们定义了一个getAIResponse的方法,这个方法会根据message的参数值(其他用户的消息)调用Kimi的模型接口,返回AI回答。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
来说点什么吧!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容