如何使用 ChatGPT 创建 Discord 语音机器人


特里尔·迪基
2024 年 9 月 6 日 06:55

学习利用 Node.js、AssemblyAI 和 ElevenLabs 构建集成 ChatGPT 以实现智能响应的 Discord 语音机器人。




Discord 是一款流行的即时通讯和社交媒体平台,受到在线社区、主播和游戏玩家的广泛青睐。其最受欢迎的功能之一是语音频道,允许成员通过语音和视频进行交流。Discord 的另一个重要优势(尤其是对于开发人员而言)是其可定制性,允许创建机器人来添加新功能。据 AssemblyAI 介绍,本教程将指导您开发一个 Discord 机器人,该机器人可以加入语音频道、转录音频、通过 ChatGPT 生成智能响应并将这些响应转换回语音。

设置机器人

要构建 Discord 机器人,您需要使用 Node.js 以及第三方服务,例如用于语音转文本的 AssemblyAI、用于智能响应的 OpenAI 和用于文本转语音的 ElevenLabs。我们假设您熟悉 JavaScript 和 Node.js,以及设置 Node.js 项目、安装依赖项和编写基本的异步代码。

首先,确保您已安装 Node.js(版本 18 或更高版本)并具有管理员权限访问 Discord 服务器。创建项目目录并初始化 Node.js 项目:

mkdir discord-voice-bot && cd discord-voice-bot
npm init -y

安装所需的依赖项:

npm install discord.js libsodium-wrappers ffmpeg-static @discordjs/opus @discordjs/voice dotenv assemblyai elevenlabs-node openai

将 API 密钥存储在 .env 安全文件:

OPENAI_API_KEY=
ASSEMBLYAI_API_KEY=
ELEVENLABS_API_KEY=
DISCORD_TOKEN=

设置 Discord 开发者帐户,创建应用程序,启用必要的权限,并将机器人令牌保存在 .env 文件。使用生成的 URL 将机器人添加到您的服务器。

开发 Discord 语音机器人功能

该机器人将加入语音频道,录制音频,使用 AssemblyAI 将其转录,通过 ChatGPT 生成响应,并使用 ElevenLabs 将这些响应转换为语音。

加入语音频道

为了让机器人回应 !join 命令并进入语音频道,更新 index.js 文件:

const { joinVoiceChannel, VoiceConnectionStatus } = require("@discordjs/voice");

client.on(Events.MessageCreate, async (message) => {
  if (message.content.toLowerCase() === "!join") {
    channel = message.member.voice.channel;
    if (channel) {
      const connection = joinVoiceChannel({
        channelId: channel.id,
        guildId: message.guild.id,
        adapterCreator: message.guild.voiceAdapterCreator,
      });

      connection.on(VoiceConnectionStatus.Ready, () => {
        message.reply(`Joined voice channel: ${channel.name}!`);
        listenAndRespond(connection, message);
      });
    } else {
      message.reply("You need to join a voice channel first!");
    }
  }
});

录制和转录音频

从语音通道捕获音频流并使用 AssemblyAI 将其转录:

const { AssemblyAI } = require("assemblyai");
const assemblyAI = new AssemblyAI({ apiKey: process.env.ASSEMBLYAI_API_KEY });

const transcriber = assemblyAI.realtime.transcriber({ sampleRate: 48000 });

transcriber.on("transcript", (transcript) => {
  if (transcript.message_type === "FinalTranscript") {
    transcription += transcript.text + " ";
  }
});

async function listenAndRespond(connection, message) {
  const audioStream = connection.receiver.subscribe(message.author.id);
  const prism = require("prism-media");
  const opusDecoder = new prism.opus.Decoder({ rate: 48000, channels: 1 });
  audioStream.pipe(opusDecoder).on("data", (chunk) => {
    transcriber.sendAudio(chunk);
  });

  audioStream.on("end", async () => {
    await transcriber.close();
    const chatGPTResponse = await getChatGPTResponse(transcription);
    const audioPath = await convertTextToSpeech(chatGPTResponse);
    playAudio(connection, audioPath);
  });
}

使用 ChatGPT 生成回复

使用 OpenAI 的 GPT-3.5 Turbo 模型生成智能响应:

const { OpenAI } = require("openai");
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function getChatGPTResponse(text) {
  const response = await openai.completions.create({
    model: "gpt-3.5-turbo",
    prompt: text,
    max_tokens: 100,
  });
  return response.choices(0).text.trim();
}

使用 ElevenLabs 将文本转换为语音

使用 ElevenLabs 将 ChatGPT 响应转换为语音:

const ElevenLabs = require("elevenlabs-node");
const voice = new ElevenLabs({ apiKey: process.env.ELEVENLABS_API_KEY });

async function convertTextToSpeech(text) {
  const fileName = `${Date.now()}.mp3`;
  const response = await voice.textToSpeech({ fileName, textInput: text });
  return response.status === "ok" ? fileName : null;
}

结论

本教程演示了如何创建一个复杂的 Discord 语音机器人,该机器人集成了 AssemblyAI(用于语音转录)、OpenAI 的 GPT-3.5 Turbo 模型(用于智能响应)和 ElevenLabs(用于语音合成)。该项目展示了现代人工智能和语音技术在创建交互式、可访问且引人入胜的应用程序方面的潜力。

图片来源:Shutterstock


(标签翻译)人工智能(t)加密(t)区块链(t)新闻



关键词:AI,crypto,blockchain,news

AIblockchainChatGPTCryptoDiscordnews创建如何使用语音机器人
Comments (0)
Add Comment