docker安装并跑通跑通QQ机器人实践(1)-前言及展示

随着大模型技术的迅猛发展,行业应用日益丰富且专业化。为了有效利用大模型的强大功能,建立与之紧密互动的应用接口至关重要。在此背景下,QQ、微信、钉钉等主流即时通讯工具凭借其广泛的用户覆盖和便捷的通信特性,成为连接用户与大模型的理想媒介。

通过集成智能聊天机器人至这些平台,我们可以将大语言模型的智能化服务无缝融入日常通讯场景,使得海量即时通讯用户能够直接获益于大模型提供的信息检索、决策支持、知识解答等强大功能,切实体验到技术进步带来的便利与效率提升。

以下,我将详细介绍构建基础智能聊天机器人的步骤,并提供一种简明、高效的部署方法。本指南旨在帮助读者快速理解并掌握搭建流程,使得在频繁使用各类智能机器人服务的同时,也能自主创建符合个人或企业需求的定制化聊天机器人。无论旨在提升工作效能、优化客户交互,还是寻求创新应用,理解并掌握这一技能都将有力推动您迈向人工智能应用的前沿。

1 缘起

网上有很多搭建机器人的文章和实践,但总觉得过于复杂,基本都是基于 Windows 的居多,如果想要在远程服务器(包括 NAS )上搭建机器人,就暴露了很大的局限性。所以我就基于 Docker 搭建了一套基于 cqhttp + qsign + nonebot2 的框架,一步步搭建出一套可以高速部署、稳定运行,且适合软件开发的一体化环境。此系列博客《docker安装并跑通跑通QQ机器人实践》记录了整个搭建流程,供大家参考。

2. 目标

2.1 目标一:构建基于 Docker 的跨平台应用程序

本项目将以 Docker 为依托,设计并实现一个由三个独立容器构成的分布式架构。

2.1.1 系统架构图

请参见下图以直观了解整个系统的布局:
图1  QQ机器人项目架构

图1 QQ机器人项目架构

2.1.2 模块简介

1)bs-qsign 签名服务器模块
该模块作为 QQ 机器人的核心依赖,负责提供必要的签名服务。没有它,机器人在登录及后续操作时将遭遇登录失败警报,甚至可能触发 QQ 平台的风控机制。bs-qsign 容器对外暴露 18080 端口,用于接收来自 bs-cqhttp 的签名访问连接。

2)bs-nonebot 模块
此模块基于 nonebot 应用框架构建,专为简化 QQ 机器人应用开发而设计。开发者无需深入理解底层通讯协议,只需专注于功能插件的开发,即可快速构建丰富的机器人功能。bs-nonebot 容器对外暴露 15703 端口,用于接收来自 bs-cqhttp 的 WebSocket 反向连接。

3)bs-cqhttp 模块
bs-cqhttp 扮演 QQ 客户端模拟器的角色,实现 QQ 账号的登录、好友管理、消息收发等全套基础功能。在当前框架中,需确保如下配置:

  • 将 bs-cqhttp 指向 bs-qsign 提供的签名服务端口:18080;
  • 设置 bs-cqhttp 的服务器连接配置,使其通过 WebSocket 反向连接至 bs-nonebot 开放的 15703 端口。

综上,通过整合这三个紧密协作的 Docker 容器,本项目旨在构建一个跨操作系统、易于部署、稳定运行且高度适应软件开发需求的 QQ 机器人解决方案。

2.2 目标二:一键部署容器化应用

为极大简化部署流程,针对每个模块,我均编写了生成镜像及启动容器的Shell脚本。这些脚本不仅预设了端口映射与目录挂载,还确保用户可通过宿主机端口直接访问容器服务,以及利用挂载的宿主机目录轻松调整容器内的配置文件与源代码。

2.2.1 部署脚本示意图

以下是部署脚本功能的可视化表示:
图2  BS-BOTS项目一级目录结构

图2 BS-BOTS项目一级目录结构

图3  bs-cqhttp 目录结构
图3 bs-cqhttp 目录结构

3 知识储备

以下知识虽具有学习必要性,但在初期阶段无需过分深入探究,仅需掌握满足基本应用场景所需的部分即可。随着实践频次的增加,您自然而然会对这些知识愈发熟悉且游刃有余。

3.1 Docker 基础知识及简单操作

图4  Docker 简介

