|
@@ -139,11 +139,57 @@ def schedule_news():
|
|
|
|
|
|
### 阅读文档
|
|
### 阅读文档
|
|
|
|
|
|
-比如发送一个url链接,先获取url内容,转换为llama-index向量,发送到openai:
|
|
|
|
|
|
+比如发送一个url链接,先获取url内容,转换为 llama-index 向量,发送到openai。
|
|
|
|
+
|
|
|
|
+比如用户发送一个pdf,并@bot后触发机器人发送消息到api服务器,先调用pyPDF2解析pdf为字符串,index 向量化,发送到openai。
|
|
|
|
+
|
|
|
|
+用户发送消息,会调用
|
|
|
|
+```
|
|
|
|
+@slack_app.event(event="message", middleware=[bot_messages])
|
|
|
|
+def log_message(logger, event, say):
|
|
|
|
+ try:
|
|
|
|
+ if is_premium_user(event["user"]):
|
|
|
|
+ bot_process(event, say, logger)
|
|
|
|
+```
|
|
|
|
+这里使用的是slack sdk设置一个监听器,接受 slack消息交由 bot_messages 函数处理:
|
|
|
|
+```
|
|
|
|
+def bot_process(event, say, logger):
|
|
|
|
+ if event.get('files'):
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+如果发送的是文件,检测文件后缀为pdf,文件大小,然后再下载文件:
|
|
|
|
+```
|
|
|
|
+ response = requests.get(url_private, headers={"Authorization": "Bearer " + slack_app.client.token})
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
|
|
|
|
|
|
-发送slack消息:
|
|
|
|
|
|
+
|
|
|
|
+### 语音对话
|
|
|
|
+
|
|
|
|
+如果发送的是语音(filetype_voice_extension_allowed = ['m4a', 'webm', 'mp3', 'wav']),检测文件后缀为pdf,文件大小,然后再下载文件:
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
-```
|
|
|
|
|
|
+ voicemessage = get_text_from_whisper(file_md5_name)
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+flask 添加 handler 消息处理:
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+@app.route("/slack/events", methods=["POST"])
|
|
|
|
+def slack_events():
|
|
|
|
+ return slack_handler.handle(request)
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## 总结
|
|
|
|
+
|
|
|
|
+可以发现:
|
|
|
|
+
|
|
|
|
+1、用户上传一个pdf文件,首先会上传到slack服务器,然后再发送到api服务器,api服务器解析为字符串后,最后发送到openai。所以api服务器的上传带宽需要设置较大,否则并行会卡住。
|
|
|
|
+
|
|
|
|
+2、无需数据库,提取词由llama—index保存为json数据。
|
|
|
|
+
|
|
|
|
+3、处理时间较久,用户交互中直接回复消息,后续通过slack 再主动发送消息。这个和微信公众号类似,不过公众号太奇葩,只支持客服消息接口主动发送消息。
|
|
|
|
+
|
|
|
|
+
|