Ollama+DeepSeek+SlackBot

技术背景

想必最近有在部署DeepSeek大模型的人,看标题就知道这篇文章在做什么事情了。由于Ollama对于IP的监听缺乏安全防护,并且内网部署的Ollama模型对于外网来说也是不可见的,而如果使用一些公网API,又存在隐私数据泄露的风险。这里提供一个方案:使用端到端加密的通讯软件,将消息内容转为token传输给Ollama本地部署的模型,然后接收token作为消息,通过加密通讯返回给用户。但是考虑到加密通讯软件的用户群体并不是很大,这里仅仅使用Slack作为一个演示。需要注意的是,Slack公司也有自己的AI模型SlackAI,在用户数据安全防护这一块有多大的可靠性,留给大家自行判断。

Slack应用注册流程

我们先假定你已经有一个Slack账号和相应的Slack工作区了,那么可以进入到app界面去创建一个自己的应用:

我选择的是scratch创建模式:

这样就能在网页界面上进行配置。选择好自己的工作区,配置该机器人在工作区中的名字:

创建完成后大概是这样的:

然后可以进入到APP的设置界面:

要打开Socket模式:

权限配置在Event SubscriptionsOAuth & Permissions中:

但是权限配置这一块需要后面单独开一个章节,请继续往下看。配置完成后,可以把应用安装到自己的工作区:

安装完成后,打开本地的Slack客户端,找到应用-添加应用,在列表中属于该工作区的应用会排在最前面,可以直接将其加入工作区:

这样以后就可以在应用列表看到自己定义的应用了。

关键信息

Slack应用创建之后,有几个关键的tokens信息(可以自己在Slack APP网页找到相关的字符串)需要保存到本地:

  1. SLACK_BOT_TOKEN,是一串xoxb-开头的字符串,用QAuth&Permissions里面的Bot User OAuth Token
  2. SLACK_APP_TOKEN,是一串xapp-开头的字符串,从Basic Information里面的APP Level Tokens里面找,注意权限配置;
  3. SLACK_SIGNING_SECRET,是一串普通的随机字符串,从Basic Information里面找。

关键配置

想要正常的使用SlackBot,有几个关键的权限配置,如果权限配置错误,会导致SlackBot无法正确的读取消息或者正确地对消息进行反应。

首先是APP Level Tokens的配置(参考这里的ChatBotApp里面的配置):

然后是Event Subscriptions中的配置信息:

最后是两个QAuth&Permissions的配置参数:

需要注意的是,这些都是个人配置信息,仅供参考。

slack_bolt环境配置

slack_bolt可以允许你从本地Python启动服务,调用SlackBot的API,监听Slack应用程序中的对话,并且可以按照不同的权限跟用户进行对话。可以使用pip安装slack_bolt:

$ python3 -m pip install slack_bolt
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting slack_boltDownloading https://pypi.tuna.tsinghua.edu.cn/packages/5d/2d/fb23c998c43ff8398d7fa1e58bb82e7e735fbdaa0bd4ddaac04b3865bd4c/slack_bolt-1.22.0-py2.py3-none-any.whl (229 kB)
Collecting slack_sdk<4,>=3.33.5 (from slack_bolt)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/25/2d/8724ef191cb64907de1e4e4436462955501e00f859a53d0aa794d0d060ff/slack_sdk-3.34.0-py2.py3-none-any.whl (292 kB)
Installing collected packages: slack_sdk, slack_bolt
Successfully installed slack_bolt-1.22.0 slack_sdk-3.34.0

然后根据前面重要配置信息中提到的,配置Token:

# export SLACK_BOT_TOKEN=xxx
# export SLACK_APP_TOKEN=xxx
# export SLACK_SIGNING_SECRET=xxx

先测试一个简单的Python脚本:

import osfrom slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler# Install the Slack app and get xoxb- token in advance
app = App(token=os.environ["SLACK_BOT_TOKEN"])if __name__ == "__main__":SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

运行效果:

$ python3 slack_chatbot.py 
⚡️ Bolt app is running!

这就表示本地SlackBot安装成功了,当然,这个程序本身没有附带任何的功能。可以稍微升级一下SlackBot的测试功能:

import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler# Initializes your app with your bot token and socket mode handler
app = App(token=os.environ.get("SLACK_BOT_TOKEN"), signing_secret=os.environ.get("SLACK_SIGNING_SECRET"))# Listens to incoming messages that contain "hello"
# To learn available listener arguments,
# visit https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
@app.message("hello")
def message_hello(message, say):# say() sends a message to the channel where the event was triggeredsay(f"Hey there <@{message['user']}>!")@app.event("app_mention")
def handle_mentions(event, say):say(text="Hello!", channel=event["channel"])# Start your app
if __name__ == "__main__":SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

