从开发到部署:一站式指南创建个性化 Slack App 问答机器人

从开发到部署:一站式指南创建个性化 Slack App 问答机器人

介绍 - 开场白

  • 自我介绍:介绍你自己,包括你的背景和经验,以便观众了解你的资质。
  • 说明视频的目的和主题:明确说明你要录制这个视频的目的,例如教观众如何开发 Slack App 问答机器人。
    • 为知识付费值得,但是为免费的知识付费就不值得了
      • 当然这里其实别人把免费的整理起来还是可以的,但是⬇
    • 拒绝割韭菜,从我做起
      • 割其实我不反对,我也想。但是好多大佬都把小白当成白痴来割,让人不爽。
      • 明明有的大佬分享干货,各种解答疑惑,才赚那么点钱
      • 而有的人拿着免费的东西,却能大割特割
    • 通过Chat GPT开发Slack App问答机器人 语音识别+gpt3.5+gpt4
      • 回复速度挺慢的,api生成速度比较缓慢再加上网络问题

Slack App 问答机器人简介

  • 解释什么是 Slack App:介绍 Slack App 的概念和功能,以及它如何为用户提供沟通和协作的平台。

    • slack类似于一个全端聊天工具,是一款企业级的团队协作和沟通工具。提供了bot接口,可以让开发者自己开发应用。

    • 利用slack的app来实现gpt问答功能

    • 增加语音对话,其实没什么东西,使用slack的app会有发送语音的功能,然后机器人将语音->文本->gpt->语音即可

      • 这个其实是看微信公众号的一个人割韭菜发的,然后简单实现了一下,理论上讲功能差距应该不大。

        image-20230525163101755

    • 文案机器人,各种不同的对话。没啥乱用,直接用Chat GPT也可以实现

  • 说明问答机器人的用途和好处:阐述为什么开发一个问答机器人对于团队或组织来说是有价值的,例如提高效率、解答常见问题等。

    • 这里其实只是单纯看不惯别人割韭菜,虽然我也想割。
    • 没有什么好的中文参考资料
    • 简单分享

准备工作

  • Slack 工作区的创建和设置:演示如何创建一个新的 Slack 工作区,并设置所需的频道和权限。

  • 创建一个新的 Slack App:步骤展示如何创建一个新的 Slack App,并选择适当的权限和功能。

    • 这里我简单演示一下

      image-20230525151056272

      • 点击From scratch

      image-20230525151148255

  • 生成认证令牌和安装应用到工作区:演示如何生成用于认证的令牌,并将应用程序安装到 Slack 工作区中。

    • 弄好权限后点击install App即可

编写问答机器人的代码

  • 选择适合的编程语言和开发环境:介绍一些常用的编程语言和开发环境,让观众了解可选项。
    • 这里选择的是python,然后用到的库有
      • slack_bolt
      • logging
      • gtts
      • whisper
      • openai
      • json
      • io
      • requests
      • redis
      • re
      • time
    • 开发其实主要依靠Chat GPT写大概,然后通过我来补全详细功能
      • 利用slack_bolt接入bot
      • 接收用户信息
      • 单独回复
      • 接入openai
      • 获取语音消息
      • 文本转换
      • 流式输出
    • 用到的工具有:
      • Pycharm
      • Chat GPT
      • Google
      • Redis
  • 初始化一个新的项目:演示如何创建一个新的项目,并设置必要的依赖项。
    • pip install -i https://mirrrors.cloud.tencent.com/pypi/simple
    • pip install --proxy http://127.0.0.1:7890
    • 通过Chat GPT写初始代码
    • 写语音转文本,文本转语音代码
    • 流式输出回答
  • 引入 Slack App 相关的库或 SDK:介绍可用的 Slack App 开发库或 SDK,并演示如何导入和配置它们。
    • 利用到的方法有
      • chat_update 更新文本–流式输出(很丑陋,没有Claude的优雅)
      • chat_postMessage 发送消息
      • files_upload_v2 上传文件
      • conversations_replies 读取历史文本(可选)
  • 创建问答机器人的基本结构和功能:展示如何创建问答机器人的基本代码结构,并解释每个组件的作用。
    • chat
      • 调用openai
    • download
      • 下载音频附件
    • get_text
    • is_chinese
      • 判断是否为中文
    • gen_voice
      • 生成语音
        • 文本转语音使用pyttsx3在Windows上效果非常好,可惜在Linux上不行
        • 使用gtts效果一般
    • handle_app_mention_events
      • bot主进程

