基于chatgpt-on-wechat搭建个人知识库微信群聊机器人

前言

啊,最近在别人微信群里看到一个聊天机器人,感觉挺好玩的。之前GPT刚出来的时候就知道有人把聊天机器人接入到微信或者QQ中来增加互动,但是当时没想那个想法。

很久没关注这块了,发现现在可以使用大模型+知识库的方式来打造自己的专属机器人。我突然眼前一亮,我现在特别需要这个机器人。

因为现在我的群里有以下几个问题:

  1. 会有很多新加入的群友,需要发送一些群规和欢迎语。
  2. 大家有时会问很多基础的重复性的问题。

我希望的

  1. 自动发送群规和欢迎语这个普通的群聊机器人都具备,这个不是刚需。
  2. 这个是我最希望解决的,因为很多小白问的问题都是一样的,那我有时候看消息不及时,来不及回复,或者一个答案重复发好几次。所以我希望能够将一些通用的问题规整到知识库里,再由群聊机器人来帮我从知识库中提取答案去回复。

于是迫不及待问下那个老哥,他说用的是chatgpt-on-wechat这个项目部署的。

OK开整,我开始在我的一个快要荒废的阿里云服务器上部署这个项目。

部署准备

  • 需要一台云服务器(或者你自己的电脑本地也可以,但是本篇只讲云服务器上部署的流程)
  • 服务器上安装宝塔面板

开始部署

项目地址:GitHub - zhayujie/chatgpt-on-wechat: 基于大模型搭建的聊天机器人,同时支持 微信公众号、企业微信应用、飞书、钉钉 等接入,可选择GPT3.5/GPT-4o/GPT4.0/ Claude/文心一言/讯飞星火/通义千问/ Gemini/GLM-4/Claude/Kimi/LinkAI,能处理文本、语音和图片,访问操作系统和互联网,支持基于自有知识库进行定制企业智能客服。

这里有两种方式:

  • docker部署的方式
  • python部署的方式

以上两种方式我都尝试了,最开始尝试的是docker,很不幸的是我docker没部署成功,应该是docker pull的问题,一直拉不下来镜像,无论是修改镜像加速还是修改docker pull加速都没成功。

无奈,只能用python的方式去部署。

拉取源码

将项目下载下来,压缩包传到宝塔上面

我直接上传到/www/wwwroot目录下

配置config文件

然后双击解压,解压完成后进入项目根目录找到config-template.json

这是一个配置模版,用来配置机器人的各项参数。我们需要复制这个文件,并命名为config.json

编辑配置文件,默认的是openai的配置,由于使用openai需要做个代理服务器,太麻烦,成本高(需要一台国外服务器)

于是先试试用LinkAI配置下

{
  "channel_type": "wx",
  "model": "moonshot-v1-8k",
  "moonshot_api_key": "sk-XXXX",
  "proxy": "",
  "hot_reload": false,
  "single_chat_prefix": [
    "bot",
    "@bot"
  ],
  "group_welcome_msg": "欢迎加入本群,欢迎语!!",
  "single_chat_reply_prefix": "[bot] ",
  "group_chat_prefix": [
    "@bot"
  ],
  "group_name_white_list": [
    "俺们俩的小群"
  ],
  "image_create_prefix": [
    "画"
  ],
  "speech_recognition": false,
  "group_speech_recognition": false,
  "voice_reply_voice": false,
  "conversation_max_tokens": 2500,
  "expires_in_seconds": 3600,
  "character_desc": "你是基于大语言模型的AI智能助手,旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
  "subscribe_msg": "感谢您的关注!\n这里是AI智能助手,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
  "use_linkai": true,
  "linkai_api_key": "Link_XXXXX",
  "linkai_app_code": "EsurXXX"
}

其实想快速上手只用配置这几个参数即可,后面再慢慢开放其他额外的功能

model对话大模型(这里我填的是moonshot-v1-8k,就是月之暗面的大模型,如果想填别的,就填对应的大模型名称,比如:gpt-3.5-turbo)

moonshot_api_key大模型对话api_key,每个大模型的apikey格式不一样,比如月之暗面的是moonshot_api_key、gpt的是open_ai_api_key

group_name_white_list配置群名白名单,就是说你的机器人要在哪个群里使用,就填写那个群的群名。

use_linkai填写true

linkai_api_key填写你在linkAI上申请的apikey

linkai_app_code填写你在linkAI上的app code

具体配置说明参考

配置说明 | LinkAI - 一站式AI智能体平台 - 极简未来

注册LinkAI账号

然后需要去LinkAI注册账号

LinkAI - 一站式AI智能体平台 - 极简未来

创建一个应用

选择知识库应用,并且创建对应的知识库。

然后上传一些资料到知识库上

问答文档的格式是csv,下载csv模版

模版内容是一问一答的形式。

我增加了一些测试数据

然后来到你创建的应用这里检查绑定知识库

