特里尔·迪基
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