在这个案例中,我们的程序会对一个事件和一个关键词起反应。例如我们只@slackbot的话,会返回一个hello:

如果@slackbot并且带上指定的字符串,那么就会做出相应的特别处理:

SlackBot对接Ollama模型

在上述章节中已经完成了本地通信的一些配置,接下来我们可以把SlackBot对接到Ollama模型中,原理也很简单:触发SlackBot之后,将消息作为token转发给Ollama的API,然后等待回复再回传给Slack聊天界面。这就是我做的一个简单的框架,接下来看看具体实施。

首先安装Ollama通信相关依赖:

$ python3 -m pip install requests python-dotenv

直接上D老师给的代码:

import os
import re
import requests
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
from dotenv import load_dotenv# 加载环境变量
load_dotenv()# 初始化 Slack 应用
app = App(token=os.environ["SLACK_BOT_TOKEN"],signing_secret=os.environ["SLACK_SIGNING_SECRET"]
)# Ollama 配置(可通过环境变量覆盖)
OLLAMA_ENDPOINT = os.getenv("OLLAMA_ENDPOINT", "http://localhost:11434/api/generate")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "deepseek-r1:14b")
OLLAMA_PARAMS = {"num_ctx": int(os.getenv("OLLAMA_NUM_CTX", 4096)),"num_gpu": int(os.getenv("OLLAMA_NUM_GPU", 64)),"keep_alive": os.getenv("OLLAMA_KEEP_ALIVE", "2h")
}def query_ollama(prompt: str) -> str:"""向 Ollama 发送请求并获取完整响应"""payload = {"model": OLLAMA_MODEL,"prompt": f"请先输出思考过程(用THINKING:开头),再输出最终答案(用ANSWER:开头):\n\n{prompt}","stream": False,# "options": OLLAMA_PARAMS}try:response = requests.post(OLLAMA_ENDPOINT, json=payload, timeout=6000)response.raise_for_status()return response.json()["response"]except Exception as e:return f"Ollama 请求失败: {str(e)}"def format_slack_response(raw_response: str) -> str:"""将原始响应分割为思考过程和最终答案"""thinking_match = re.search(r"THINKING:(.*?)(ANSWER:|\Z)", raw_response, re.DOTALL)answer_match = re.search(r"ANSWER:(.*)", raw_response, re.DOTALL)thinking = thinking_match.group(1).strip() if thinking_match else "未提供思考过程"answer = answer_match.group(1).strip() if answer_match else raw_responsereturn (f"*🤔 思考过程*:\n```{thinking}```\n\n"f"*💡 最终回答*:\n```{answer}```")@app.event("app_mention")
def handle_ollama_query(event, say):"""处理 Slack 提及事件"""# 移除机器人提及标记query = event["text"].replace(f'<@{app.client.auth_test()["user_id"]}>', '').strip()# 获取原始响应raw_response = query_ollama(query)# 格式化响应slack_message = format_slack_response(raw_response)# 发送到 Slack 频道say(text=slack_message, channel=event["channel"])if __name__ == "__main__":SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

只要运行这个Python脚本,就可以通过SlackBot启动Ollama本地对话服务。可以查看会话过程中Ollama的模型被调用(本地部署了多个模型,不要在意ModelName的差异):

$ ollama ps
NAME                   ID              SIZE     PROCESSOR          UNTIL              
deepseek-r1:32b-q40    13c7c287f615    21 GB    30%/70% CPU/GPU    4 minutes from now

成果展示

通过上一个章节部署完成,启动会话服务之后,可以测试一下本地DeepSeek蒸馏模型的回答。

简单提问:

进一步提问:

因为每一次回复需要时间,不是流式的响应,因此我自己加了一个响应回复:

这样就会告知用户,你的提问已经被接收到了,服务正在正常运行,模型正在推理。

更多的示例就不一一展示了,跟之前介绍过的AnythingLLM和ChatBox、PageAssit等相比功能还是非常欠缺的,有兴趣的朋友可以考虑进一步去拓展。

方案选择

前一段时间有很多新闻在报道Ollama的安全漏洞,在公网上有众多开放Ollama端口的服务器可以被有心之人利用。这件事也引起了很多大模型本地用户的警觉,D老师对比了几种可能用到的方案并给出了建议:

D老师认为,使用自建的加密聊天工具+Ollama的安全加固,会是一个比较好用的方案。既可以满足用户的数据隐私需求,又可以很大程度上提高本地大模型使用的灵活度。而这篇文章中我们所使用到的是公共聊天工具+Ollama的方案,相比于使用公网API,数据隐私会稍好一些。但是这里面的数据隐私也很大程度上依赖于聊天工具对于用户隐私数据的保护程度,用户需要自己进行鉴别。

总结概要

本文介绍了一种使用Slack聊天工具中的机器人SlackBot的API接口,实现本地化部署Ollama的DeepSeek大模型的远程通讯方案。相比于调用公网的API接口,数据隐私稍微好一点点。最终的方案应该是自建加密聊天工具+Ollama本地化部署,但是这个时间成本有点高,用户可以自行尝试。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/slackbot.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考链接

  1. https://tools.slack.dev/bolt-python/getting-started
  2. https://cloud.tencent.com/developer/article/2468402

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GreatSQL 8.0.32-27 GA (2025-3-10)

GreatSQL 8.0.32-27 GA (2025-3-10)版本信息发布时间:2025年3月10日版本号:8.0.32-27, Revision aa66a385910下载链接:https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-27用户手册:https://greatsql.cn/docs/8.0.32-27/改进提升 在GreatSQL 8.0.32-27版…

牛客题解 | 求整数的阶乘

牛客题库题解题目 题目链接 题解: 题目难度:中等难度 难点: 1.由于数据太大无法通过整数类型表示,因此用字符串存储结果 2.对于每个字符串从尾部开始进行简单的乘法,在其中考虑进位 知识点:大数相乘 思路: 1.构造multiply(int x, int res[], int res_size)函数,数组res…

OP13常见问题

1.直振与切料口的对中 问题:对中不良,导致送料不到位,对光传感器检测不到产品,报警直振缺料。解决方法: 先检查气缸自带的行程调节器有无松动,如果没有松动,通过微调振动盘机构的位置及底脚高度,实现切料口上下左右的对中。2.机器人夹爪气缸磁开线路 1.M8接头长期晃动,…

Android Studio 2022下载与安装

1、安装包 扫描下方二维码关注「软知社」,后台回复【066】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程解压下载安装包,双击Setup.exe安装,弹窗安装对话框点击下一步默认,点击下一步选择安装目录,建议选择C盘之外,点击下一步点击安装安装完成,点击下一…

Adobe Photoshop 2025下载与安装

‌Photoshop 2025的安装环境要求主要包括操作系统、处理器、内存、显卡、显示器分辨率和硬盘空间等方面的具体要求。‌ 操作系统要求‌Windows‌:支持Windows 10(版本21H2)或更高版本,不支持Windows的长期服务版(LTSC)。处理器要求‌Windows‌:支持64位的多核Intel或AMD…

Capture one 2023下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【061】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件和系统防护)解压下载安装包,双击软件安装,弹窗安装对话框选择中文,点击确定选择‘我同意。’ 点击下一步选择安装目录,建议C盘之外…