知识库设置,未命中策略我修改为了固定文案,防止AI自行推理出错误的信息。

宝塔创建项目

配置完成后,回到宝塔界面新建python项目

项目路径:填写你压缩包解压后的根目录

运行文件:app.py

项目端口:8080(记得去你服务器上安全组查看下是否开放8080端口)

python版本:3.9.7(建议3.9.x都可以,3.10.x可能会有问题)

框架:python

运行方式:python

安装依赖包:解压包根目录下的requirements.txt文件

然后点击提交,等待项目创建完毕。

创建好后可能是未启动或者启动的状态,这个时候将项目修改为未启动状态。因为还有些依赖没安装完毕。

然后点击终端

输入下面命令安装可选依赖

pip3 install -r requirements-optional.txt       # 可选依赖,语音、tool插件等功能需要

依赖安装完毕后启动会报错缺少tiktoken模块,输入下面命令安装下

pip install tiktoken

启动项目

然后输入下面命令

首次运行需要新建日志文件

touch nohup.out 

运行程序并通过日志输出二维码

nohup python3 app.py & tail -f nohup.out  

执行成功后可以看到二维码打印出来,拿你想要当机器人的微信号扫码登录就可以

扫码登录完成后,可以关闭终端界面,程序会在后台执行。

你会发现服务装填是未启动,这个不影响,程序已经执行了。

输出的日志在项目根目录的run.log文件内

如果你调试过程中需要关闭或者重启项目

输入查询命令

ps -ef | grep app.py | grep -v grep

关掉对应PID程序

kill -9 15230

比如这里程序的pid是20945,输入kill -9 20945关掉程序。

测试截图

可以看到回复我的信息是调取了知识库的。

一些问题

测试爽了,但是发现一些问题,LinkAI确实挺好用的,就是小贵!

这可不行,我又尝试了coze、FastGPT等其他几个类似的平台之后,找到了一个相对便宜点的,智谱AI.

智谱AI开放平台

因为一上来会送你3000万的tokens,美滋滋

同样的,智谱AI也是需要去申请APIkey和知识库的。

适配知识库

但是chatgpt-on-wechat项目目前不支持质谱AI的知识库

在github上找到了修改方法

新增支持 GLM-4 知识库检索功能 by xiexin12138 · Pull Request #1758 · zhayujie/chatgpt-on-wechat · GitHub

修改bot/zhipuai/zhipuai_bot.py

和config.py

修改完成后重启项目,扫码登录,成功运行。

模板参考

下面是我部署过程中尝试的一些config模板

月之暗面

{
  "channel_type": "wx",
  "model": "moonshot-v1-8k",
  "moonshot_api_key": "sk-XXXX",
  "proxy": "",
  "hot_reload": false,
  "single_chat_prefix": [
    "bot",
    "@bot"
  ],
  "group_welcome_msg": "欢迎加入本群,欢迎语!!",
  "single_chat_reply_prefix": "[bot] ",
  "group_chat_prefix": [
    "@bot"
  ],
  "group_name_white_list": [
    "俺们俩的小群"
  ],
  "image_create_prefix": [
    "画"
  ],
  "speech_recognition": false,
  "group_speech_recognition": false,
  "voice_reply_voice": false,
  "conversation_max_tokens": 2500,
  "expires_in_seconds": 3600,
  "character_desc": "你是基于大语言模型的AI智能助手,旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
  "subscribe_msg": "感谢您的关注!\n这里是AI智能助手,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
  "use_linkai": true,
  "linkai_api_key": "Link_XXXXX",
  "linkai_app_code": "EsurXXX"
}

{
  "channel_type": "wx",
  "model": "glm-4",
  "zhipu_ai_api_key": "",
  "zhipu_ai_api_base": "https://open.bigmodel.cn/api/paas/v4",
  "zhipu_ai_knowledge_id": "",
  "proxy": "",
  "hot_reload": false,
  "single_chat_prefix": [
    "bot",
    "@bot"
  ],
  "group_welcome_msg": "欢迎加入本群,欢迎语!!",
  "single_chat_reply_prefix": "[bot] ",
  "group_chat_prefix": [
    "@bot"
  ],
  "group_name_white_list": [
    "俺们俩的小群"
  ],
  "image_create_prefix": [
    "画"
  ],
  "speech_recognition": false,
  "group_speech_recognition": false,
  "voice_reply_voice": false,
  "conversation_max_tokens": 2500,
  "expires_in_seconds": 3600,
  "character_desc": "你是基于大语言模型的AI智能助手,旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
  "subscribe_msg": "感谢您的关注!\n这里是AI智能助手,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
  "use_linkai": false,
  "linkai_api_key": "Link_XXXXXX",
  "linkai_app_code": "XXXXXX"
}

总结下就是,部署了这个项目后确实能给我省不少精力,后续我只需要将一些常见问题汇总,构建成知识库的形式,方便群友去查询。

