首页 > 其他分享 >原批之星外传——赋予Q群交互式机器人原批之力

原批之星外传——赋予Q群交互式机器人原批之力

时间:2024-11-25 12:29:48浏览次数:10  
标签:dim group 原批 self id 交互式 message 之星 embed

一、原批之星简介

        鲁健,反原宗的宗主,一个坚定的原批反对者,从抵抗到认可,最终成为原批力量的守护者的英雄。现就读于南京邮电大学自动化学院、人工智能学院智能科学与技术专业,主修人工智能方向的相关课程,极其擅长具身智能的相关开发,曾被誉为“原批之星”,最有希望颠覆三国杀的人之一。

二、机器人的动态识别与自动相应

        鲁健的项目通过“原批之力”实现了对QQ群成员动态的识别,如新成员加入、成员离开、成员发送消息等。这种识别能力类似于“原批病毒”的自我复制和快速蔓延特性,机器人能够迅速识别并响应群内的变化。

鲁健的项目通过“原批之力”实现对QQ群成员动态的识别,主要包括以下几个方面:

  1. 新成员加入识别:机器人能够监听并识别新成员加入群聊的事件。
  2. 成员离开识别:机器人能够监听并识别成员离开群聊的事件。
  3. 成员发送消息识别:机器人能够监听并识别群成员发送消息的事件。

这种识别能力类似于“原批病毒”的自我复制和快速蔓延特性,机器人能够迅速识别并响应群内的变化。

import os
import botpy
from botpy import logging
from botpy.ext.cog_yaml import read
from botpy.message import GroupMessage
from botpy.ext.command import command
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM

# 读取配置文件
test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))
_log = logging.get_logger()

# 初始化模型
qa_model = pipeline("question-answering", model="distilbert-base-uncased-distilled-squad")
summarizer = pipeline("summarization", model="t5-base", tokenizer="t5-base")
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")

class MyClient(botpy.Client):
    async def on_ready(self):
        _log.info(f"robot 「{self.robot.name}」 on_ready!")
        print(f"Logged in as {self.robot.name}")

    async def on_group_message_create(self, message: GroupMessage):
        msg = message.content.strip()
        _log.info(f"Received message: {msg}")
        
        if msg.startswith("!"):
            command = msg[1:].split()[0]
            args = msg[1:].split()[1:]
            await self.handle_command(command, args, message)
        else:
            result = self.process_natural_language(msg)
            await message.reply(result)

    async def handle_command(self, command, args, message):
        if command == "help":
            await message.reply("Available commands: help, info, summarize, qa")
        elif command == "info":
            await message.reply("This is a demo bot for QQ group.")
        elif command == "summarize":
            if args:
                summary = self.summarize_text(' '.join(args))
                await message.reply(summary)
            else:
                await message.reply("Please provide text to summarize.")
        elif command == "qa":
            if len(args) >= 2:
                question = args[0]
                context = ' '.join(args[1:])
                result = self.answer_question(question, context)
                await message.reply(result)
            else:
                await message.reply("Please provide a question and context.")
        else:
            await message.reply("Unknown command")

    def process_natural_language(self, text):
        question = text
        context = "This is a context for the question."
        result = qa_model(question=question, context=context)
        return result['answer']

    def summarize_text(self, text):
        inputs = tokenizer(text, return_tensors="pt")
        outputs = model.generate(**inputs, max_length=50)
        summary = tokenizer.decode(outputs[0], skip_special_tokens=True)
        return summary

    def answer_question(self, question, context):
        result = qa_model(question=question, context=context)
        return result['answer']

if __name__ == "__main__":
    intents = botpy.Intents(public_messages=True)
    client = MyClient(intents=intents)
    client.run(appid=test_config["appid"], secret=test_config["secret"])

        使用transformers库加载预训练的模型,用于自然语言处理任务。on_group_message_create方法监听群消息事件,当有新消息时,机器人会收到并处理这些消息。handle_command方法处理用户输入的命令,如帮助、信息、总结和问答等。process_natural_language方法使用预训练模型处理自然语言,如问答和文本摘要。通过这些代码,鲁健的项目能够实现对QQ群成员动态的识别和响应,类似于“原批病毒”的自我复制和快速蔓延特性。