设置事件订阅和处理

  • 注册和处理 Slack 事件:解释如何注册并处理 Slack 事件,以便与用户的消息和互动进行交互。
    • 通过@app.event("app_mention")驱动进程
    • 利用body里的event获取对话参数
    • 将对话数据存入redis中/读取历史文本
  • 监听用户消息和应答:演示如何监听用户发送的消息,并根据特定的触发条件做出相应的应答。
    • 通过app_mention监听@事件
      • View messages that directly mention @chatgpt in conversations that the app is in
    • 通过channel_id以及thread_ts固定对话
  • 报错

添加问答功能

  • 创建问题和答案的数据结构:介绍如何设计和组织问题和答案的数据结构,以便问答机器人能够进行匹配。
    • 无结构
  • 实现问答匹配逻辑:演示如何编写匹配算法,使问答机器人能够根据用户的问题找到相应的答案。
    • 调用openai
  • 响应用户的问题并返回正确的答案:展示如何编写代码,使机器人能够根据匹配结果向用户提供正确的答案。
    • 等待回答生成返回
    • 流式生成返回
  • 根据聊天记录来进行连续对话
    • 通过redis存储对话数据来进行连续对话
      • channel_id:thread_ts对应一个对话
      • 通过get获取历史数据
        • 存在则加载历史记录
        • 不存在则创建新对话
    • conversations_replies(channel, ts)提供channel_id以及thread_ts即可获取对话历史
      • 这个我记得有弊端还是因为懒得处理返回数据。

部署问答机器人

  • 配置部署环境:演示如何设置部署环境,例如选择服务器或云平台,并进行相应的配置。
    • 用的美国服务器,国内貌似墙了openai
      • 解密中国长城防火墙(GWF)背后的数据
      • 中国为什么要架长城防火墙? 这墙该不应架
  • 部署应用程序到生产环境:展示如何将问答机器人的应用程序部署到选定的环境中,并确保其正常运行。
    • 无需更改代码,使用docker搭建环境
      • 没有打包镜像,直接创建的python容器然后pip install
  • 配置应用在 Slack 工作区中的设置:演示如何在 Slack 工作区中配置问答机器人的设置,例如添加命令、权限和触发条件。
    • 无需修改

在 Slack 中测试问答机器人

  • 在 Slack 工作区中使用问答机器人:演示在 Slack 中与问答机器人进行实际的测试对话,以验证其功能和准确性。
  • 演示不同的问题和回答:展示多个例子,涵盖不同类型的问题和相应的答案,以展示机器人的灵活性和适应性。
  • 检查问答机器人的性能和准确性:讨论如何评估问答机器人的性能,并提供一些建议来改进和优化其准确性和响应速度。
  • 利用的是openai所以其实准确度是要看openai的,简单问几个问题/部分问题来自于弱智吧
    • In the room there are John, Mark, a cat, a box, and a basket. Joh n takes the cat and puts it in the basket. He leaves the room and goes to school. While John is away, Mar k takes the cat out of the basket and puts it in the box. Mark leaves the room and goes to work. John and ! Mark come back and enter the room. They don’t know what happened in the room when they were a way. What do they think?
    • 介绍一下你自己
    • 如何评价如何评价
    • 昨天朋友家孩子考上大学了,我去吃酒身上没现金,向他借了800元随礼,回家后我就微信转800元还给他,结果他说我白吃了他一顿饭。问,谁对谁错?
    • 眼镜蛇在人们发明眼镜之前叫做什么
    • 马上要上游泳课了,昨天洗的泳裤还没干,怎么办
    • 桑拿房里那么热也不装空调是为什么?
    • 几十年过去了,第一个登月的人还是阿姆斯特朗,这是怎么回事?
      A.资本主义的阴谋 B.西方政府的阴谋 C.三体人的阴谋
    • 郭富城为斯蒂芬尼做了一件非常成功的工作:他打开桌子,揉了揉指甲。你和你老婆春节后生了一个坏女孩。盖尔和白鸟王被萨克兄弟的车吓了一跳。孙武汉手机壳健康,每次洗内裤手机壳驾驶室依然健康
      1.联系上下文,说一说“非常成功的工作”在文中指什么
      2.白鸟王的人物形象是怎么样的?结合你的生活,分析白鸟王的形象
      3.文中的“手机壳驾驶室”和前文中萨克兄弟的车有什么关系?
      4.本文描写了一副什么样的景色?请为本文起上三个合适的题目,并选择一个填在题目栏中
      5.文中各处文字无不透露出作者对当时社会腐朽昏暗,人们自甘堕落的愤怒与忧伤,请选出文中的一处描写,对其加以分析,不少于250字
    • 活人和死人结婚是冥婚,那死人和活人结婚叫什么?
    • 骄兵必败,而败兵必哀,而哀兵必胜,所以骄兵必胜

