You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord ChatGPT机器人长回复无响应问题求助(Python)

修复Discord斜杠命令调用ChatGPT长回复超时问题

问题描述

开发的Discord Python机器人,通过斜杠命令调用ChatGPT时,简单请求(如问候)可正常响应,但复杂请求需要长回复时,Discord提示“应用未响应”。非斜杠命令可正常使用,尝试重构命令未解决该问题。

原因分析

Discord对斜杠命令的交互有3秒响应时限,复杂请求调用ChatGPT的接口耗时会超过这个阈值,导致Discord判定应用未响应。非斜杠命令没有严格的响应时间限制,因此能正常工作。

解决方案

核心思路是先快速响应Discord的交互要求,再在后台处理耗时的ChatGPT请求,最后更新回复内容:

  • 第一步:发送临时响应消息,满足3秒时限要求
  • 第二步:在后台线程执行ChatGPT请求,避免阻塞机器人事件循环
  • 第三步:编辑临时响应,替换为ChatGPT的实际回复
  • 额外添加异常处理,避免请求失败导致机器人无反馈

修改后的完整代码

from dotenv import load_dotenv
import openai
import discord
from discord import app_commands
from discord.ext import commands
import os
import asyncio

load_dotenv()

TOKEN = os.getenv('DISCORD_TOKEN')
openai.api_key = os.getenv('OPENAI_KEY')

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.event
async def on_ready():
    try:
        synced = await bot.tree.sync()
        print(f"Synced {len(synced)} commands(s)")
    except Exception as e:
        print(e)

@bot.tree.command(name="ai", description="ask chatgpt anything")
async def ai(interaction: discord.Interaction, message: str):
    # 发送临时响应,快速满足Discord的交互要求
    await interaction.response.send_message("正在思考中,请稍候...")
    try:
        # 后台线程执行ChatGPT请求,不阻塞机器人事件循环
        response_content = await asyncio.to_thread(chatgpt_response, message)
        # 编辑原始消息,替换为实际回复并清理格式
        await interaction.edit_original_response(content=response_content.strip())
    except Exception as e:
        # 异常处理:告知用户请求失败
        await interaction.edit_original_response(content=f"请求失败:{str(e)}")

def chatgpt_response(prompt):
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=prompt,
        temperature=1,
        max_tokens=100
    ) 
    response_dict = response.get("choices")
    if response_dict and len(response_dict) > 0:
        prompt_response = response_dict[0]["text"]
        return prompt_response
    return "未获取到有效回复"

bot.run(TOKEN)

关键修改说明

  • 新增asyncio库依赖,用于后台线程执行耗时操作
  • 斜杠命令中优先发送临时消息,确保在3秒内完成Discord交互响应
  • 使用asyncio.to_thread将同步的ChatGPT请求移至后台,避免阻塞机器人的事件循环
  • 添加异常捕获逻辑,当ChatGPT接口调用失败时,向用户反馈错误信息
  • 对ChatGPT返回的内容调用strip(),去除多余的换行和空格,优化回复格式

内容的提问来源于stack exchange,提问作者stubbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:04:53