三、自然语言处理

         项目利用Vision Transformer (ViT) 技术,使机器人能够理解和生成自然语言,提供更自然的交互体验。这可以类比于“原批之力”中对元素的操控和神灵的召唤,机器人通过ViT模型“召唤”出自然语言的处理能力。

        Vision Transformer (ViT) 是一种将 Transformer 架构应用于计算机视觉领域的模型,特别是用于图像识别任务。ViT 的核心思想是将图像分割成一系列小块(patches),然后将每个 patch 当作序列化的 token 输入到 Transformer 编码器中,实现对图像特征的提取。

        ViT 模型通过将图像分割成固定大小的图像块(patches),并通过 Linear Projection of Flattened Patches 将每个 patch 转换成 Patch Embedding,然后添加位置编码,得到 Patch + Position Embedding。这些嵌入输入到 Transformer 编码器处理,输出每个图像块的更新特征表示,它不仅包含了图像块自身的特征,还包含了图像块之间的关联信息。

        在鲁健的项目中,ViT 技术被用来提升机器人的自然语言处理能力,使得机器人能够更好地理解和生成自然语言,从而提供更自然的交互体验。这种能力类似于“原批之力”中对元素的操控和神灵的召唤,机器人通过 ViT 模型“召唤”出自然语言的处理能力。

import torch
import torch.nn as nn
import torch.nn.functional as F
from vit_pytorch import ViT

class PatchEmbed(nn.Module):
    """Image to Patch Embedding"""
    def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):
        super().__init__()
        self.img_size = img_size
        self.patch_size = patch_size
        self.num_patches = (img_size // patch_size) ** 2
        self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)

    def forward(self, x):
        x = self.proj(x).flatten(2).transpose(1, 2)
        return x

class VisionTransformer(nn.Module):
    def __init__(self, img_size=224, patch_size=16, embed_dim=768, depth=6, num_heads=8, mlp_dim=2048, num_classes=1000):
        super().__init__()
        self.patch_embed = PatchEmbed(img_size, patch_size, embed_dim)
        self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim))
        self.pos_embed = nn.Parameter(torch.zeros(1, self.patch_embed.num_patches + 1, embed_dim))
        self.blocks = nn.ModuleList([Block(embed_dim, num_heads, mlp_dim) for _ in range(depth)])
        self.head = nn.Linear(embed_dim, num_classes)

    def forward(self, x):
        x = self.patch_embed(x)
        cls_tokens = self.cls_token.expand(x.shape[0], -1, -1)
        x = torch.cat((cls_tokens, x), dim=1)
        x += self.pos_embed
        for block in self.blocks:
            x = block(x)
        x = x[:, 0]
        x = self.head(x)
        return x

class Block(nn.Module):
    def __init__(self, embed_dim, num_heads, mlp_dim):
        super().__init__()
        self.norm1 = nn.LayerNorm(embed_dim)
        self.attn = Attention(embed_dim, num_heads)
        self.norm2 = nn.LayerNorm(embed_dim)
        self.mlp = MlpBlock(mlp_dim, embed_dim)

    def forward(self, x):
        x = x + self.attn(self.norm1(x))
        x = x + self.mlp(self.norm2(x))
        return x

class Attention(nn.Module):
    def __init__(self, embed_dim, num_heads):
        super().__init__()
        self.num_heads = num_heads
        self.head_dim = embed_dim // num_heads
        self.scale = self.head_dim ** -0.5
        self.qkv = nn.Linear(embed_dim, embed_dim * 3)
        self.proj = nn.Linear(embed_dim, embed_dim)

    def forward(self, x):
        q, k, v = self.qkv(x).reshape(x.shape[0], -1, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)
        q, k, v = q[0], k[1], v[2]
        attn = (q @ k.transpose(-2, -1)) * self.scale
        attn = attn.softmax(dim=-1)
        x = (attn @ v).transpose(1, 2).reshape(x.shape[0], -1, self.head_dim * self.num_heads)
        x = self.proj(x)
        return x

