ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于Napcat与NoneBot2实现腾讯云ADP智能体接入QQ群的技术实践

基于Napcat与NoneBot2实现腾讯云ADP智能体接入QQ群的技术实践 1. 项目缘起当企业级智能体遇上社群运营最近在折腾一个挺有意思的事儿把腾讯云ADPApplication Development Platform上开发的智能体给接到QQ群里去。这事儿听起来像是把两个不同次元的东西硬凑一块儿一个代表着企业级的、云端原生的应用开发平台另一个则是国内最老牌、用户基数庞大的即时通讯社群。但恰恰是这种“跨界”在实际的业务场景里能碰撞出不少火花。想想看你花了不少精力在腾讯云ADP上基于大模型能力开发了一个能回答产品问题、处理简单工单、甚至能根据用户描述生成代码片段的智能体。它功能强大逻辑清晰但它的交互入口可能仅限于一个独立的H5页面、小程序或者集成在你自己的App里。对于很多需要高频、即时互动且用户天然聚集在QQ群的场景——比如技术社区的用户支持、在线教育的学习答疑、游戏公会的管理、甚至是企业内部的项目协作群——让用户专门跳转出去使用这个智能体体验上是割裂的使用门槛也无形中提高了。我们的目标就是打破这层壁垒。让这个部署在腾讯云ADP上的智能体能够像一个真实的、24小时在线的“群友”一样在QQ群里直接响应用户的提问或者根据预设的关键词触发回复。用户不需要离开熟悉的QQ聊天环境就能获得智能体的服务体验无缝衔接。这背后涉及的核心技术栈主要就是如何架起腾讯云ADP的API与QQ客户端协议之间的桥梁。从网络热词来看Napcat和NoneBot2是社区里讨论热度非常高的两个关键工具它们构成了实现这一目标的“基础设施”。简单来说这个项目的价值在于场景融合与效率提升。它不是为了技术而技术而是为了解决“智能体能力如何更自然、更低成本地触达最终用户”这个实际问题。对于开发者而言这意味着你精心训练的智能体模型和构建的业务逻辑能获得更直接、更广泛的应用出口对于群管理员或运营者而言则相当于获得了一个不知疲倦、知识渊博的自动化助手能极大缓解重复性答疑的压力。2. 核心架构拆解消息流如何跑通要把ADP智能体接进QQ群整个系统的消息流转链路是核心。我们不能简单地把QQ当成一个“客户端”因为腾讯并未官方开放针对个人QQ号的、用于开发机器人的稳定API早期的QQ机器人官方接口已基本不可用。因此整个架构需要采用一种“曲线救国”的方式。整个流程可以抽象为以下几个核心环节我画了一个简单的逻辑图来帮助理解用户 机器人 提问 ↓ QQ客户端 (你的机器人账号) ↓ Napcat (协议客户端模拟登录、接收/发送消息) ↓ NoneBot2 框架 (消息路由、事件处理、插件管理) ↓ 自定义插件 (调用腾讯云ADP智能体API) ↓ 腾讯云ADP (执行智能体逻辑生成回复) ↓ 自定义插件 (接收API回复) ↓ NoneBot2 框架 ↓ Napcat ↓ QQ客户端 (将回复发送至群内)2.1 各组件角色与选型理由Napcat协议层“桥梁”是什么Napcat是一个基于QQ官方NT协议实现的Node.js SDK。它的核心作用是模拟一个真实的QQ客户端进行登录、接收消息、发送消息等操作。你可以把它理解为一个“无头”的QQ没有图形界面但具备完整的通讯能力。为什么选它在QQ机器人生态中协议客户端是基石。相比其他基于旧协议如手表协议、安卓Pad协议的方案NT协议相对较新、更稳定且由官方维护被封控的风险理论上更低。Napcat封装了NT协议的复杂细节提供了清晰的JavaScript/TypeScript API让开发者能更专注于业务逻辑而不是协议破解。NoneBot2机器人应用框架是什么NoneBot2是一个基于Python的、异步优先的跨平台机器人框架。它不关心底层是哪个协议QQ、微信、Telegram等它提供了一套统一的事件驱动模型。开发者只需要定义“当收到某种消息事件时应该触发哪个函数插件来处理”。为什么选它它是生态的连接器。Napcat负责“通信”而NoneBot2负责“调度”和“业务组织”。它强大的插件系统允许你将不同功能如复读、管理、以及我们这里的ADP智能体调用模块化。它的“适配器”Adapter机制让Napcat可以通过nonebot-adapter-qq这类组件将QQ消息事件转换成NoneBot2能理解的标准事件完美衔接。腾讯云ADP智能体“大脑”是什么腾讯云应用开发平台ADP提供了低代码和全代码方式让你可以快速集成腾讯云的大模型能力如混元大模型构建具备复杂推理和交互能力的AI智能体。你可以在ADP上通过可视化编排或代码开发定义智能体的知识库、工具调用Function Calling和工作流。为什么选它它提供了生产级的AI能力后端。你无需从零开始训练大模型也无需操心模型的部署和运维。ADP提供了标准的HTTP API我们的机器人插件只需要向这个API发送用户的问题就能拿到结构化的智能体回复非常方便。2.2 数据流详解当用户在QQ群里机器人并提问“我们产品的退款政策是什么”时数据是这样流动的消息捕获Napcat模拟的QQ客户端账号收到了这条消息。Napcat内部将这条QQ协议消息解析为一个结构化的数据对象。事件转换nonebot-adapter-qq适配器接收到Napcat传来的数据将其转换为NoneBot2框架的标准MessageEvent事件事件中包含了发送者ID、群号、消息内容等关键信息。规则匹配NoneBot2根据你预先在插件中设置的“规则”例如被了或者消息以“/ask”开头判断是否触发我们的“ADP智能体问答插件”。插件处理匹配成功后控制权交给我们的自定义插件。插件函数被调用它从事件对象中提取出纯净的问题文本“我们产品的退款政策是什么”。API调用插件函数构造一个HTTP请求携带问题文本、可能的会话上下文session_id以及你在ADP平台上创建的智能体的API密钥发送到腾讯云ADP智能体的API端点。智能体推理腾讯云ADP接收到请求其内部的智能体开始工作检索关联的知识库、理解用户意图、调用可能的内置工具如查询订单系统最终生成一个自然语言的回复例如“根据我们的政策在收货后7天内商品未使用可申请全额退款...”。响应回传ADP的API将包含回复内容的JSON响应返回给我们的插件。消息发送插件从JSON响应中提取出回复文本调用NoneBot2的API发送消息。NoneBot2通过适配器将发送请求传递给Napcat。协议执行Napcat将发送请求再转换为QQ NT协议的数据包通过模拟的客户端发送到QQ服务器最终这条回复就显示在了QQ群里完成了整个交互。注意整个链路中你的“机器人”本质上是一个由你的代码控制的、真实登录的QQ号。你需要准备一个专门的QQ号小号来作为机器人账号并承担该账号的一切风险如异地登录验证、可能的风控限制等。绝对不要使用自己的主号。3. 从零开始环境搭建与基础配置理论清楚了我们开始动手。这一部分会非常详细因为初始环境配置是后续一切工作的基础很多坑都埋在这里。3.1 准备机器人QQ号与基础环境首先你需要准备以下资源一个专用的QQ号强烈建议新注册一个或者使用不常用的备用号。在手机QQ上正常登录一次完成所有新手引导确保账号状态正常。一台服务器可以是腾讯云轻量应用服务器CentOS 7.9/Ubuntu 20.04、你的本地开发机Windows/Mac/Linux均可或者任何能运行Node.js和Python的Linux环境。生产环境推荐使用云服务器保证24小时在线。这里假设我们使用一台Ubuntu 22.04的云服务器。腾讯云ADP智能体假设你已经在腾讯云ADP平台上创建并配置好了一个智能体并且拿到了它的API调用地址和API密钥SecretId/SecretKey或Token。如果还没有需要先在腾讯云控制台完成创建。3.2 安装Node.js与Python环境我们的核心组件Napcat需要Node.jsNoneBot2需要Python。# 更新系统包 sudo apt update sudo apt upgrade -y # 安装Node.js 18 (LTS版本) curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs # 验证安装 node --version # 应输出 v18.x 或更高 npm --version # 安装Python 3.8 和 pip sudo apt install -y python3 python3-pip python3-venv # 验证安装 python3 --version # 应输出 3.8 pip3 --version3.3 部署Napcat协议客户端Napcat是整套系统的“腿”它负责实际的QQ登录和通讯。# 1. 创建一个项目目录 mkdir qq-adp-bot cd qq-adp-bot # 2. 初始化Napcat项目。这里我们使用其提供的脚手架它包含了基础配置。 # 你需要从Napcat的GitHub仓库获取最新的初始化方式通常如下 npm init -y npm install napcat/napcat # 或者更常见的做法是克隆其示例仓库 git clone https://github.com/napcat-project/napcat-example.git napcat-core cd napcat-core npm install安装完成后核心是配置config.js或config.yaml取决于模板。你需要配置你的机器人QQ号和密码或扫码登录方式。// 示例 config.js 关键部分 module.exports { // 账号配置 account: { uin: 1234567890, // 你的机器人QQ号 password: your-qq-password, // 密码不推荐易触发安全验证 // 推荐使用扫码登录更安全 platform: 2, // 1:安卓手机, 2:安卓平板, 3:安卓手表, 4:MacOS, 5:iPad }, // 日志等级 log_level: info, // 其他高级配置... };实操心得密码登录在目前的环境下极容易触发腾讯的安全验证要求手机扫码或短信验证。最稳定的方式是配置扫码登录。Napcat通常支持在初始化后第一次运行时生成一个二维码你用手机QQ扫描登录之后它会保存登录凭证token后续启动就无需再扫码。务必确保运行Napcat的服务其网络环境稳定且该QQ号不要在其他地方频繁登录下线否则token容易失效。3.4 创建NoneBot2项目并安装适配器NoneBot2是我们的“大脑”和调度中心。# 回到项目根目录或新建一个目录用于NoneBot2 cd /path/to/qq-adp-bot mkdir nonebot-bot cd nonebot-bot # 1. 创建Python虚拟环境强烈推荐避免包冲突 python3 -m venv venv source venv/bin/activate # Linux/Mac # 对于Windows: venv\Scripts\activate # 2. 使用pip安装nonebot2 pip install nonebot2 # 安装QQ协议适配器以onebot v11协议为例napcat通常兼容此协议 pip install nonebot-adapter-onebot # 安装HTTP客户端和配置管理依赖 pip install httpx pydantic-settings3.5 连接Napcat与NoneBot2Napcat和NoneBot2之间需要通过WebSocket或HTTP进行通信。NoneBot2作为服务端Napcat作为客户端来连接。首先配置NoneBot2。创建一个bot.py作为入口文件并创建配置文件。# bot.py import nonebot from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter # 初始化NoneBot nonebot.init() # 注册适配器 driver nonebot.get_driver() driver.register_adapter(OneBotV11Adapter) # 加载插件稍后创建 nonebot.load_plugins(src/plugins) if __name__ __main__: nonebot.run()创建配置文件.env或env.py使用pydantic-settings# .env 文件内容 HOST127.0.0.1 # NoneBot2监听的地址 PORT8080 # NoneBot2监听的端口 SUPERUSERS[1234567890] # 超级用户你的管理员QQ号 COMMAND_START[/, ] # 命令前缀空字符串表示允许无前缀触发然后需要配置Napcat让它知道把消息转发到NoneBot2的哪个地址。在Napcat的配置文件中如config.js找到反向WebSocketReverse WebSocket或HTTP上报的配置部分。// 在Napcat的config.js中增加 module.exports { // ... 其他配置 // 配置反向WebSocket连接指向NoneBot2 servers: [ { type: ws-reverse, host: 127.0.0.1, port: 8080, endpoint: /ws/onebot/v11/, // NoneBot2 OneBot V11适配器的默认端点 access_token: , // 如果NoneBot2配置了access_token这里需要填写 } ], };启动顺序先启动NoneBot2python bot.py再启动Napcat在napcat-core目录下npm start或运行对应的启动脚本。如果连接成功你会在NoneBot2的日志中看到类似[OneBot V11] WebSocket connection from ... established的信息。4. 核心开发编写ADP智能体调用插件环境搭好桥梁接通现在我们来开发最核心的部分——一个NoneBot2插件它负责监听QQ消息调用腾讯云ADP的API并把回复发回群里。4.1 创建插件目录与文件在NoneBot2项目下按照框架约定创建插件目录。mkdir -p src/plugins/adp_assistant touch src/plugins/adp_assistant/__init__.py touch src/plugins/adp_assistant/config.py touch src/plugins/adp_assistant/main.py4.2 配置管理config.py将敏感信息和配置抽离出来是个好习惯。# src/plugins/adp_assistant/config.py from pydantic import BaseSettings class AdpConfig(BaseSettings): 腾讯云ADP配置 # 从腾讯云ADP控制台获取 adp_api_endpoint: str https://adp.tencentcloudapi.com # 示例请替换为真实地址 adp_api_key: str your-secret-id adp_api_secret: str your-secret-key # 智能体ID或应用ID adp_agent_id: str your-agent-id # 请求超时时间秒 timeout: int 30 class Config: env_prefix ADP_ # 环境变量前缀如 ADP_API_ENDPOINT case_sensitive False adp_config AdpConfig()你可以通过环境变量来覆盖这些默认值提高安全性不将密钥硬编码在代码中。4.3 主插件逻辑main.py这是插件的核心包含了消息处理、API调用和回复逻辑。# src/plugins/adp_assistant/main.py import httpx import asyncio from nonebot import on_message, on_command from nonebot.adapters.onebot.v11 import Bot, MessageEvent, GroupMessageEvent from nonebot.rule import to_me # 被的规则 from nonebot.log import logger from .config import adp_config # 初始化一个全局的异步HTTP客户端连接池复用提升性能 _client httpx.AsyncClient(timeoutadp_config.timeout) # 创建两个事件处理器 # 1. 被时触发 adp_matcher on_message(ruleto_me(), priority10, blockTrue) # 2. 使用特定命令触发例如 /ask adp_cmd on_command(ask, aliases{提问, 问}, priority5, blockTrue) async def call_adp_api(question: str, session_id: str None) - str: 调用腾讯云ADP智能体API Args: question: 用户问题 session_id: 会话ID用于多轮对话上下文 Returns: 智能体回复的文本 url f{adp_config.adp_api_endpoint}/v1/agents/{adp_config.adp_agent_id}/invoke headers { Authorization: fBearer {adp_config.adp_api_key}:{adp_config.adp_api_secret}, # 具体鉴权方式以ADP文档为准 Content-Type: application/json, } payload { input: question, session_id: session_id or fqq_group_{hash(question)}, # 简易会话ID生成 parameters: { temperature: 0.7, max_tokens: 1024, } } try: logger.info(fCalling ADP API with question: {question[:50]}...) resp await _client.post(url, jsonpayload, headersheaders) resp.raise_for_status() # 如果状态码不是2xx抛出异常 result resp.json() # 解析ADP API的响应结构这里需要根据ADP实际返回格式调整 # 假设返回格式为 {response: {output: 回答内容}} reply_text result.get(response, {}).get(output, ) if not reply_text: reply_text result.get(output, ADP智能体返回了空内容。) return reply_text.strip() except httpx.RequestError as e: logger.error(fADP API请求失败: {e}) return f抱歉连接智能体服务时出现网络错误{str(e)} except httpx.HTTPStatusError as e: logger.error(fADP API返回错误状态码: {e.response.status_code}) return f智能体服务暂时不可用状态码{e.response.status_code}。 except (KeyError, ValueError) as e: logger.error(f解析ADP API响应失败: {e}, 原始响应: {resp.text if resp in locals() else N/A}) return 智能体返回了无法解析的格式。 adp_matcher.handle() async def handle_at_message(bot: Bot, event: MessageEvent): 处理被的消息 # 提取纯文本问题移除机器人的部分和可能的命令前缀 raw_message event.get_plaintext().strip() if not raw_message: await adp_matcher.finish(你好请告诉我你想问什么) # 显示“正在思考”的提示提升用户体验 if isinstance(event, GroupMessageEvent): await bot.send(event, message正在思考中...) reply await call_adp_api(raw_message, session_idstr(event.user_id)) await adp_matcher.finish(reply) adp_cmd.handle() async def handle_command(bot: Bot, event: MessageEvent): 处理 /ask 命令 # 提取命令后的参数作为问题 args list(event.get_message()) # 移除命令头剩下的合并为问题 question .join(str(seg) for seg in args if seg.type text).strip() if not question: await adp_cmd.finish(请在命令后输入你的问题例如/ask 如何退款) reply await call_adp_api(question, session_idstr(event.user_id)) await adp_cmd.finish(reply) # 插件卸载时关闭HTTP客户端 from nonebot import get_driver driver get_driver() driver.on_shutdown async def shutdown_client(): await _client.aclose()4.4 关键逻辑解析与避坑点会话管理session_id上述代码使用了一个简单的session_id将同一用户的问题关联起来这样ADP智能体在理论上可以维持上下文对话。更完善的实现应该维护一个全局的字典或使用Redis来存储用户最近几轮的对话历史并在调用API时一并发送。消息预处理event.get_plaintext()可以获取消息中的纯文本部分过滤掉图片、表情、信息等。这对于确保发送给ADP API的文本是干净的很关键。错误处理对网络请求、API状态码、响应格式解析都做了异常捕获并返回友好的用户提示。这能避免机器人因为后端服务波动而“装死”或崩溃。异步与性能使用httpx.AsyncClient并在插件生命周期内保持单例可以复用TCP连接显著提升在高频问答下的性能。await关键字确保网络I/O不会阻塞机器人处理其他消息。ADP API鉴权示例中的Authorization头是示意腾讯云ADP实际的鉴权方式可能是更复杂的签名流程TC3-HMAC-SHA256。你需要仔细查阅腾讯云ADP的官方API文档实现正确的签名算法或者使用腾讯云官方提供的SDK如tencentcloud-sdk-python来简化调用。# 更可靠的鉴权示例需安装tencentcloud-sdk-python # pip install tencentcloud-sdk-python from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.adp.v20210001 import adp_client, models import json async def call_adp_api_via_sdk(question: str): cred credential.Credential(adp_config.adp_api_key, adp_config.adp_api_secret) httpProfile HttpProfile() httpProfile.endpoint adp.tencentcloudapi.com clientProfile ClientProfile() clientProfile.httpProfile httpProfile client adp_client.AdpClient(cred, ap-guangzhou, clientProfile) # 以广州为例 req models.InvokeAgentRequest() # ... 填充请求参数 resp client.InvokeAgent(req) return resp.Response.Output使用官方SDK能省去自己实现签名的麻烦并且跟随API更新。5. 进阶优化与生产环境考量一个能跑通的Demo和一个稳定可用的生产环境机器人之间还有不少距离。以下是几个关键的进阶优化点。5.1 消息限速与频率控制QQ群消息可能非常频繁如果不加限制你的机器人可能会频繁调用ADP API产生高昂费用。触发QQ的风控机制导致账号被限制发言甚至封禁。在群内刷屏影响用户体验。解决方案在插件中实现消息限速Rate Limiting。from nonebot import require require(nonebot_plugin_apscheduler) from nonebot_plugin_apscheduler import scheduler from collections import defaultdict import time # 简单的令牌桶限流器按用户 user_message_buckets defaultdict(list) RATE_LIMIT 5 # 每用户每分钟最多5次 TIME_WINDOW 60 def check_rate_limit(user_id: int) - bool: 检查用户是否超过频率限制 now time.time() bucket user_message_buckets[user_id] # 清理过期记录 bucket [t for t in bucket if now - t TIME_WINDOW] user_message_buckets[user_id] bucket if len(bucket) RATE_LIMIT: return False bucket.append(now) return True # 在 handle_at_message 和 handle_command 函数开头加入限流检查 async def handle_at_message(bot: Bot, event: MessageEvent): user_id event.user_id if not check_rate_limit(user_id): await adp_matcher.finish(f提问太快啦请休息一下再问我哦~ (限制{RATE_LIMIT}次/分钟)) # ... 原有逻辑更完善的方案可以结合群聊和全局进行限流并使用Redis等外部存储来支持多实例部署。5.2 上下文记忆与多轮对话基础的session_id只能告诉ADP“这是同一个会话”但ADP服务本身可能不保存历史。为了实现真正的多轮对话我们需要在机器人侧维护上下文。# 使用一个简单的内存字典存储最近对话生产环境应用Redis from collections import deque conversation_context defaultdict(lambda: deque(maxlen5)) # 每个用户保存最近5轮 async def call_adp_api_with_context(question: str, user_id: str) - str: history conversation_context[user_id] # 将历史记录格式化为ADP API所需的格式 formatted_history [{role: user if i%20 else assistant, content: content} for i, content in enumerate(history)] formatted_history.append({role: user, content: question}) # 在payload中传入formatted_history payload { messages: formatted_history, # ... 其他参数 } # 调用API... reply ... # 获取回复 # 更新历史 history.append(question) history.append(reply) return reply5.3 指令扩展与权限管理除了智能问答机器人通常还需要一些管理指令。from nonebot.permission import SUPERUSER from nonebot.adapters.onebot.v11 import GROUP_ADMIN, GROUP_OWNER # 只有超级用户或群主/管理员可以执行的指令刷新缓存 refresh_cmd on_command(flush, permissionSUPERUSER | GROUP_OWNER | GROUP_ADMIN, priority1) refresh_cmd.handle() async def handle_flush(bot: Bot, event: GroupMessageEvent): # 执行一些清理或刷新操作 await refresh_cmd.finish(缓存已刷新。)5.4 日志、监控与高可用日志NoneBot2内置了logger确保将日志正确输出到文件如使用logging模块配置RotatingFileHandler便于问题排查。监控可以使用psutil监控机器人进程状态或者集成Prometheus等监控系统暴露关键指标如消息处理量、API调用延迟、错误率。高可用对于非常重要的群可以考虑部署多个Napcat实例使用不同QQ号连接到同一个NoneBot2后端通过负载均衡或主备切换来避免单点故障。NoneBot2本身可以方便地部署为多进程或多实例服务。5.5 应对QQ风控这是所有QQ机器人开发者最头疼的问题。一些经验性的建议行为像人避免高频、重复、完全一致的消息。可以给回复加入随机延迟0.5-2秒。内容合规确保机器人回复的内容安全、合法不传播违规信息。账号养护使用一个“养”过的老号保持一定的日常登录和聊天行为。准备备用方案准备好扫码登录的流程自动化或手动干预方案因为token失效是常态。6. 部署上线与持续运维将开发好的代码部署到7x24小时运行的云服务器上才算项目真正落地。6.1 使用进程管理器推荐PM2 SupervisorNapcatNode.js和NoneBot2Python都需要在后台稳定运行。对于NapcatNode.js使用PM2npm install -g pm2 cd /path/to/napcat-core pm2 start npm --name napcat-qq -- start pm2 save pm2 startup # 设置开机自启对于NoneBot2Python使用Supervisorsudo apt install supervisor sudo vim /etc/supervisor/conf.d/nonebot.conf[program:nonebot] command/path/to/qq-adp-bot/nonebot-bot/venv/bin/python /path/to/qq-adp-bot/nonebot-bot/bot.py directory/path/to/qq-adp-bot/nonebot-bot useryour_username autostarttrue autorestarttrue stderr_logfile/var/log/nonebot.err.log stdout_logfile/var/log/nonebot.out.logsudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start nonebot6.2 配置更新与代码迭代配置分离所有敏感信息API密钥、QQ密码必须通过环境变量或外部配置文件如.env.prod管理绝不提交到代码仓库。版本控制使用Git管理代码。在服务器上拉取更新后重启Supervisor和PM2管理的进程即可。cd /path/to/your/project git pull origin main # 如果Python依赖有更新 source venv/bin/activate pip install -r requirements.txt sudo supervisorctl restart nonebot pm2 restart napcat-qq6.3 日常运维检查清单日志巡检定期检查/var/log/nonebot.*.log和PM2的日志关注错误和警告。资源监控监控服务器CPU、内存、网络流量确保资源充足。账号状态定期如每周手动检查机器人QQ号是否在线能否正常收发消息。费用监控关注腾讯云ADP的API调用量设置费用告警避免意外超额。走到这一步一个连接腾讯云ADP智能体与QQ群的自动化助手就已经在你的服务器上稳定运行了。它不再是一个简单的脚本而是一个有一定健壮性、可维护性的小系统。回顾整个过程最深的体会是“稳定性高于一切”。在非官方协议上构建服务风控是最大的变数因此代码中的容错、限流和优雅降级显得尤为重要。其次将复杂的流程模块化Napcat协议、NoneBot2框架、ADP插件让开发和调试变得清晰。当智能体在群里第一次准确回答出用户的问题时那种技术串联起场景的满足感就是驱动我们不断折腾的最好回报。未来你还可以在此基础上扩展更多功能比如让智能体调用群文件、处理图片消息甚至结合其他平台API打造一个更强大的数字助理。
返回列表