关于平台,LinkAI挺方便的,可以直接选择GPT4、Kimi等主流大模型,就是有点贵。个人感觉GLM4的知识库回答没有LinkAI的那么灵活,可能是我还没调好。

官方文档参考

快速开始 | LinkAI - 一站式AI智能体平台 - 极简未来

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

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

相关文章

【面试干货】Hashtable 与 HashMap 的区别

【面试干货】Hashtable 与 HashMap 的区别 1、线程安全性2、对null值的处理3、遍历方式4、遍历示例5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,Hashtable和HashMap都是基于哈希表实现的Map接口。然而&#…

[Django学习]前端+后端两种方式处理图片流数据

方式1:数据库存放图片地址,图片存放在Django项目文件中 1.首先,我们现在models.py文件中定义模型来存放该图片数据,前端传来的数据都会存放在Django项目文件里的images文件夹下 from django.db import modelsclass Image(models.Model):title models.C…

Windows10任务栏卡顿解决方案

一、重新启动任务资源管理器 右键底部任务栏选择“任务管理器”;按快捷键“CtrlShiftEsc”;搜索框搜索“任务管理器”并单击“打开”;“WinX”打开开始菜单附属菜单,在列表中选择“任务管理器” ;按下“ctrlaltdelete”…

24年安克创新社招入职自适应能力cata测评真题分享北森测评高频题库

第一部分:安克创新自适应能力cata测评 感谢您关注安克创新社会招聘,期待与您一起弘扬中国智造之美。 为对您做出全面的评估,现诚邀您参加我们的在线测评。 测评名称:社招-安克创新自适应能力cata测评 第二部分:安克…

容器之笔记本构件演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>void rotate_book(GtkButton *button, GtkNotebook *notebook) {gtk_notebook_set_tab_pos(notebook, (notebook…

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级

1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可&#xff0c;但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉&#xff0c;比如现在设置 LED 这个主设备号为200&…

这周,接连两位程序员猝死...

这周接连发生了两起不幸的事。俩位程序员去世的消息&#xff0c;深感悲伤和惋惜。 6月17号下午&#xff0c;一位负责研发的女员工在虾皮研发中心办公室猝死&#xff0c;年仅 30 岁。 官方通告&#xff1a; 同一天&#xff0c;另一位科大讯飞的高级测试工程师在家突发不适离世…

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…

Xshell7免费版下载安装使用

​一、下载安装​ 1.打开官网下载 https://www.xshell.com/zh/free-for-home-school/ 2.选择合适的下载路径&#xff0c;点击下载按钮&#xff0c;然后按照提示完成安装。 二、Xshell7的使用&#xff0c;Xhell连接Linux 1.连接之前&#xff0c;确保在Linux中开启SSH。参考&a…

VBA学习(15):工作表加密保护后却把密码忘记了?

今天把过去的一篇推文重新整理一下&#xff0c;提供两种解除工作表加密的方法。 一种是傻瓜模式的VBA&#xff0c;复制运行以下代码&#xff0c;即可抹除当前工作簿所有工作表的保护加密。 Sub UnProtct()MsgBox "破解提示&#xff1a;当要求输入密码时请点击取消&#…

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…

【深入浅出MySQL】「数据同步架构」分析探索Canal开源技术原理和架构

分析探索Canal开源技术原理和架构 背景说明Canal基本介绍Canal作用方向MySQL同步原理Binlog Dump交互Binlog的协议模型Canal的模拟slave角色Canal的消费订阅 Canal Server模块Canal Instance模块参考资料类似开源项目 背景说明 在早期阶段&#xff0c;阿里巴巴B2B公司由于其在…

WPF文本框中加提示语

效果&#xff1a; WPF中貌似不能像winfrom里一样直接加提示语&#xff0c;需要使用TextBox.Style&#xff0c;将Trigger标签插入进去。 贴源码&#xff1a; <WrapPanel Name"TakeOverExpressNo1"><Label Content"物流单号&#xff1a;"><…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I &#x1f468;‍&#x1f3eb; 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机&#xff08;主机发现&#xff09; 扫描结果&#xff1a; 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描&#xff0c;查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 …

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

【泛微系统】解决启动非标功能时提示客户ID不一致的问题

解决启动非标时提示CID不一致的问题 泛微OA系统是一个非常丰富的系统,我们在日常工作中会经常遇到很多业务需求,我们会用到很多功能来承载这些需求的实现;OA系统里有标准功能,也有非标准的功能;对于非标准的功能需要打非标补丁包; 有些同学在个人学习系统的过程中会安装本…

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好&#xff0c;我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6 0…

Electron快速入门(二):在(一)的基础上修改两个文件完成自定义显示时间和天气的标题栏

修改主进程:main.js // main.jsconst { app, BrowserWindow } = require("electron"); const path = require("node:path"); const createWindow = () => {try {const mainWindow = new BrowserWindow({width: 1200,height: 870,alwaysOnTop: true,fr…