从开发到部署:一站式指南创建个性化 Slack App 问答机器人
datehoer 5/12/2023 教程
# 介绍 - 开场白
- 自我介绍:介绍你自己,包括你的背景和经验,以便观众了解你的资质。
- 无
- 说明视频的目的和主题:明确说明你要录制这个视频的目的,例如教观众如何开发 Slack App 问答机器人。
- 为知识付费值得,但是为免费的知识付费就不值得了
- 当然这里其实别人把免费的整理起来还是可以的,但是⬇
- 拒绝割韭菜,从我做起
- 割其实我不反对,我也想。但是好多大佬都把小白当成白痴来割,让人不爽。
- 明明有的大佬分享干货,各种解答疑惑,才赚那么点钱
- 而有的人拿着免费的东西,却能大割特割
- 通过Chat GPT开发Slack App问答机器人 语音识别+gpt3.5+gpt4
- 回复速度挺慢的,api生成速度比较缓慢再加上网络问题
- 为知识付费值得,但是为免费的知识付费就不值得了
# Slack App 问答机器人简介
解释什么是 Slack App:介绍 Slack App 的概念和功能,以及它如何为用户提供沟通和协作的平台。
slack类似于一个全端聊天工具,是一款企业级的团队协作和沟通工具。提供了bot接口,可以让开发者自己开发应用。
利用slack的app来实现gpt问答功能
增加语音对话,其实没什么东西,使用slack的app会有发送语音的功能,然后机器人将语音->文本->gpt->语音即可
这个其实是看微信公众号的一个人割韭菜发的,然后简单实现了一下,理论上讲功能差距应该不大。
文案机器人,各种不同的对话。没啥乱用,直接用Chat GPT也可以实现
说明问答机器人的用途和好处:阐述为什么开发一个问答机器人对于团队或组织来说是有价值的,例如提高效率、解答常见问题等。
- 这里其实只是单纯看不惯别人割韭菜,虽然我也想割。
- 没有什么好的中文参考资料
- 简单分享
# 准备工作
Slack 工作区的创建和设置:演示如何创建一个新的 Slack 工作区,并设置所需的频道和权限。
- 权限具体到需要哪个我其实也不记得了,我建议像我一样都给。
- 然后需要的token有
- User OAuth Token
- Signing Secret
- App-level tokens
创建一个新的 Slack App:步骤展示如何创建一个新的 Slack App,并选择适当的权限和功能。
这里我简单演示一下
- 进入 Slack API 平台 (opens new window),创建一个 Slack App。
- 进入Your app (opens new window)
- 点击Create New App
- 点击From scratch
生成认证令牌和安装应用到工作区:演示如何生成用于认证的令牌,并将应用程序安装到 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
- Redis
- 这里选择的是python,然后用到的库有
- 初始化一个新的项目:演示如何创建一个新的项目,并设置必要的依赖项。
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
- 语音转文本
- 利用的是openai的whisper库 (opens new window),这个其实也可以使用它的那个openai库里的whisper (opens new window)
- 语音转文本
- is_chinese
- 判断是否为中文
- gen_voice
- 生成语音
- 文本转语音使用pyttsx3在Windows上效果非常好,可惜在Linux上不行
- 使用gtts效果一般
- 生成语音
- handle_app_mention_events
- bot主进程
- chat
# 设置事件订阅和处理
- 注册和处理 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有时会超时
- try except
- slack有时会超时
- https://github.com/slackapi/python-slack-sdk/issues/436
- https://github.com/slackapi/python-slack-sdk/issues/805
- 每次update sleep 1s
- openai有时会超时
# 添加问答功能
- 创建问题和答案的数据结构:介绍如何设计和组织问题和答案的数据结构,以便问答机器人能够进行匹配。
- 无结构
- 实现问答匹配逻辑:演示如何编写匹配算法,使问答机器人能够根据用户的问题找到相应的答案。
- 调用openai
- 响应用户的问题并返回正确的答案:展示如何编写代码,使机器人能够根据匹配结果向用户提供正确的答案。
- 等待回答生成返回
- 流式生成返回
- 根据聊天记录来进行连续对话
- 通过redis存储对话数据来进行连续对话
- channel_id:thread_ts对应一个对话
- 通过get获取历史数据
- 存在则加载历史记录
- 不存在则创建新对话
conversations_replies(channel, ts)
提供channel_id以及thread_ts即可获取对话历史- 这个我记得有弊端还是因为懒得处理返回数据。
- 通过redis存储对话数据来进行连续对话
# 部署问答机器人
- 配置部署环境:演示如何设置部署环境,例如选择服务器或云平台,并进行相应的配置。
- 用的美国服务器,国内貌似墙了openai
- 解密中国长城防火墙(GWF)背后的数据
- 中国为什么要架长城防火墙? 这墙该不应架
- 用的美国服务器,国内貌似墙了openai
- 部署应用程序到生产环境:展示如何将问答机器人的应用程序部署到选定的环境中,并确保其正常运行。
- 无需更改代码,使用docker搭建环境
- 没有打包镜像,直接创建的python容器然后pip install
- 无需更改代码,使用docker搭建环境
- 配置应用在 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
- 百度
- 利用Ai
- ChatGPT
- 文心一言
- new bing
- 提供有用的资源和链接:分享相关文档、教程、库或其他资源的链接,供观众深入学习和进一步开发。
- https://github.com/slackapi/bolt-js/issues/885 slack流式回答
- https://github.com/openai/openai-cookbook/blob/main/examples/How_to_stream_completions.ipynb openai流式回答
- https://aircode.cool/zx85v6ac4s 一个用node.js写的slack对话
- 结束视频:感谢观众的观看,并鼓励他们在评论或其他方式中提供反馈和问题。