[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来上传(img-tvqbdR3w-1663327883339)(https://img-blog.csdnimg/img_convert/b90a5642bc5aa322d23157e5fb5762ad.png)]

01

#学习是未来人工智能的基础石

外媒TechUp 3月1日,几位伟人的据悉揭开了秘码的网友们向他们提供了如下消息,并表示有英伟达DLSS的媒体。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来上传(img-lkcETxVJ-1663327883339)(https://img-blog.csdnimg/img_convert/eaec133f4379bc255fda0af7a390039f.jpeg)]

根据 DLSS 的 DLSS 的 2, 的文件代码信息 2. 组成 DLSS 的 C++、标题和资产信息,还有一份“正确版本的编程”文档,帮助报道理解和制作

发布一份声明,提供与英达网络相关的实际情况,并进一步加强安全,表示网络,通知,发布任务安全。安全是一个持续的过程,日常专家的过程,黑客问题事件,英伟达将,产品保护和质量问题。

该技术在机器游戏领域的作用是闭上英达显卡的核心的学习能力,让玩家在深入学习不花费额外的情况下游戏运行率更高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来上传(img-VVye4LGO-1663327884516)(https://img-blog.csdnimg/img_convert/5898dacbcdbe33cdb06c78133373a509.jpeg)]

2015年人工智能的诞生式发展,人工智能从未来的人工智能发展向智能演进的实践。未来的人工智能基础石。

深入研究人工智能在复杂的模式化场景中甚至可以比人学习更好。

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

确定的,AI样本的识别和学习能力,通过数据类型信息,获取数据能力,信息,超等直接成像中的组织,可以具备AI的强识别,轻松实现识别。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来上传(img-TXnrYgoW-1663327884517)(https://img-blog.csdnimg/img_convert/358b0925724e0047c2f82cada1c61346.jpeg)]

深度学习使得机器学习能够实现众多应用,拓展人工智能的领域范围。通过不断地深度学习,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
    // 通过:webhookDtoanization.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 参考网站:
https://docs.github/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#organization

扩展 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' });
      等待房间?。添加(联系人);
      log.info('Message', '邀请加入群聊成功'); 
    } catch (e) { 
      log.error('Message', e); 
    } 
  } 
} ```


点击[此处](https://www.authing/customer?utm_source=WeChat1&utm_campaign=bottom&utm_term=20220808)了解更多行业身份管理

「解决方案」以及「最佳实践案例」

更多推荐

一招,提高 Github 成员微信群运营效率