class MlpBlock(nn.Module):
    def __init__(self, mlp_dim, embed_dim):
        super().__init__()
        self.fc1 = nn.Linear(embed_dim, mlp_dim)
        self.fc2 = nn.Linear(mlp_dim, embed_dim)

    def forward(self, x):
        x = F.gelu(self.fc1(x))
        x = self.fc2(x)
        return x

# 使用模型
vit_model = VisionTransformer()
img = torch.randn(1, 3, 224, 224)
preds = vit_model(img)  # (1, num_classes)

        以上代码展示了如何使用 PyTorch 实现一个简化的 ViT 模型,包括 Patch Embedding、Transformer Blocks 和分类头。这个模型可以用于处理图像数据,但也可以通过适当的修改用于自然语言处理任务,从而提升机器人的自然语言交互能力。

四、用户界面与交互

        项目提供了一个用户友好的界面,让用户能够与机器人进行交互,同时也可以管理机器人的行为。这种交互能力类似于“原批之力”中改变命运的能力,用户通过与机器人的交互,可以“改变命运”即管理群内的信息流和互动。项目通过前后端分离的架构设计,后端负责业务逻辑和数据处理,前端负责界面展示和用户交互。通过WebSocket实现实时通信,确保消息的即时传输。

1. 用户管理

用户注册与登录功能是用户友好界面的基础。用户可以通过注册和登录来管理自己的信息和与机器人的交互。

from flask import Flask, request, jsonify
from werkzeug.security import generate_password_hash, check_password_hash
import sqlite3

app = Flask(__name__)

@app.route('/register', methods=['POST'])
def register():
    data = request.json
    username = data['username']
    password = generate_password_hash(data['password'])
    conn = sqlite3.connect('chat.db')
    c = conn.cursor()
    c.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
    conn.commit()
    conn.close()
    return jsonify({'message': '注册成功'})

@app.route('/login', methods=['POST'])
def login():
    data = request.json
    username = data['username']
    password = data['password']
    conn = sqlite3.connect('chat.db')
    c = conn.cursor()
    user = c.execute('SELECT * FROM users WHERE username=?', (username,)).fetchone()
    conn.close()
    if user and check_password_hash(user[2], password):
        return jsonify({'message': '登录成功'})
    else:
        return jsonify({'message': '用户名或密码错误'})

2. 群组管理

创建群组与加入群组功能让用户能够管理群组信息,从而控制群内的信息流和互动。

@app.route('/create_group', methods=['POST'])
def create_group():
    data = request.json
    group_name = data['group_name']
    creator_id = data['creator_id']
    conn = sqlite3.connect('chat.db')
    c = conn.cursor()
    c.execute('INSERT INTO groups (name, creator_id) VALUES (?, ?)', (group_name, creator_id))
    group_id = c.lastrowid
    conn.commit()
    conn.close()
    return jsonify({'message': '群组创建成功', 'group_id': group_id})

@app.route('/join_group', methods=['POST'])
def join_group():
    data = request.json
    user_id = data['user_id']
    group_id = data['group_id']
    conn = sqlite3.connect('chat.db')
    c = conn.cursor()
    c.execute('INSERT INTO group_members (group_id, user_id) VALUES (?, ?)', (group_id, user_id))
    conn.commit()
    conn.close()
    return jsonify({'message': '加入群组成功'})

3. 消息传输

实时消息发送与接收功能让用户能够与机器人进行实时交互,管理群内的信息流。

from flask_socketio import SocketIO, join_room, leave_room, send
socketio = SocketIO(app)

@socketio.on('join')
def handle_join(data):
    user_id = data['user_id']
    group_id = data['group_id']
    join_room(group_id)
    send(f'{user_id} 加入了群组 {group_id}', room=group_id)

