在 gpt-researcher 中搭建自定义 Discord Bot:从 OAuth2 授权到 WebSocket 实时研究报告

在 gpt-researcher 中搭建自定义 Discord Bot:从 OAuth2 授权到 WebSocket 实时研究报告 在 gpt-researcher 中搭建自定义 Discord Bot从 OAuth2 授权到 WebSocket 实时研究报告【免费下载链接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher本篇技术指南讲解如何将 gpt-researcher 的深度研究能力接入 Discord既可以直接邀请官方 GPTR Bot也可以基于仓库docs/discord-bot目录下的 Node.js 源码从零搭建属于自己的研究型 Discord Bot。读完本文你将掌握 Discord 应用的 OAuth2 授权配置、斜杠命令注册deploy-commands、Docker / CLI 两种运行方式以及 Bot 如何通过 WebSocket 与 gpt-researcher 后端通信并把研究进度实时推送到 Discord 频道的完整链路。两种接入方式总览官方文档docs/docs/gpt-researcher/frontend/discord-bot.md给出了两条路径使用官方 GPTR Discord Bot无需任何开发工作直接在 Discord 中通过 OAuth2 授权链接把官方 Bot 拉入你的服务器即可使用自建 Discord Bot在仓库docs/discord-bot/目录下有一套完整的 Node.js 实现包含命令注册、WebSocket 通信、消息分片与线程管理适合需要定制功能或私有部署的团队。方式一直接邀请官方 GPTR Bot官方 Bot 使用一个预配置好的 OAuth2 授权 URL 分发链接中携带了client_id、permissions权限位 1689934339898432与scopebot等参数。在浏览器打开该授权链接选择目标服务器并确认授权后官方 GPTR Bot 就会出现在服务器的成员列表中随后即可在频道内使用/ask等斜杠命令发起研究任务。这种方式零配置、开箱即用适合快速体验 gpt-researcher 的研究能力。方式二创建属于自己的 Discord Bot1. 在项目根目录配置环境变量在仓库根目录创建.env文件写入两个必填项DISCORD_BOT_TOKEN DISCORD_CLIENT_ID这两个变量在源码中分别被用于两处关键逻辑DISCORD_BOT_TOKEN在 docs/discord-bot/index.js 中通过client.login(process.env.DISCORD_BOT_TOKEN)完成 discord.js 客户端的登录鉴权DISCORD_CLIENT_ID在 docs/discord-bot/deploy-commands.js 中作为Routes.applicationCommands(process.env.DISCORD_CLIENT_ID)的调用参数用于向该应用全局注册斜杠命令。Bot 入口通过require(dotenv).config()见 docs/discord-bot/index.js加载.env因此请确保这两个变量名拼写与上文完全一致。2. 在 Discord Developer Portal 创建应用并获取 Token官方文档列出了在 Discord 开发者后台完成 Bot 创建的四步操作这里结合当前仓库做进一步说明打开 Discord Developer PortalApplications 页面点击 New Application 并为 Bot 命名进入OAuth2标签页生成邀请 URL在 Scopes 中勾选bot此时下方会展开权限选择区在 Bot Permissions 中按需勾选权限发送消息、创建公开线程、读取消息内容等在Bot标签页点击 Reset Token 复制 Bot Token粘贴到.env的DISCORD_BOT_TOKEN字段。官方文档在此处配有两张操作截图分别对应 OAuth2 URL 生成器界面与 Bot 权限勾选界面从源码看Bot 实际依赖的权限与 discord.js 的 Gateway Intent 配置强相关。客户端初始化时声明了Guilds、GuildMessages、MessageContent、DirectMessages四个 Intent见 docs/discord-bot/index.js其中MessageContent是 Discord 在 2022 年后要求显式申请的受保护 Intent它支撑了messageCreate事件中对频道消息内容的读取——这正是 docs/discord-bot/index.js 中在帮助论坛新帖发布时自动提醒使用/ask命令功能的前提。因此创建 Bot 时务必在开发者后台开启 Message Content Intent否则消息读取类功能会静默失效。3. 部署斜杠命令Slash Commands在项目根目录含.env的目录执行node deploy-commands.js从 docs/discord-bot/deploy-commands.js 可以看到脚本会通过 discord.js 的 REST APIREST v10向 Discord 注册两条全局命令const commands [ { name: ping, description: Replies with Pong!, }, { name: ask, description: Ask a question to the bot, }, ];官方文档明确说明In our case, this will make the ask and ping commands available to users of the bot. 全局命令注册通常需要几分钟才能在服务器中生效。其中ask命令的详细行为定义在 docs/discord-bot/commands/ask.js 中它使用SlashCommandBuilder声明了命令名与描述。4. 运行 BotDocker 与 CLI 两种方式官方文档提供了两种启动方式均可在仓库根目录直接执行方式 ADocker推荐docker compose --profile discord run --rm discord-bot该命令依赖仓库根目录 docker-compose.yml 中定义的discord-bot服务它以docs/discord-bot为构建上下文、使用Dockerfile.devnodemon 热重载模式构建镜像将.env中的DISCORD_BOT_TOKEN与DISCORD_CLIENT_ID注入容器环境变量并挂载源码目录到/app实现开发期实时同步。注意该服务挂在discordprofile 下必须通过--profile discord才会被 compose 拉起且由于配置了restart: always生产环境更适合用docker compose up方式常驻运行。--rm参数表示容器退出后自动清理适合本地联调若需长期运行可去掉--rm改为docker compose --profile discord up -d。方式 BCLI本地开发# 安装依赖 npm install # 运行 Botnodemon 热重载 npm run dev从 docs/discord-bot/package.json 可以看到项目依赖discord.js^14.16.1、dotenv、express、ws、jsonrepair、nodemon等包npm run dev实际执行的是nodemon --legacy-watch index.js。--legacy-watch选项在使用轮询文件监听的容器或网络文件系统场景下尤为关键它保证挂载卷中的代码改动能被可靠捕获并自动重启。另外docs/discord-bot/server.js 中通过 Express 在 5000 端口启动了一个keepAlive服务主要作用是让 Bot 进程有一个可访问的 HTTP 探活端点如托管平台的健康检查并捕获uncaughtException/unhandledRejection避免进程因未处理异常直接退出。5. 在 Ubuntu 上安装 Node.js 与 NPM环境准备如果你的开发机尚未安装 Node 环境官方文档给出了基于 nvm 的标准安装流程# 安装 nvm wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash # 加载 nvm export NVM_DIR$([ -z ${XDG_CONFIG_HOME-} ] printf %s ${HOME}/.nvm || printf %s ${XDG_CONFIG_HOME}/nvm) [ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh # This loads nvm # 安装 Node.js nvm install 18.17.0 # 安装 npm sudo apt-get install npm这里nvm install 18.17.0与仓库中的 docs/discord-bot/DockerfileFROM node:18.17.0-alpine保持了一致的 Node 版本基线可避免本地与容器环境的版本差异。深入源码Bot 是如何把研究结果带回 Discord 的理解了部署流程后我们再顺着 docs/discord-bot/index.js 梳理一次完整的交互链路这也是整个 Bot 的技术核心命令触发与弹窗收集用户在 Discord 输入/ask后InteractionCreate事件捕获该命令见 docs/discord-bot/index.jsBot 弹出包含问题与补充上下文可选两个文本框的 Modal 表单线程创建用户提交 Modal 后若当前频道是GuildText类型Bot 会基于问题前 30 个字符创建一个名为Discussion: ...的公开线程autoArchiveDuration: 60表示 60 分钟无活动自动归档研究过程与结论都在线程内沉淀避免刷屏主频道见 docs/discord-bot/index.jsWebSocket 通信runDevTeam调用 docs/discord-bot/gptr-webhook.js 的sendWebhookMessage通过ws://gpt-researcher:8000/ws向后端建立 WebSocket 连接该主机名对应 docker-compose 网络内的后端服务并发送形如start JSON.stringify(data)的消息载荷其中report_type为research_report、report_source为web见 docs/discord-bot/gptr-webhook.js进度推送与结果收尾后端在report类型消息中持续返回研究进度data.output前端通过 docs/discord-bot/index.js 的splitMessage按 1500 字符分片后逐条发送到线程当收到dev_team_result消息data.content dev_team_result即视为研究完成将最终结论也分片回传随后清理回调见 docs/discord-bot/gptr-webhook.js。由于sendWebhookMessage返回的是 Promiseindex.js中的while(true)循环会持续等待并分派进度/完成两类结果直到拿到complete类型才跳出见 docs/discord-bot/index.js。需要特别指出的是gptr-webhook.js依赖的gpt-researcher:8000主机名是 docker-compose 服务网络内的内部域名因此这条 WebSocket 通道在Bot 与后端容器同处一个 compose 网络的部署形态下才能直连若 Bot 运行在宿主机或远端服务器需要把该主机名替换为后端实际可达的地址。此外Bot 还内置了一个社区运维细节在帮助论坛频道parentId为1129339320562626580的新帖子上Bot 会在 30 分钟冷却窗口内发送一条 Embed 提示用户改用/ask发起研究见 docs/discord-bot/index.js你可以按需修改或移除该逻辑。小结至此你已经具备了两条完整的落地路径一条是零开发邀请官方 GPTR Bot另一条是基于 docs/discord-bot 源码自建 Bot覆盖环境变量配置、Discord 后台授权、斜杠命令部署、Docker/CLI 双模式运行以及 WebSocket 实时研究结果回传的完整技术链路。若需要扩展 Bot 能力如自定义报告类型、接入其他后端地址可直接修改commands/下的命令定义与gptr-webhook.js中的请求载荷改动后重启容器或由 nodemon 自动热加载即可生效。【免费下载链接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考