总结和结语

  • 回顾视频中的主要内容和步骤:总结你在整个视频中介绍的关键步骤和概念,以帮助观众复习和理解。
  • 强调问答机器人的优点和潜在应用:提供更多关于问答机器人的优势和潜在应用领域的信息,激发观众对其可能性的兴趣。
    • 前面已经说了,其实最方便的就是国内可用。
    • 但是需要非国内邮箱注册,推荐outlook
    • gpt的账号实际上买才2.5元一个,还有5刀的api余额
      • 如果自己注册的话,除了冲接码平台的钱以外几乎一分不花
    • 利用搜索引擎
      • bing
      • phind
      • duckduckgo
      • google
      • 百度
    • 利用Ai
      • ChatGPT
      • 文心一言
      • new bing
  • 提供有用的资源和链接:分享相关文档、教程、库或其他资源的链接,供观众深入学习和进一步开发。
  • 结束视频:感谢观众的观看,并鼓励他们在评论或其他方式中提供反馈和问题。

Linux服务器时间同步

首先查看服务器当前时区

1
date -R

然后使用

1
2
apt-get install -y tzdata
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

docker需要给权限才可以修改相关数据

启动时增加命令

1
--privileged=true

pixel3刷机记录

root通过magisk

首先需要下载镜像

image-20230323141410804

打开开发者模式,狂戳Setting -> Build number,打开USB调试,Setting -> System -> Developer Options打开Usb debugging,勾选oem unlocking

之后打开usb调试使用adb reboot bootloader或者关机后按开机键+音量下键

然后下载android-platform-tools工具包

解压下载的镜像文件以及内部的zip文件

image-20230323141617174

然后运行flash-all.bat等待刷机成功

之后安装magisk

然后将解压后的boot.img文件push到手机中

1
adb push ./blueline-rq2a.210505.002/image-blueline-rq2a.210505.002/boot.img sdcard/Download

然后打开magisk选择安装然后修补选择boot.img等待修补完成后会生成一个patched将它pull到本地

1
adb pull /sdcard/Download/magisk_patched-23000_J2eHI.img

之后进入fastboot adb reboot bootloader

然后fastboot解锁,fastboot flashing unlock 如果已解锁则跳过

然后刷入patched.img

1
fastboot flash boot magisk_patched-23000_J2eHI.img

之后重启手机就行了。

刷入电信支持

  1. github下载china_telecom_supporter,https://github.com/apporc/china_telecom_supporter

  2. 把压缩包push到手机上
    adb push ./china_telecom_supporter.zip /sdcard/Download

  3. adb命令解压

    1
    unzip -d /sdcard/Download/china_telecom_supporter /sdcard/Download/china_telecom_supporter.zip
  4. 移动解压后的文件夹到系统目录/data/adb/modules/

    1
    mv /sdcard/Download/china_telecom_supporter /data/adb/modules/china_telecom_supporter
  5. 删除 fdr_check 文件
    rm /data/vendor/modem_fdr/fdr_check

  6. 重启,如果刷入成功此时进入系统可以看到电信的信号了,能正常打电话和流量上网~

验证码每次请求都会变解决方法

如果利用模拟浏览器等方式通过验证码会遇到验证码每次请求都会变,那么这样就不能直接请求获取到验证码数据了。

所以这里其实直接通过js下载图片就行了。

1
2
3
4
5
let c = document.createElement('canvas');let ctx = c.getContext('2d');
let img = document.querySelector('.mac_verify_img') // 获取验证码元素
c.height=img.naturalHeight;c.width=img.naturalWidth;
ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);
let base64String = c.toDataURL();

这里的base64String就是当前验证码的base64地址了

image-20230324104359504

twitter api申请

申请链接 link

点击后可看到如下页面,点击右上角的create an app

image-20230323170208341

点击apply

image-20230323170216081

填写基本信息

image-20230323170235080

填写完信息后同意条款,务必绑定手机号

image-20230323170329740

然后验证邮件

image-20230323170613519

image-20230323170716106

填写基本信息

image-20230323170838764

image-20230323170859739

确认信息

image-20230323171621076

同意协议和政策

image-20230323171653262

提交后等待48小时知晓结果

image-20230323171713402

如果通过后,那么需要发送一下进一步激化,然后发送邮件即可。

微软登录提示我们无法向此号码发送短信

发现登录提示需要手机号验证,但是输入手机号都不可以发送短信。

image-20230330094610026

然后看到提示说联系微软客服来进行操作。

1
2
3
4
5
6
7
8
9
10
您好,欢迎咨询Microsoft 社区,我是Li,很荣幸能为您提供技术支持。

这是一个bug导致发送短信时会提示‘’我们无法向此号码发送短信‘’,微软已经在开始调查,在这期间您可以联系Microsoft客服解锁账号。

https://support.microsoft.com/zh-cn/contactus/