@socketio.on('message')
def handle_message(data):
    message = data['message']
    group_id = data['group_id']
    send(message, room=group_id)

        通过这些代码,鲁健的项目实现了一个用户友好的界面,让用户能够与机器人进行交互,同时也可以管理机器人的行为。这种交互能力类似于“原批之力”中改变命运的能力,用户通过与机器人的交互,可以“改变命运”即管理群内的信息流和互动。

五、核心代码实现

        在项目的核心代码中,鲁健使用了botpytransformers库,通过这些工具,机器人能够处理群消息、识别命令、使用预训练的模型来理解自然语言,并给出相应的回复。这类似于“原批之力”中通过修改CPU的指令集或寄存器状态来控制计算机的能力,鲁健通过代码“控制”了机器人的行为和响应。

        botpy是一个用于开发QQ频道机器人的Python SDK,它基于腾讯的机器人开放平台API构建,为开发者提供了一个易于使用且高效的开发框架。在鲁健的项目中,botpy用于创建机器人客户端,处理事件,如消息接收和发送,以及实现命令的识别和响应。

import botpy
from botpy.types.message import Message

class MyClient(botpy.Client):
    async def on_at_message_create(self, message: Message):
        # 机器人被@时的响应
        await message.reply(content="您好,有什么可以帮您的吗?")

    async def on_message_create(self, message: Message):
        # 处理普通消息
        if message.content.startswith('!hello'):
            await message.reply(content="你好!这是机器人的回复。")

intents = botpy.Intents(public_guild_messages=True)
client = MyClient(intents=intents)
client.run(appid="你的appid", token="你的token")

        transformers库提供了大量的预训练模型,这些模型可以用于自然语言理解(NLU)和自然语言生成(NLG)。在鲁健的项目中,transformers库用于理解群消息中的自然语言,并生成相应的回复。

from transformers import pipeline

# 创建一个问答模型的pipeline
qa_pipeline = pipeline('question-answering', model='distilbert-base-uncased-distilled-squad')

class MyClient(botpy.Client):
    async def on_message_create(self, message: Message):
        # 使用问答模型理解自然语言
        if message.content.startswith('?'):
            question = message.content[1:]  # 去掉问号
            context = "这里是上下文信息。"  # 假设的上下文
            result = qa_pipeline({'question': question, 'context': context})
            await message.reply(content=result['answer'])

intents = botpy.Intents(public_guild_messages=True)
client = MyClient(intents=intents)
client.run(appid="你的appid", token="你的token")

        在上述代码中,botpy用于处理QQ群内的消息事件,而transformers则用于实现对自然语言的理解和生成。通过结合这两个库,鲁健的项目能够实现对群消息的实时响应,并根据消息内容提供智能的回复,这就像是通过编程“控制”机器人的行为和响应,与“原批之力”中改变命运的能力相呼应。通过这种方式,鲁健的项目不仅提高了机器人的交互性,也增强了其在自然语言处理方面的能力。

六、技术融合与创新

        鲁健将“原批之力”与自己的技术专长相结合,不仅掌握了这种力量,还将其应用于实际的项目开发中,成为了一个真正的“原批大师”。他通过对“原批病毒”的进一步完善,使其能够通过技术手段实现对信息的控制和交互。通过这些方式,鲁健将“原批之力”运用到了VIT-SO与Git Bash实现的Q群交互式机器人项目中,展现了他在人工智能领域的实践能力和创新思维。

标签:dim,group,原批,self,id,交互式,message,之星,embed
From: https://blog.csdn.net/2301_78933554/article/details/144000830