图4 Docker 简介

安装建议:
图5  下载和安装 Docker Desktop

图5 下载和安装 Docker Desktop

docker 官网:
https://docker.com

参考文章:
手搓 Docker Image Creator(DIC)工具(02):预备知识

3.2 Dockerfile 脚本相关知识

Dockerfile 的相关知识网上有很多教程。参考文章:

  • 菜鸟教程 - Dockerfile
  • 手搓 Docker Image Creator(DIC)工具(02):预备知识

3.3 Shell 脚本基础知识及简单脚本编写

图6  Shell 的百度百科

图6 Shell 的百度百科

Linux与macOS操作系统凭借其内置的终端环境,对Shell的支持表现卓越,为用户提供了完善的Shell脚本执行与命令行操作环境。

相比之下,Windows系统自带的Shell支持相对有限。为此,我们建议Windows用户安装Git这一广受欢迎且广泛应用的版本控制工具。Git不仅用于管理如Github、Gitee等平台上的代码仓库,其安装包中还附带一个名为Git Bash的终端应用程序,该程序对Shell的支持尤为出色。

在Windows下使用Git Bash,用户将受益于:

  • 全面的Unix/Linux命令集:
    Git Bash集成了一系列常用的Unix/Linux命令,使得在Windows环境中也能流畅执行跨平台的Shell脚本与命令操作。
  • 优异的Shell兼容性:
    Git Bash确保了Shell脚本在Windows上的高兼容性执行,减少因操作系统差异引发的移植问题。
  • 无缝对接Git功能:
    作为Git客户端的一部分,Git Bash无缝整合了Git命令,方便用户在同一个环境中进行版本控制与Shell操作。

综上所述,对于需要在Windows系统中获得良好Shell支持的场景,尤其是涉及使用我所提供的依赖Shell功能的代码,安装并利用Git Bash将显著提升兼容性与使用体验。

官网:https://git-scm.com/

4 成品演示

图7  运行 run.sh 安装 bs-qsign 容器

图7 运行 run.sh 安装 bs-qsign 容器

图8  运行 all.sh 创建 bs-nonebot 镜像和容器
图8 运行 all.sh 创建 bs-nonebot 镜像和容器

图9  运行 all.sh 创建 bs-cqhttp 镜像和容器
图9 运行 all.sh 创建 bs-cqhttp 镜像和容器

图10  成功安装和运行 3 个容器

图10 成功安装和运行 3 个容器

图11  在 bs-nonebot 容器里运行 bot.py,监听 5703 端口

图11 在 bs-nonebot 容器里运行 bot.py,监听 5703 端口

图12  bs-cqhttp 登录QQ,并成功链接签名服务器和反向服务器
图12 bs-cqhttp 登录QQ,并成功链接签名服务器和反向服务器

图13  私聊 /echo 命令测试成功

图13 私聊 /echo 命令测试成功

图14  群里 /echo 和 @ 指令测试成功

图14 群里 /echo 和 @ 指令测试成功

5 安装、测试完毕!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545793.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CompletableFuture 处理异步异常

