首页 / 资讯中心 / 文章详情

5分钟搭建QQ智能体:Lighthouse+DeepSeek+QQ机器人实战

5分钟搭建QQ智能体:Lighthouse+DeepSeek+QQ机器人实战 ★ FEATURED ARTICLE
先想一个问题你是真的需要 AI还是需要一个永远在线的贴身助理网页版 AI 用起来其实挺累的。解锁手机、找标签页、重新登录、复制粘贴、上下文丢失……和 AI 对话本来应该像发微信一样简单。但现实是网页版 AI 把你拉回 PC 前你只有端坐在电脑前才想起用它。所以我一直想做一个东西把 AI 扔进 QQ让我在哪儿都能随时喊一声它就能回我。本文要讲的就是基于腾讯云 Lighthouse DeepSeek API QQ 机器人协议从零搭建一个 7x24 小时的私人智能体。整个过程不算复杂按路径走的话大概 5 分钟就能让 QQ 里的 AI 开始说话。我不会写什么花里胡哨的前端界面也不会上重型的 Agent 框架——就用最直接的组合一台永远开机的轻量服务器当躯壳DeepSeek 当大脑QQ 当你的入口。适合想折腾 AI 应用又不想上来就啃 LangChain 的人也适合想给团队做内部 AI 助手却不想开发 App 的产品、运营朋友。1. 先拆解这套组合Lighthouse、DeepSeek 和 QQ 各管哪一段1.1 为什么非得要一台云服务器本地电脑做不到的事很多人第一反应是我在自己电脑上跑个脚本不行吗当然行但你要接受三个现实电脑会关机、休眠、断网AI 会失联家宽普遍没有固定公网 IPQQ 侧回调根本找不到你万一你在打游戏、开大型软件后台挂着一个 AI 服务体验极差。所以需要一台放在机房里、7x24 小时不关机的“小电脑”。这里我选的是腾讯云轻量应用服务器 Lighthouse。这玩意儿定位就是给小项目用的有公网 IP有系统盘自带防火墙控制台不需要你会复杂的网络配置普通用户十分钟内能上手。有人会问那用云函数Serverless行不行技术上完全可行但云函数适合“事件驱动、短时运行”的场景QQ 机器人需要维持 WebSocket 长连接云函数的运行机制反而别扭。一台轻量服务器是更省心、更通用的底座。1.2 DeepSeek 负责“说话”但有两种接法DeepSeek 是目前性价比极高的大模型文章标题里直接点名它。它的接入方式有两种官方 API按 token 计费不需要显卡响应速度极快代码里设置一个base_url就能调用。这是绝大多数人和中小团队的默认选择。本地部署要有一块像样的显卡还要解决显存、模型量化、并发等一系列问题。除非你做私密数据本地推理否则我劝你别在入门阶段碰它。下面的表格是我的建议对比对比项官方 API本地部署硬件要求无一台 2 核小服务器即可至少 24G 显存强烈建议 48G成本按量付费个人使用一个月几块钱到几十块电费 硬件折旧一次性投入大部署难度几行代码模型下载、量化、推理框架调优响应速度高并发基本秒回取决于显卡小模型勉强能看适合场景个人助理、客服、知识库问答数据合规要求极高的场景我在这个项目里选的当然是官方 API。后面所有步骤都是围绕“API 调用”来设计的。1.3 QQ 的意义把 AI 装进每天都打开的应用QQ 的角色不复杂它就是消息的入口和出口。智能体本身不需要有自己的界面它只需要做一件事收到你的消息转给 DeepSeek拿到回复再发回 QQ。为什么要用 QQ 而不是 Telegram 或 Discord核心原因是你的朋友、同事、家人就在 QQ 上它本来就是你的高频沟通工具。把一个 AI 放进 QQ等于把助理塞进口袋想找它的时候打开对话框发条消息就行不需要任何额外操作。2. 服务器准备Lighthouse 选型、购买与初始化2.1 套餐怎么选2 核 2G 真的够用吗如果你只是跑一个 QQ 消息转发服务核心负载几乎可以忽略不计。整个服务的瓶颈在网络和 API 响应时间上不在 CPU 和内存。所以最低配的 2 核 2G 完全够用系统选 Ubuntu 22.04 LTS。地域选离你近的比如你在广东就选广州在西边就选成都延迟会低一点。系统盘默认一般 40G 或更多对于纯代码和日志来说绰绰有余。带宽是最容易被忽略的个人机器人业务几乎不消耗带宽官方给的 3M-4M 足够。这里有一个常见误区有人为了跑本地模型去买高配服务器结果发现 Lighthouse 最高配置也没有独立显卡本地大模型跑不动。记住如果你按我这篇文章用 DeepSeek API2 核 2G 就是最优解省下来的钱投到 API 里能用很久。2.2 防火墙与安全组不要暴露多余端口腾讯云轻量服务器的控制台里有一个“防火墙”设置。很多人图省事全放行这是安全隐患。实际上QQ 机器人进程是主动外连到本地或云端的 WebSocket 服务不需要公网入站端口。你需要放行的只有 SSH 默认的 22 端口。如果后面你需要在本地调试可以临时放行 3001 等端口给 WebSocket但调试完记得关掉。2.3 连接服务器网页终端足够SSH 更方便两种方式腾讯云控制台自带的网页终端零配置适合第一次接触 Linux 的人本地 SSHssh ubuntu你的服务器IP在 Windows 上推荐用 Windows Terminal 或者 MobaXterm。连接成功后先做两件事更新软件源安装 Python 和 pipsudo apt update sudo apt upgrade -y sudo apt install -y python3 python3-pip python3-venv注意Ubuntu 22.04 自带的 Python 是 3.10完全够用。不要手动乱装其他版本免得搞乱系统默认环境。3. 申请 DeepSeek API Key先让模型能“开口”3.1 注册开放平台与创建 Key登录 DeepSeek 开放平台手机号注册后在“API Keys”页面创建一个新 Key。创建后只会显示一次务必复制保存下来格式大致是sk-开头的一长串字符。然后去“账户”里充一点点钱个人使用的话十块钱就能用很久按 token 扣费用不完还能放着。这里提醒一句API Key 相当于密码别贴到公开仓库、别发到群里。如果泄露了在控制台里一键删除重建30 秒的事。3.2 30 秒连通性测试DeepSeek 兼容 OpenAI 的接口格式所以直接用openai这个官方 Python SDK 就能调。先安装pip3 install openai创建test_deepseek.pyfrom openai import OpenAI client OpenAI( api_key你的API Key, base_url ) resp client.chat.completions.create( modeldeepseek-chat, messages[ {role: user, content: 你好回复一句话} ] ) print(resp.choices[0].message.content)运行python3 test_deepseek.py如果能正常输出一句中文问候说明 API 通了。这里有两个坑提前说一定不能漏掉base_url默认它会去 OpenAI 官方服务器然后报 404 或 401模型名是deepseek-chat通用对话和deepseek-reasoner深度推理。日常聊天用前者响应更快、价格更低。4. QQ 接入的三种方式官方机器人、OneBot 协议端怎么选4.1 官方 QQ 机器人最稳但需要审核腾讯官方有 QQ 开放平台个人开发者可以创建机器人。接入后通过官方 WebSocket 或 Webhook 接收消息用官方 SDK 发消息全程合规、稳定不怕封号。但它有几个现实问题机器人发消息有频率限制、部分能力需要审核通过才开放、面向的具体场景偏向频道和群聊对“私人一对一聊天”支持不算灵活。如果你是正经创业团队做客服机器人这是首选。4.2 OneBot 协议端社区方案灵活但自带风险OneBot 是一种统一消息协议标准它把 QQ 消息抽象成标准事件。协议端负责登录 QQ 并转换成 OneBot 事件业务端你的 Python 脚本只需要对接 WebSocket 或 HTTP 事件即可。目前社区常用的协议端有NapCatQQ基于新版 QQNT 的协议实现用 Docker 部署非常方便支持 WebSocket 服务端/客户端两种模式是目前比较活跃的一个项目Lagrange纯 .NET 实现不需要真的装 QQ 客户端API 兼容性好go-cqhttp老牌项目但已经停止维护新人不建议再用了。用这类方案你可以拿一个小号 QQ 扫码登录让机器人以真实 QQ 号的身份收发私聊消息。代价是它不符合 QQ 官方用户协议存在封号风险这一点必须心里有数。我的建议是自用、测试、给项目做演示完全可以但如果做面向大量用户的商业化产品请走官方机器人通道。4.3 我的推荐组合考虑到标题强调“5 分钟搞定”我推荐直接用 OneBot 协议端来做快速原型。下面我以 NapCat 为例说说实际操作。先安装 Dockercurl -fsSL | sudo sh然后拉取并启动 NapCatdocker run -d \ --name napcat \ --restartalways \ -p 3001:3001 \ -e LICENCEtrue \ -e MODEws \ -e WS_PORT3001 \ --networkhost \ mlikiowa/napcat-docker启动后看日志里的二维码用你的 QQ 小号扫码登录。登录成功后NapCat 会在ws://服务器IP:3001提供 OneBot WebSocket 服务。这一步是最容易卡住的常见问题有两个Docker 拉镜像慢国内环境建议给 Docker 配置镜像加速源扫码后一直转圈确认小号没有被风控新号或异地登录频繁的号容易被限制。5. 服务端核心代码收到 QQ 消息后如何交给 DeepSeek 再回传5.1 消息流转设计整套系统的消息流是这样的你在 QQ 里给机器人小号发消息NapCat 收到消息打包成 OneBot 事件通过 WebSocket 推给 Python 脚本Python 脚本校验发送人是否为管理员避免陌生人使唤你的机器人把消息文本追加到上下文调用 DeepSeek API拿到回复后调用 NapCat 的send_private_msg接口把回复发回你的 QQ。5.2 目录与依赖我习惯在一个目录里集中管理比如/home/ubuntu/qq-bot/。需要两个 Python 依赖openai和websockets。pip3 install openai websockets5.3 一个能直接跑的最小实现下面是我实际在用的极简版本去掉了复杂装饰器和框架逻辑直白适合快速上手import json import asyncio from openai import OpenAI import websockets ADMIN_QQ 你的QQ号 API_KEY 你的DeepSeek API Key client OpenAI( api_keyAPI_KEY, base_url ) conversations {} SYSTEM_PROMPT 你是一个靠谱的私人助理。回答要简洁、准确不要长篇大论。 async def handle_event(ws, data): # 忽略心跳等元事件 if data.get(post_type) ! message: return # 只响应私聊并且只响应管理员本人 if data.get(message_type) ! private: return uid str(data.get(user_id)) if uid ! ADMIN_QQ: return text data.get(raw_message, ).strip() if not text: return reply await call_deepseek(uid, text) # 回发消息 await ws.send(json.dumps({ action: send_private_msg, params: { user_id: int(uid), message: reply } }, ensure_asciiFalse)) async def call_deepseek(uid, text): history conversations.get(uid, []) # 只保留最近 10 条防止上下文无限膨胀 messages [{role: system, content: SYSTEM_PROMPT}] history[-10:] messages.append({role: user, content: text}) try: resp client.chat.completions.create( modeldeepseek-chat, messagesmessages, timeout60 ) reply resp.choices[0].message.content.strip() history.append({role: user, content: text}) history.append({role: assistant, content: reply}) conversations[uid] history[-20:] return reply except Exception as e: return f我这边出错了{e} async def main(): # 这里的地址以你 NapCat 实际监听的地址为准 ws_url ws://:3001 print(f连接 OneBot WebSocket: {ws_url}) async for websocket in websockets.connect(ws_url): print(已连接等待消息...) try: async for raw in websocket: data json.loads(raw) asyncio.create_task(handle_event(websocket, data)) except websockets.ConnectionClosed: print(连接断开重连中...) await asyncio.sleep(3) continue if __name__ __main__: asyncio.run(main())这段代码有几个设计细节值得说明管理员白名单不是每个 QQ 号都能使唤你的智能体避免机器人被别人当公共接口用。上下文记忆用内存里的字典保存每个用户最近的对话历史让 AI 能接上话而不是每句都当成新对话。缺点是服务器重启会丢记忆。如果你需要长期记忆后续可以接入一个 SQLite 或 Redis。自动重连ConnectionClosed时等待 3 秒重新连接这是长期运行必须考虑的。跑起来试一下python3 bot.py看到“已连接等待消息...”后用你的 QQ 给机器人小号发一句“你好”它应该会在一两秒内回复你。到这里最核心的链路已经通了。6. 进程守护与开机自启别用 nohup用 systemd6.1 nohup 为什么不推荐很多人习惯用nohup python3 bot.py 把进程丢到后台。这个方案看起来简单但问题很多不支持自动重启进程崩了就崩了、没有日志轮转、不方便查看状态。对于要 7x24 小时跑的服务来说这是给自己埋雷。6.2 写一个 systemd 服务文件systemd 是 Linux 自带的进程管理工具用它来管理我们的机器人进程最合适。创建服务文件sudo nano /etc/systemd/system/qq-bot.service填入以下内容[Unit] DescriptionQQ DeepSeek Bot Afternetwork-online.target [Service] WorkingDirectory/home/ubuntu/qq-bot ExecStart/usr/bin/python3 /home/ubuntu/qq-bot/bot.py Restartalways RestartSec5 EnvironmentPYTHONUNBUFFERED1 [Install] WantedBymulti-user.target关键点说明Restartalways进程崩了自动拉起这是 24 小时在线的基础RestartSec5崩溃后 5 秒再重启避免疯狂重启打爆日志PYTHONUNBUFFERED1让 Python 的 print 输出实时写进日志否则你在 journal 里看不到任何输出。然后让 systemd 生效并启动sudo systemctl daemon-reload sudo systemctl enable qq-bot sudo systemctl start qq-bot查看运行状态和日志sudo systemctl status qq-bot sudo journalctl -u qq-bot -f看到已连接等待消息...日志说明服务已经托管给 systemd。以后哪怕服务器重启机器人也会自动起来你什么都不用管。6.3 验证一整天一个合格的 24 小时服务至少得跑满一整天再下结论。我实测中遇到的情况是WebSocket 连接会因为网络波动偶发断开但 systemd 的Restartalways配合代码里的自动重连能保证最终状态是“断开-重连-恢复”对用户体验几乎无感。建议你部署后第二天看一眼journalctl确认没有反复重启的异常。7. 实测表现、踩坑清单与进阶方向7.1 我实测的延迟和稳定性数据以下是我在 2 核 2G Lighthouse DeepSeek 官方 API NapCat 组合下的实测数据供你参考维度数据消息发出到收到回复短问题1.5 - 4 秒长文本生成300 字以上8 - 20 秒连续运行 72 小时崩没崩没崩但 WebSocket 断过 3 次服务器 CPU 占用日常不超过 10%内存占用Python 进程约 80MB 左右一天的成本API 费用几毛钱看使用量服务器约数元一天如果你发现回复普遍超过 10 秒先排查 DeepSeek API 是否限流再排查服务器地域和你的网络链路。多数时候问题不在服务器上。7.2 一定要说的避坑清单DeepSeek API 拿不到回复最常见的不是网络问题而是base_url写错。它必须精确到https://api.deepseek.com不需要再加/v1之类的后缀。加了反而可能 404。QQ 小号被风控新注册的 QQ 号直接扫码登录机器人很容易被限制登录。建议先养几天号每天正常聊几句再用来做机器人。多轮对话越聊越贵如果不限制上下文长度历史消息会无限增长API 费用随之上涨。我在代码里做了最近 10 条截断这是个人使用场景下的折中。如果你要做知识库问答建议改用向量检索来精确找相关内容而不是全量堆历史。服务器被入侵的风险我见过不少人把 API Key 硬编码在脚本里后又把整个项目传到 GitHub 上。这是很危险的。建议把 Key 放到环境变量或者.env文件里并在.gitignore里排除掉。端口全部暴露只放行 22 端口。如果你的协议端 WebSocket 需要外部访问用完立刻关掉或者给端口设置连接鉴权。7.3 进阶从“聊天机器人”到“智能体”基础版跑通后你可以往真正的“智能体”方向扩展接 Dify 或 Coze如果不想继续写 Python把 DeepSeek API 接到 Dify 这类平台上用拖拽的方式编排提示词、知识库、工作流再把 Dify 的 API 接到 QQ 机器人上。适合非程序员。工具调用Function CallingDeepSeek 支持 function call。你可以让机器人查天气、查日历、执行你服务器上的脚本。这就是 Agent 的雏形。记忆持久化把对话历史从内存迁到 SQLite 或 Redis重启不丢记忆机器人才能更“懂你”。更精细的权限控制比如哥哥能用、妹妹不能用或者只允许在特定群聊里响应。我自己跑这套东西的大半年时间里最大的体会是所谓智能体本质上就是“一个可靠的消息入口 一个聪明的模型 几行把两者缝起来的胶水代码”。真正值钱的不是堆了多少框架而是你有没有把它接入到自己的生活流里。如果你的 QQ 里还没有一个 24 小时随叫随到的智能体现在就可以动手了。服务器买便宜套餐API Key 申请五秒钟核心脚本复制粘贴剩下的系统让它自己跑去。等你在被窝里发一句“帮我写个周报提纲”然后秒收到回复时你就会明白这 5 分钟花得有多值。
阅读完成 · 觉得有帮助?
咨询建站