相关文章

  • 如何从命令行界面运行交互式PHP Shell
    从命令行界面运行交互式PHPShell(也称为PHPCLI交互模式)非常简单。你可以通过以下步骤来启动它:打开命令行界面:在Windows上,你可以使用命令提示符(CMD)或PowerShell。在macOS或Linux上,你可以使用终端(Terminal)。运行PHP命令:在命令行中输入以下命令并按回车:php-a这个命令会启......
  • InternVL2识别边界框实践:捕获股票K线图启明之星
    本文作者:谢志军,某互联网金融证券公司,算法工程师https://github.com/OpenGVLab/InternVL写在前面YOLO系列模型实现了对现实世界广泛物体的边界框识别,最新的开源多模态大模型(MLLM)/视觉语言模型(VLM)宣称能够给出特定物体的边界框坐标。笔者测试了一些常规图片并询问MLLM......
  • .NET 实现的交互式 OA 系统
    前言近期,我们在后台收到了粉丝们的留言,需要一个高效办公自动化(OA)系统。为了回应大家的期待,今天我们推荐一款既灵活又强大的OA系统解决方案,帮助提升日常办公效率和团队协作水平。在日常工作中,我们经常遇到各种表单。传统的系统开发中,多一个录入界面就意味着要设计一个新的输入......
  • CNN Explainer: 交互式可视化学习卷积神经网络
    cnn-explainerCNNExplainer简介卷积神经网络(ConvolutionalNeuralNetworks,CNNs)是深度学习领域最重要的模型之一,在计算机视觉等领域取得了巨大成功。然而,由于CNN的复杂结构和抽象概念,对于初学者和非专业人士来说,理解CNN的工作原理往往存在较大困难。为了解决这个问题,......
  • [Python数据可视化] Plotly:交互式数据可视化的强大工具
    引言:在数据分析和可视化的世界中,Plotly是一颗耀眼的明星。它是一个开源的交互式图表库,支持多种编程语言,包括Python、R和JavaScript。Plotly的强大之处在于它能够创建出既美观又具有高度交互性的图表,使得数据探索和分析变得更加直观和有趣。本文将详细介绍Plotly的功能,......
  • 构建Data Agent:探讨企业应用中基于大模型的交互式数据分析及方案【中】
    前言在上篇中,我们探讨了在企业应用中基于自然语言的交互式数据分析的业务驱动力与场景:作为现有数据分析类应用或商业BI工具的一个更简单、友好、且易于交互(特别是针对业务决策人员)的工具(Data-Agent),与现有应用形成有效互补。针对这样的场景,提出了当前基于大模型实现的三种基础方案设......
  • 构建Data Agent:探讨企业应用中基于大模型的交互式数据分析及方案【上】
    前言数据,在如今企业商业决策中的重要性毋庸置疑。正如BI(商业智能)系统已经成为众多中大型企业数据分析、预测与决策支持的关键IT设施。当然,广义上的BI是一个庞大的IT体系,并非一句简单的数据分析就能概括,ETL、数据仓库与集市、BI分析与可视化、数据挖掘工具等构成一个完整的端到端系......
  • 基于智能体平台搭建交互式陪伴角色
    上一期我们搭建了一个恐怖类的生成式游戏。大家也可以尝试玩一玩。鬼宅惊魂红绣怨辅助玩家探索诡异老宅,生成情节和选项,提供游戏信息,解开谜题,找到出路。https://mbd.baidu.com/ma/s/JQ0zAsYl搭建互动式乙女游戏:智能体的角色陪伴体验在本篇文章中,我们继续探讨如何搭建一个互动......
  • Yolov5水果分类识别+pyqt交互式界面
    Yolov5FruitsDetectorYolov5是一种先进的目标检测算法,可以应用于水果分类识别任务。结合PyQT框架,可以创建一个交互式界面,使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述Yolov5水果分类识别和PyQT交互式界面的实现。Yolov5是由Ultralytics公司开......
  • 从零开始:使用Dash创建功能丰富的交互式Web应用程序
    在数据科学和可视化领域,交互式Web应用程序是与用户交互和展示数据的强大工具。Dash是一个用Python构建交互式Web应用程序的开源框架,它结合了Flask、React和Plotly等技术,让开发者能够快速创建功能丰富的数据可视化应用。本文将介绍如何使用Dash来构建交互式Web应用程序,并提供代码示......