1、自定义线程池 Configuration public class ThreadPoolConfig {public static ThreadPoolExecutor getThreadPoolExecutor() {int availableProcessors Runtime.getRuntime().availableProcessors();return new ThreadPoolExecutor(availableProcessors,availableProcessor…

深入探索:Zookeeper+消息队列(kafka)集群

目录 前言 一、Zookeeper概述 1、Zookeeper概念 2、Zookeeper 特点 3、Zookeeper工作机制 4、Zookeeper 选举机制 4.1 第一次启动选举机制 4.2 非第一次启动选举机制 5、Zookeeper 数据结构 6、Zookeeper 应用场景 二、部署 Zookeeper 集群 1、环境部署 2、安装 z…

Linux进阶篇:linux操作系统一个神奇的分区:swap交换分区

linux操作系统一个神奇的分区:swap交换分区 1 Swap交换分区概念 Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就…

macOS 待机一段时间后所有打开的应用会被退出

最近在使用MacBook电脑时,发现电脑在待机一段时间再登录进去时,发现所有打开的应用都被退出了,就跟刚开机一样,很影响使用体验,查找资料时发现有个设置被打开了,只需关闭这个设置就可以解决该问题&#xff…

数据结构--选择排序

1、选择排序 1.1 基本认识 1.1.1 基本概念 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度。 1.1.2 算法步骤 (1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起…

Java并发--内存结构图及线程安全

内存结构图 内存-> (开辟的数组) -> (方法区,堆,栈,程序计数器,本地方法栈) 堆:几乎所有的对象实例都在这里分配内存。堆中每个对象的头信息都标属着他属于哪个类。 方法区它用于存储已被虚拟机加载的类型信息…

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

Python输入与输出

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合集 私信未回可以加V:hacker0327 备注零基础学Python 订阅专…

浏览器渲染原理-解释回流重绘以及为什么transform效率高

浏览器是如何渲染页面 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启染流程。 整个渲染流程分为多个阶段&#xf…

HW面试经验分享 | 某服蓝队初级

前言 依稀记得是22年 7、8月份参加的HW,当时是比较炎热的时候,但又夹杂一丝秋意。也是头一次去离家乡比较远的地方,多少有点忐忑……(怕被噶腰子、水土不服、吃穿用住没着落等等),但最终也是平安无事且顺利…

笔记84:关于递归法的一些感悟

题目1:二叉树的前序遍历 链接:. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…

独立服务器如何安装Webmin面板

本周有一个客户,购买Hostease的独立服务器,询问我们的在线客服,独立服务器支持安装Webmin及如何安装的问题。我们为用户提供教程,用户很快完成了设置。在此,我们分享这个操作教程,希望可以对您有帮助。 Web…

SkyWalking 为所有的API接口增加 tag

背景胡扯 线上接口报错,接着被 SkyWalking 抓到,然后 SkyWalking 触发告警,最后老板你,让你辛苦一下,在明早上班前把这个bug 改了,并告诉你你是全公司的希望。谁说不是呢?为公司业务保驾护航&a…

成都欣丰洪泰文化传媒有限公司领航电商新纪元

在当今数字化飞速发展的时代,电商行业异军突起,成为推动经济增长的重要力量。在这股浪潮中,成都欣丰洪泰文化传媒有限公司以其专业的电商服务脱颖而出,成为业界的佼佼者。本文将带您一探这家公司的独特魅力和专业服务,…

D365开发-在视图按钮的js里,引用别的js里的公共方法

公共方法写法: "use strict"; var JJMC window.JJMC || {}; JJMC.SamMCommon JJMC.SamMCommon || {}; (function () { this.cloneRecord function (excludeAttrbuteNames){ / } }).call(JJMC.SamMCommon); 然后在需要调方法的command里面,之…

手机适配,在真机上适配正常,在pc端适配出现横向滚动条

问题背景 最近,在做一个项目适配的时候,出现一个很奇怪的问题,在真机上,适配一切正常,但是在pc端,适配,偶现横向滚动条。 而且发现一个离奇的事情,就是适配出现横向滚动条&#xff…

UE5 GAS开发P32,33 初始化状态并绑定在HUD上,拾取物品增加血量和减少蓝量

这节课主要是修改WidgetController和OverlayController,在EffectActor内新增了一个减少蓝量的代码,同时修复了一个bug,并且展示了为什么要写成单独的控制器,因为要考虑多人游戏的情况,每一个控制器都是一个单独的角色 首先修改AuraAttirbuteSet.cpp UAuraAttributeSet::UAura…

泰山众筹:低门槛高回报的电商营销新模式

大家好,我是吴军,来自一家专注于软件开发的公司,担任产品经理一职。今天,我想与大家分享一种备受瞩目的商业模式——泰山众筹。 泰山众筹之所以能够在市场上迅速走红,其背后的原因值得我们深入探讨: 首先&…

ATFX港股:长周期看,恒生指数报价已经回到2008年以来的底部区域

消息面: 1、 4月12日,官方发布《推动资本市场高质量发展的若干意见》文件,其中提到九条意见,被称为“国九条”,重要内容有:将上市前突击“清仓式”分红等情形纳入发行上市负面清单;推动一年多次…

Vue3学习05 一些API

Vue3-API 其它 API【shallowRef 与 shallowReactive 】shallowRefshallowReactive总结 【readonly 与 shallowReadonly】readonlyshallowReadonly 【toRaw 与 markRaw】toRawmarkRaw 【customRef】 Vue3新组件【Teleport】【Suspense】【全局API转移到应用对象】【其他】 其它 …