在这里插入图片描述

01

深度学习是未来人工智能的基石

据外媒 TechPowerUp 3 月 1 日消息,一位不愿意透露姓名的网友向他们提供了如下截图,并表示黑客公布了英伟达 DLSS 的源代码。


据报道,外泄的版本为 DLSS 2.2 版本,泄漏的信息包括构成 DLSS 的 C++ 文件、header 和 asset 信息,还有一个“编程指南”文档,以帮助开发人员理解代码并正确构建。

目前,英伟达已向 Hardwareluxx 发布了一份声明,正式确认了数据泄漏的事实,并表示会进一步强化网络安全,聘请网络安全事件响应专家,通知相关执法部门。安全是一个持续的过程,面对此次黑客攻击事件,英伟达将更加重视代码、产品保护和质量问题。

深度学习超级采样技术(DLSS) 是英伟达的“王牌”之一,属于闭源技术。该技术在游戏领域的作用是借助英伟达显卡向量核心的机器学习能力,让玩家在不花费额外成本的情况下运行更高分辨率和更高帧率的游戏。


随着 2015 年以后人工智能的爆发式发展,人工智能技术发展的前沿正在从感知智能向认知决策演进。如何通过深度学习实现 AI 模仿视听和思考等人类活动成为人工智能发展的研究核心,也是未来人工智能的基石。

深度学习的 AI 在复杂的模式化场景中甚至可以比人做得更好。

Google 的 AlphaGo 先是学会了如何下围棋,然后不断地与自己进行下棋练习,训练自己的神经网络,反反复复,永不停歇,最终在 2016 年 3 月的人机大战中,以 4:1 的总比分战胜职业九段棋手李世石。

除此之外,AI 通过学习样本数据的内在规律和表示层次,获得对诸如文字,图像和声音等数据信息的超强识别能力。从简单识别猫,到辨别血液中癌症的早期成分,甚至到识别核磁共振成像中的肿瘤,具有优秀图像识别功能的 AI 都能轻松搞定。


深度学习使得机器学习能够实现众多应用,拓展人工智能的领域范围。通过不断地深度学习,AI 可以帮助人们完成各种任务,使得近乎所有的机器辅助功能成为可能。电影图书推荐、智慧厨房,甚至是无人驾驶汽车、预防性医疗保健,都近在眼前,又或者即将实现。

02

Authing 助力 AI RPA 聊天机器人

Wechaty 是针对微信个人帐户的会话式 AI RPA(Robotic Process Automation,机器人流程自动化)聊天机器人 SDK,是由 Typescript 构建,支持个人号微信使用的 Node.js 应用,支持 Linux、Windows、macOS 和 Docker 等平台。通过使用 JavaScript、Python、Go 或 Java,只需 6 行代码即可创建机器人。

微信个人号拥有强大灵活的功能,可以不受限制地发送语音、视频、图片和文字,支持多人群聊,很适合作为 ChatBot 的载体。但是,使用微信个人微信号作为 ChatBot,需要通过非官方的第三方库接入微信。截至 2018 年底,微信尚无任何官方的 ChatBot API 发布。

Wechaty 基于微信公开的 API,对接口进行了一系列的封装,提供一系列简单的接口。开发者可以在其之上进行微信机器人的个性化开发,并将机器人应用于多个场景,例如:

  • 微信好友众多,如何管理和维护好友分组?
  • 面对海量的聊天信息,如何快速有序处理并区分其重要性?
  • 由于微信可以任意建群,面对日渐增多的微信群,如何管理?
  • 能否自动智能地对群内消息进行聊天回复

秉承着“连接全球人与应用”的使命, Authing 助力 Wechaty 机器人实现了数据分析、信息统计、辅助决策等众多功能,提高了传统人事管理的效率,实现了 Github 成员微信群的身份管理,保障用户身份信息安全,为机器人智能化发展增添了一种全新的可能。

03

Github 成员微信群的管理实现

管理员在 Github 上添加组织成员,通过 Github Webhook 钩子,发送到 Wechaty 服务,创建对应的 Authing 用户。组织成员用户手动添加 Bot 为好友, Bot 会将其邀请至微信群中。管理员在 Github 上删除组织成员时,也会通过 Github Webhook 钩子发送到 Wechaty 服务,Bot 将被删除的组织成员移除群聊后删除对应 Authing 用户。

sequenceDiagram
    actor N as Admin
    actor M as Member
    participant G as Github
    participant W as Wechaty
​
    Note over N: 邀请 Github 成员
    N ->> G:  添加用户
    G -->> W: Webhook member_invited
    W ->> W: 按邮箱注册 Authing 用户
​
    M ->> W: 添加 Bot 好友
    Note right of M: 发送用户名作为验证消息
    W -->> M: 邀请加入全员群
            
    Note over N: 移除 Github 成员
    N ->> G:  删除用户
    G -->> W: Webhook member_removed
    W ->> W: 按邮箱移除 Authing 用户
    W -->> M: 移除群成员

04

Authing 技术支持

准备工作

  • 推荐 Wechaty 机器人使用一个没有太多群聊和好友的新号。
  • 同时,最好新建一个群聊,避免群聊用户因与 Github 未进行绑定,后期无法被移除群聊的风险。
  • 将 Bot 账号设置为群聊管理员

然后我们就可以开始代码实现了。

创建 Github Webhook 处理路由