希望这对您有帮助。
Give back to the Community. Help the next person who has this issue by indicating if this reply solved your problem. Click Yes or No below.

Tao Li - Microsoft 社区独立顾问

然后呢,我就找到了这个链接[联系 - Microsoft 支持部门](https://support.microsoft.com/zh-cn/home/contact?SourceApp=smc2&ContactUsExperienceEntryPointAssetId=S.HP.SmcContactUsLanding)

之后下面有一个登录以联系支持人员

image-20230330094700029

点击按钮,然后发现弹出来的一个框是一个英文的,然后输入手机号发现居然可以发送短信了。

雷电模拟器无法抓包

配置好各种配置后,发现雷电模拟器无法获取数据包

1
adb shell settings put global http_proxy 192.168.1.100:8888

设置全局代理即可

Linux安装Firefox

可以使用无头模式(Headless mode)来启动Firefox,从而不需要使用Xvfb。无头模式可以在后台运行Firefox,无需显示任何GUI窗口,这样可以更节省系统资源。

要在CentOS 7上使用Selenium和Firefox的无头模式,您可以按照以下步骤操作:

  1. 安装Firefox和geckodriver:在CentOS 7上,您可以使用以下命令安装Firefox和geckodriver:

    1
    2
    3
    4
    5
    sudo yum install firefox
    wget https://github.com/mozilla/geckodriver/releases/download/v0.30.0/geckodriver-v0.30.0-linux64.tar.gz
    tar -xvzf geckodriver-v0.30.0-linux64.tar.gz
    chmod +x geckodriver
    sudo mv geckodriver /usr/local/bin/
  2. 安装Python和Selenium:您需要安装Python和Selenium,以便从Python脚本中运行Selenium测试。您可以使用以下命令安装它们:

    1
    2
    sudo yum install python3 python3-pip
    sudo pip3 install selenium
  3. 在Python脚本中使用无头模式启动Firefox并运行测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from selenium import webdriver

    # 设置Firefox选项
    options = webdriver.FirefoxOptions()
    options.add_argument('-headless') # 无头模式

    # 启动Firefox
    driver = webdriver.Firefox(options=options)

    # 运行测试
    driver.get('https://www.google.com')
    print(driver.title)

    # 关闭Firefox
    driver.quit()

    这将使用无头模式启动Firefox,并在其中运行Selenium测试。请注意,此模式下无法看到浏览器的GUI界面。

Android使用V2RayNG

简介

V2RayNG 是一款运行在 Android 系统上的代理工具,支持 SS/V2Ray 协议。界面设计对新手较为友好,运行稳定性也不错。

下载和安装

直接下载: v2rayNG_1.7.30

Github: https://github.com/2dust/v2rayNG/releases

使用教程

添加订阅

打开 V2RayNG ,点击左上角三道杠标志,进入订阅设置。

点击 + 以添加新的订阅。请粘贴自己的订阅地址。

返回软件首页。点击右上角三个点的选项。选择更新订阅后等待若干秒,软件会从服务器下载配置。

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

连接节点

点击右下角 V 字图标启动代理。首次配置会提示是否创建VPN代理,请允许。

此时您的手机已经可以出国留学,enjoy。

其他设置

分流设置

进入设置页面,找到路由模式,更改为绕过局域网和中国大陆。

DNS设定

如果您不了解此项目,请勿更改。

Android使用clash

简介

Clash 是一个使用 Go 语言编写,基于规则的跨平台代理软件核心程序。
Clash for Android 是安卓系统上的一款 Clash 客户端。

下载

直接下载: cfa-2.5.12-premium

Github: https://github.com/Kr328/ClashForAndroid/releases

网盘可能不是最新版,如果网络允许可以前往Github下载

使用方法

添加订阅

面板是有一键订阅的,直接点击就好,手动如下步骤

打开 Clash for Android ,依次进入 配置 > 新配置 > URL 。 在 URL 一栏中粘贴 Clash 配置订阅链接;自动更新 (分钟) 推荐填写 1440 ,即每 24 小时自动从链接中更新配置文件。

完成后点击右上角的保存按钮,Clash for Android 将下载配置文件,请点击选中添加的配置文件。

更新订阅

首先保证当前状态并没有开启任何代理工具!!!保证网络处于可用状态

近期表示上一次更新订阅时间,更新订阅点击箭头处,在弹出窗口点击更新即可更新订阅

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

更新订阅失败,请查阅使用文档内 无法更新订阅的解决方法

开启代理

返回软件首页。点击开关,即可进行代理。会提示是否同意创建VPN,请点击允许

点开 “代理”,可以策略组进行选择。

Clash 支持通过策略组,对不同的网站使用不同的策略。合理使用分流可以提升您的使用体验。