用 DeepSeek 做一个会聊天的 QQ 桌宠-合规接入与架构实战
摘要:最近圈子里很火的一个说法是"接 DeepSeek 的大肥鱼桌宠"——一个能在 QQ 陪你聊天、还能自己跑 B 站、甚至打王者的 AI 数字人。本文把能合规落地的那一半写透:用 OneBot 标准把自己的 QQ 接成 DeepSeek 驱动的聊天桌宠,从架构到可运行代码一步步来;同时把"批量注册 B 站账号、自动刷评论、自动打游戏"这类红线讲清楚为什么不能做。只做合规的,不做灰产的。
"大肥鱼"这个名字最近在 QQ 群里刷屏——据说是接了 DeepSeek 的桌宠,能在 QQ 跟你聊天,还能自己注册 B 站账号刷评论、甚至自动打王者。听着很酷,但这里要先划一条线:
能做的:把自己/已授权的小号 QQ 接成 AI 聊天桌宠,用 DeepSeek 驱动对话——这是个人 AI 助手的主流玩法,完全合规,本文写透。
不能做的:批量注册平台账号、机器人刷评论/刷量、自动化操作游戏(外挂)——这些违反平台服务条款,也违背助手的使用边界,本文不提供实现,只讲边界。
下面先把合规的核心——QQ 聊天桌宠——从零搭起来。
一、整体架构
┌─────────────┐ OneBot 11 ┌──────────────┐ HTTP/SSE ┌─────────────┐
│ QQ 客户端 │ ◄─── WebSocket ──► │ 协议端 │ ◄────────────► │ 你的机器人 │
│ (你的小号) │ │ (go-cqhttp / │ │ Python │
└─────────────┘ │ Lagrange) │ │ + DeepSeek │
└──────────────┘ └─────────────┘
- 协议端:实现 OneBot 11 标准的程序,负责登录 QQ、收发消息。主流选
go-cqhttp(Go 实现)或Lagrange.Core(.NET,对新协议更友好)。
- 你的机器人:一个 Python 进程,监听 OneBot 正向 WebSocket,收到私聊/群消息就调 DeepSeek API 拿到回复,再发回去。
- 桌宠 UI:可选,用 Electron / PyQt / 网页套壳,把"会聊天的 AI"做成一个桌面小宠物形象。
注意:QQ 机器人协议属于非官方接口。腾讯允许个人在自己账号、不骚扰他人、不商业化滥用的前提下做实验,但批量养号、群发营销、冒充真人是明确违规的。用你自己的小号自己玩,别拿去骚扰别人。
二、步骤 1:部署 OneBot 协议端(以 go-cqhttp 为例)
- 去 go-cqhttp 发布页下载对应系统二进制(Windows / Linux x64 / macOS)。
- 首次运行生成
config.yml,关键配置:
account:
uin: 你的QQ号 # 建议用专门的小号,别用主号
password: "" # 留空则扫码登录
default-middlewares:
access-token: "你的token" # 自己设一个,机器人连接时要带
servers:
- ws:
address: 0.0.0.0:6700
access-token: "你的token"
- 启动,扫码登录(首次需手机 QQ 扫码)。登录成功后协议端会在
ws://127.0.0.1:6700提供 OneBot WebSocket。
风控提示:登录设备异常、频繁收发、群发消息都会触发 QQ 安全验证甚至封号。桌宠只跟你自己的私聊或小范围群聊互动,频率别太高。
三、步骤 2:写机器人,接 DeepSeek
DeepSeek 提供 OpenAI 兼容接口,直接 pip install openai 就能调。
# bot.py — OneBot 接收 + DeepSeek 回复(最小可运行版)
import asyncio, json, httpx
from nonebot.adapters.onebot.v11 import Adapter as ONEBOT
# 不想引 nonebot 的话,直接用 websockets 连 OneBot 也行,下面给裸写版
import websockets, openai
# 1) DeepSeek 客户端(OpenAI 兼容)
ds = openai.OpenAI(
api_key="sk-你的DeepSeekKey", # 从 platform.deepseek.com 申请
base_url="https://api.deepseek.com/v1",
)
# 2) 连 OneBot 正向 WS
WS = "ws://127.0.0.1:6700"
TOKEN = "你的token"
async def handle():
async with websockets.connect(WS, extra_headers={"Authorization": f"Bearer {TOKEN}"}) as ws:
# 先发心跳/鉴权(按 OneBot 11 约定,有的端不需要)
async for raw in ws:
data = json.loads(raw)
if data.get("post_type") == "message":
msg = data["message"] # 用户发来的文本
uid = data["user_id"]
# 调 DeepSeek
resp = ds.chat.completions.create(
model="deepseek-chat",
messages=[{"role":"user","content": msg}],
max_tokens=800,
)
reply = resp.choices[0].message.content
# 发回去(OneBot send_msg)
await ws.send(json.dumps({
"action":"send_msg",
"params":{"user_id": uid, "message": reply}
}))
asyncio.run(handle())
要点:
- 模型:
deepseek-chat(V3)适合日常聊天;deepseek-reasoner(R1)适合推理,但慢且贵,桌宠聊天用 chat 足够。
- 上下文:上面是单轮。要做"记得你"的桌宠,把最近 N 条消息存个列表当
messages历史即可(注意 token 成本)。
- 频率限制:DeepSeek API 有 RPM/TPM 限制,别让桌宠每秒狂问。
四、步骤 3:做成"桌宠"样子
聊天逻辑跑通后,UI 层随便挑:
- PyQt / Tkinter:画个宠物图标,消息气泡浮在旁边。
- Electron + 网页:前端显示宠物动画,后端复用上面的
bot.py(通过本地 WebSocket 或 HTTP 桥)。
- 纯终端:不嫌丑的话,直接在终端里跟它聊也行。
桌宠的"人设"通过系统提示词设定,例如:
你是陪伴我的桌面宠物"小鱼",性格呆萌话不多,偶尔吐槽。
只在被 @ 或私聊时说话,不主动刷屏。
五、那些"不能做"的红线,为什么
原文里"大肥鱼"还吹了三件事,这里明确讲边界:
- 自己创建 B 站账号并批量评论:B 站(及几乎所有平台)服务条款禁止自动化注册账号、禁止机器人刷评论/刷量。批量养号、自动评论属于 spam 行为,轻则限流封号,重则涉及虚假流量。合规替代:用 B 站官方开放平台(若你有创作者资质)管理你自己的账号内容,而不是去别人视频下自动刷。
- 自动玩王者荣耀:游戏自动化/外挂违反游戏 ToS,通过图像识别点击或协议层操作都会被检测封号,且破坏公平。合规替代:做"AI 陪练/攻略助手"——用 LLM 回答出装、铭文、打法,而不是去自动操作游戏客户端。
- 把 AI 伪装成真人去社交平台活动:身份冒用、打扰真实用户,既违规也不道德。
一句话:让 AI 做"你自己账号的助手"是合规的;让 AI "冒充真人去批量占领平台"是违规的。 这条线别跨。
六、小结
QQ 聊天桌宠这部分,今天就能跑起来:go-cqhttp/Lagrange 做协议端 + 十几行 Python 接 DeepSeek + 一个 UI 壳。它确实能成为"会聊天的数字伙伴",而且完全在你自己的账号、自己的设备里。
至于"大肥鱼"吹的 B 站养号、自动打王者——不是技术做不到,是不该做。把精力放在合规且真正有用的地方:一个记得你、陪你聊、帮你查资料的桌宠,比一堆封掉的僵尸号值钱得多。
本文 QQ 接入部分基于 OneBot 11 公开标准与 DeepSeek OpenAI 兼容 API 撰写;平台合规边界以各平台现行服务条款为准。代码示例为最小可运行骨架,生产环境请补上错误处理、限流与持久化上下文。
扫码关注公众号,获取更多 OpenClaw 实操技巧:
