Python代码实现轻松编写一个QQ AI机器人

 更新时间:2026年03月10日 08:52:52   作者:ofox  
这篇文章主要介绍了如何结合QQ 官方 Python SDK + 任意大模型 API,用30 行代码搞定一个能在 QQ 群里聊天的 AI 机器人,不用装任何桌面客户端,一个 Python 脚本跑在服务器上就行,感兴趣的小伙伴可以了解下

最近刷热榜全是 OpenClaw 接 QQ Bot 的教程,看起来很香:扫码创建机器人、一键接入 AI、5 分钟搞定。

但我下载完 OpenClaw 一看——800MB 的客户端,Electron 套壳,内存 1.2G 起步。我就想让机器人在群里回答问题而已,有必要装这么重的东西?

于是我试了另一条路:QQ 官方 Python SDK + 任意大模型 API,30 行代码搞定一个能在 QQ 群里聊天的 AI 机器人。不用装任何桌面客户端,一个 Python 脚本跑在服务器上就行。

先说结论

方案部署方式资源占用灵活性上手难度
OpenClaw + QQ桌面客户端内存 1.2G+开箱即用但定制难
botpy + AI APIPython 脚本内存 50MB想接什么模型接什么⭐⭐
go-cqhttp(非官方)Docker/二进制内存 30MB功能最全但有封号风险⭐⭐⭐

我最终选了 botpy(QQ 官方 SDK),原因很简单:官方支持 = 不怕封号

准备工作:3 分钟注册 QQ 机器人

腾讯上周刚开放了个人开发者注册(终于!),流程很快:

  • 打开 QQ 开放平台,手机 QQ 扫码登录
  • 点「创建机器人」,填个名字和简介
  • 拿到 appidtoken

一个 QQ 号最多创建 5 个机器人。注意:目前个人开发者只能在群聊里用,私聊功能还没开放。

核心代码:30 行搞定

先装依赖:

pip install qq-botpy openai

然后就是完整代码了:

# qq_ai_bot.py
import botpy
from botpy.message import GroupMessage
from openai import OpenAI

# AI 客户端 - 兼容 OpenAI 协议的都能用
ai = OpenAI(
    api_key="your-api-key",
    base_url="https://api.ofox.ai/v1"  # 我用的聚合接口,Claude/GPT/Gemini 随便切
)

class MyBot(botpy.Client):
    async def on_group_at_message_create(self, message: GroupMessage):
        """群里被 @ 时触发"""
        user_msg = message.content.strip()
        if not user_msg:
            return

        # 调大模型
        resp = ai.chat.completions.create(
            model="claude-sonnet-4-20250514",  # 换成任意模型
            messages=[
                {"role": "system", "content": "你是一个 QQ 群里的 AI 助手,回复简洁有趣。"},
                {"role": "user", "content": user_msg}
            ],
            max_tokens=500
        )
        answer = resp.choices[0].message.content

        # 回复消息
        await message.reply(content=answer)

intents = botpy.Intents(public_messages=True)
client = MyBot(intents=intents)
client.run(appid="your-appid", secret="your-secret")

没错,就这么多。on_group_at_message_create 是群里 @机器人 时的回调,拿到用户消息 → 丢给大模型 → 回复。

进阶:加上多轮对话记忆

光能一问一答太无聊了,加个简单的上下文记忆:

from collections import defaultdict, deque

# 每个群维护最近 10 轮对话
chat_history = defaultdict(lambda: deque(maxlen=20))

class MyBot(botpy.Client):
    async def on_group_at_message_create(self, message: GroupMessage):
        user_msg = message.content.strip()
        if not user_msg:
            return

        group_id = message.group_openid
        history = chat_history[group_id]
        history.append({"role": "user", "content": user_msg})

        messages = [
            {"role": "system", "content": "你是 QQ 群里的 AI 助手,回复简洁有趣,不超过 200 字。"}
        ] + list(history)

        resp = ai.chat.completions.create(
            model="claude-sonnet-4-20250514",
            messages=messages,
            max_tokens=500
        )
        answer = resp.choices[0].message.content
        history.append({"role": "assistant", "content": answer})

        await message.reply(content=answer)

deque(maxlen=20) 自动滚动,内存占用几乎为零。如果你想更持久,换成 Redis 或 SQLite 都行,但对于群聊机器人来说,记住最近几轮就够了。

踩坑记录

坑 1:botpy 版本混乱

pip install botpy 装的不是官方版本!QQ 官方的包名是 qq-botpy

# ❌ 错误
pip install botpy

# ✅ 正确
pip install qq-botpy

装错了会报一堆莫名其妙的 import 错误,我在这上面浪费了半小时。

坑 2:群聊需要额外申请

个人开发者创建完机器人后,默认只有频道权限。想在QQ 群里用,需要在开放平台后台额外勾选「群聊」场景,然后等审核(大概 1-2 小时)。

很多教程没提这一步,导致代码写好了机器人死活不响应。

坑 3:消息里的 @前缀 要处理

用户在群里 @机器人 发消息时,message.content 前面会带一个 @机器人名字 的前缀(注意有个空格)。如果不处理,这段文字会一起发给大模型,导致回复很奇怪。

# 清理 @ 前缀
user_msg = message.content.strip()
if user_msg.startswith(f"@{bot_name}"):
    user_msg = user_msg[len(f"@{bot_name}"):].strip()

坑 4:回复有频率限制

QQ 机器人有频率限制:被动回复每分钟最多 5 条(个人开发者),超过会被静默丢弃,不报错。

解决方案:对于长回复,先截断到 500 字以内;对于高频群,加个 cooldown:

import time

last_reply = {}

async def on_group_at_message_create(self, message: GroupMessage):
    group_id = message.group_openid
    now = time.time()
    if now - last_reply.get(group_id, 0) < 12:  # 12秒冷却
        return
    last_reply[group_id] = now
    # ... 正常处理

模型怎么选

QQ 群聊场景比较特殊:消息短、要求响应快、上下文碎片化。我试了几个模型的体验:

模型响应速度群聊效果适合场景
GPT-4.1-mini0.8s回复质量高但偶尔太长技术群
Claude Sonnet1.2s语气自然,长度适中通用群
Gemini Flash0.5s最快,但中文偶尔拉胯对速度要求高
Qwen-Plus0.6s中文最好,回复接地气中文闲聊群

我最后在代码里用的是 Claude Sonnet,因为群聊场景下它的回复长度和语气最合适。如果你更在意速度,Gemini Flash 是最快的。这些模型我都是通过一个聚合接口调的,改个 model 参数就切换了,不用管各家 API 的差异。

部署:丢到服务器上跑

本地测试没问题后,直接 nohup 挂后台就行:

想更稳定可以用 systemd 或 supervisor,但说实话对于个人用的小机器人,nohup 够了。

小结

全网都在装 OpenClaw 搞 QQ 机器人,但如果你只是想让机器人能聊天、能回答问题,完全没必要装一个 800MB 的桌面客户端。QQ 官方 SDK + 一个 AI API,30 行 Python 就够了。

当然 OpenClaw 的优势在于它的多 Agent 能力和可视化配置,如果你需要复杂的工作流编排,那确实比自己写代码方便。但对于「群里 @机器人问个问题」这种简单场景,轻量方案完全够用。

到此这篇关于Python代码实现轻松编写一个QQ AI机器人的文章就介绍到这了,更多相关Python QQ机器人内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django使用httpresponse返回用户头像实例代码

    Django使用httpresponse返回用户头像实例代码

    这篇文章主要介绍了Django使用httpresponse返回用户头像实例代码
    2018-01-01
  • tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)

    tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)

    这篇文章主要介绍了tensorflow 2.1.0 安装与实战(CASIA FACE v5),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python结合diskcache实现磁盘缓存工具

    Python结合diskcache实现磁盘缓存工具

    之前写了 cachetools 的缓存工具,那个是纯内存的,性能上确实有优势,但重启后缓存数据会丢失,下面小编就和大家详细介绍一下Python如何结合diskcache实现磁盘缓存工具吧
    2026-03-03
  • Python中优雅处理JSON文件的方法实例

    Python中优雅处理JSON文件的方法实例

    JSON是一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,这篇文章主要给大家介绍了关于Python中优雅处理JSON文件的相关资料,需要的朋友可以参考下
    2021-12-12
  • Anaconda虚拟环境配置Python库与Spyder编译器的方法

    Anaconda虚拟环境配置Python库与Spyder编译器的方法

    在文章创建Anaconda虚拟Python环境的方法中,我们介绍了在Anaconda环境下,创建、使用与删除Python虚拟环境的方法,而创建虚拟环境后,就需要在对应的环境内配置各类库与软件,本文就对这些操作加以介绍,感兴趣的朋友感兴趣的朋友一起看看吧
    2024-04-04
  • Python执行系统命令的五种方式小结

    Python执行系统命令的五种方式小结

    在日常开发中,有时需要在Python脚本中执行系统命令,Python有五种方式来执行系统命令(推荐使用第五种),本文为大家整理了这五种方法的具体使用,希望对大家有所帮助
    2024-01-01
  • 健身房被搭讪?用python写了个小米计时器助人为乐

    健身房被搭讪?用python写了个小米计时器助人为乐

    今天教大家Python图形界面开发的相关知识,文章围绕着如何实现一个小米手机上的秒表计时器功能展开,文中有非常详细的代码示例,需要的朋友可以参考下
    2021-06-06
  • Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

    Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

    mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作,这篇文章主要介绍了Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解,需要的朋友可以参考下
    2022-10-10
  • Python Dask库处理大规模数据集的强大功能实战

    Python Dask库处理大规模数据集的强大功能实战

    Dask是一个灵活、开源的Python库,专为处理大规模数据集而设计,与传统的单机计算相比,Dask能够在分布式系统上运行,有效利用集群的计算资源,本文将深入介绍Dask的核心概念、功能和实际应用,通过丰富的示例代码展示其在大数据处理领域的强大能力
    2023-12-12
  • Django更新models数据库结构步骤

    Django更新models数据库结构步骤

    这篇文章主要介绍了Django更新models数据库结构的操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论