S3FT选择性自监督微调:通过智能选择训练样本提升大模型整体表现

选择性自我监督微调(Selective Self-to-Supervised Fine-Tuning,S3FT)是一种创新的大语言模型微调方法,该方法通过部署专门的语义等价性判断器来识别训练集中模型自身生成的正确响应。在微调过程中,S3FT策略性地结合这些正确响应与剩余样本的标准答案(或其释义版本)来优…

20242935 2024-2025-2 《网络攻防实践》第二周作业

20242935 2024-2025-2 《网络攻防实践》第二周作业 网络信息收集技术 一、实验要求 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理…

Xmanager 8下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【059】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件与本地防护设置)双击Xmanager-8.0.0055r.exe安装,弹窗安装对话框点击下一步选择‘我接受。。’,点击下一步选择安装目录D盘,点击下一…

Xftp 8软件下载与安装教程

Xftp 8中文版是一款十分强大、传输快速的FTP文件传输工具,它拥有着十分庞大的用户群体,其凭借着简单的界面、便捷的操作以及强大的功能,深受广大用户的好评与喜爱,当然它也是许许多多专业人士的必备工具之一。 由于Xftp 8是基于MS windows平台的STP和FTP传输工具,所以它不…

HarmonyOS SDK让小红书鸿蒙用户尽享原生相机的拍摄之美

小红书是深受年轻人喜爱的生活社交类社区平台,越来越多的人在小红书上分享旅行、日常、心情。近日,不少使用鸿蒙原生版小红书的细心用户已经发现,直接使用小红书拍摄照片与自己使用原相机拍摄有一样清晰美观的呈现效果。不仅如此,小红书现已支持用户直接从图库中上传动态照…

Xshell 8软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【057】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件与本地防护设置)双击Xshell-8.0.0055r.exe安装,弹窗安装对话框点击下一步选择‘我接受。。’,点击下一步选择安装目录D盘,点击下一步…