目前主要处理两个事件:

  • member_added:用户加入 Github 组织
  • member_removed:用户离开 Github 组织

    可以使用任意 HTTP 框架,此处示例用的是 Nest.js,供参考。
import { Controller, Post, Body } from '@nestjs/common';@Controller('webhook')
export class CatsController {
  @Post()
  async webhook(@Body() webhookDto: WebhookDto) {
    // 可以判断是否为指定 Org
    // 通过:webhookDto.organization.login 字段
    switch(webhookDto.action) {
        case 'member_added': {
            // 该步骤核心为注册 Authing 用户,仅为演示,可以放到 service 或者其他地方
            await authing.createGithubUser(webhookDto.membership.user);
            break;
        }
        case 'member_removed': {
            const contactId = await authing.getWechatyContactId(webhookDto.membership.user.login);
            // TODO:  搜索群聊,踢出用户。如果 Puppet 支持,还可以删除好友
            
            // 删除 Authing 用户
            await authing.removeGithubUser(webhookDto.membership.user);
            break;
        }
        default: {
            // 其他可扩展
        }    
    }
    // 定义返回格式
  }
}

点击查看 Github Webhook Payload 参考网站

扩展 Wechaty Authing 插件

新增如下几个方法来扩展 wechaty-authing插件:

  • createGithubUser:创建 Authing 用户
  • getWechatyContactId:获取用户的 Wechaty Contact Id
  • Wechaty Contact Id 可以映射到 Authing 用户 externalId字段或者其他
  • removeGithubUser:删除 Authing 用户
  • checkGithubLogin:校验 Github 用户是否为组织成员
  • bindGithubUser:将 Github 用户与 Wechaty Contact 进行绑定
import { WechatyAuthing } from 'wechaty-authing';

class ExtendedWechatyAuthing extends WechatyAuthing {
  createGithubUser(user: GithubUser) {
   return this.client.users
    .create(
      {
        nickname: user.login,
        photo: user.avatar_url,
        registerSource: ['wechaty'],
        username: user.login
      },
      {
        identity: {
          isSocial: true,
          userIdInIdp: user.id,
          provider: 'github'
        }
      }
    );
  }
  
  async getWechatyContactId(login: string): Promise<string> {
    const user = await this.client.users.find({ username: login });
    return user?.externalId || '';
  }
  
  async removeGithubUser(login: string) {
    const user = await this.client.users.find({ username: login });
    return this.client.users.delete(user?.id);
  }
  
  async checkGithubLogin(login: string): Promise<boolean> {
    return this.client.users.exists({
      username: login
    });
  }
  
  async bindGithubUser<T = Contact>(
    username: string,
    contact: T
  ): Promise<boolean> {
    try {
      const { id } = await this.client.users.find({ username });
      await this.client.users.update(id, {
        externalId: contactId
      });
      return true;
    } catch (e) {
      return false;
    }
    return false;
  }
}

export const authing = new ExtendedWechatyAuthing({
  userPoolId: process.env.AUTHING_USER_POOL_ID,
  secret: process.env.AUTHING_USER_POOL_SECRET
});

Wechaty Handler 扩展

1. 好友请求绑定 Github 用户

当 Bot 收到用户好友申请时,检查是否为 Github 组织用户,并邀请入群。

import type { Friendship, Wechaty } from 'wechaty';
import { log } from 'wechaty';
import { FriendshipType } from 'wechaty-puppet';
import { authing } from '../lib/authing';

export default async function friendshipHandler(
  this: Wechaty,
  friendship: Friendship
): Promise<void> {
  if (friendship.type() !== FriendshipType.Receive) return;

  const username = friendship.hello().trim();
  const exists = await authing.checkGithubLogin(user);
  if (!exists) return;
  try {
    await friendship.accept();
    await sleep(2000);
    log.info('Friendship', friendship.contact().id);
    const contact = friendship.contact();
    const room = await this.Room.find({ id: 'roomId' });
    await authing.bindGithubUser(username, contact); 
    await room?.add(contact);
    log.info('Message', '邀请加入群聊成功');
  } catch (e) {
    log.error('Friendship', e);
  }
}

2. 消息绑定 Github 用户

对于原本已经添加过 Bot 的微信好友,可以通过该方式进行处理。同时,由于 Wechaty 存在一些不稳定的风险,在接受好友请求并邀请入群时,可能会失败。如遇到该问题,请隔一段时间,再次发送 Github 用户名给 Bot,进行重试。

import { log } from 'wechaty';
import type { Message, Wechaty } from 'wechaty';
import { MessageType } from 'wechaty-puppet';
import { authing } from '../lib/authing';

export default async function messageHandler(
  this: Wechaty,
  message: Message
): Promise<void> {
  // 只处理文本消息
  if (message.type() !== MessageType.Text) return;
  
  const username = message.text().trim();
  const exists = await authing.checkGithubLogin(user);
  if (!exists) return;
  const result = await authing.bindGithubUser(username, contact);
  if (result) {
    try {
      const room = await this.Room.find({ id: 'roomId' });
      await room?.add(contact);
      log.info('Message', '邀请加入群聊成功');
    } catch (e) {
      log.error('Message', e);
    }
  }
}

精彩回顾

《洞悉身份认证 6000 年发展史,我们该警醒并学到什么?》

《穿越 300 年科技发展史,我们能学到什么?》

您可以即刻前往 Authing 官网了解价格详情~

Logo

Authing 是一款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务

更多推荐