イントロ
こんにちは!
今回は、音声を文字起こしし、GPT-3.5を使用して応答を生成し、その応答を音声に変換するPythonベースのボットの作成方法をご紹介します。
このボットは、インタラクティブな音声ベースのアプリケーションを作成するのに役立ちます。
Github
機能
このボットには以下の機能があります:
- マイクから音声入力を記録
- OpenAIのWhisperモデルを使用して音声をテキストに変換
- GPT-3.5を使用してテキスト応答を生成
- 生成されたテキストを音声に変換
- 変換した音声を再生
必要なもの
- Python 3.9.19
- OpenAI APIキー
インストール手順
1. リポジトリのクローン
まず、リポジトリをクローンします。
git clone https://github.com/yayoi-exe/audio-chat-bot.git
フォルダに移動します。
cd audio-chat-bot
2. 必要なパッケージをインストール
次に、必要なPythonパッケージをインストールします。
pip install -r requirements.txt
3. OpenAI APIキーの設定
OpenAI APIキーを設定するために、プロジェクトのルートディレクトリに .env ファイルを作成し、以下のようにAPIキーを追加します。
OPENAI_API_KEY="your_openai_api_key_here"
プログラムの説明
1. メインスクリプトの実行
以下のコマンドでメインスクリプトを実行します。
python main.py
2. 音声の記録と応答の生成
スクリプトを実行すると、以下のメッセージが表示されます:
Press Enter to start/stop recording or 'q' to quit...
- Enterキーを押すと録音が開始されます。
- 再度Enterキーを押すと録音が停止され、音声ファイルが保存されます。
- 録音が停止すると、音声がテキストに変換され、GPT-3.5を使用して応答が生成されます。
- 生成された応答は音声に変換され、再生されます。
- 終了したい場合は、q を入力してください。
プログラムの詳細
音声の録音
sd.InputStream を使用して音声を録音します。
録音データはキューに保存され、別のスレッドでファイルに書き込まれます。
with sd.InputStream(
callback=lambda indata,
frames,
time,
status: audio_callback(indata, frames, time, status, q),
channels=1,
samplerate=sample_rate,
dtype='int16'
):
# 録音処理
音声の文字起こし
録音された音声ファイルをOpenAIのWhisperモデルを使用して文字起こしします。
def transcribe_audio(filename):
try:
with open(filename, "rb") as audio_file:
transcription = openai.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
return transcription.text
except Exception as e:
print(f"Error transcribing audio: {e}")
return None
応答の生成
文字起こしされたテキストをGPT-3.5を使用して応答を生成します。
def generate_response(prompt):
try:
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "短文で会話を続けてください。"},
{"role": "user", "content": prompt},
],
max_tokens=50
)
return response.choices[0].message.content
except Exception as e:
print(f"Error generating response: {e}")
return None
テキストの音声変換
生成されたテキストを音声に変換します。
def text_to_speech(speech_file_path, text):
try:
with openai.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input=text
) as response:
response.stream_to_file(speech_file_path)
except Exception as e:
print(f"Error converting text to speech: {e}")
音声の再生
生成された音声ファイルを再生します。
try:
data, samplerate = sf.read(speech_file_path)
sd.play(data, samplerate=samplerate)
sd.wait()
print("Speaking...")
except Exception as e:
print(f"Error playing speech: {e}")
プロジェクト構成
プロジェクトのディレクトリ構成は以下の通りです:
- main.py: ボットを実行するメインスクリプト
- .env: 主にOpenAI APIキーを保存するための環境変数ファイル
- requirements.txt: 必要なPythonパッケージのリスト
エラーハンドリング
このスクリプトには、以下のような問題を管理するための包括的なエラーハンドリングが含まれています:
- 不足または無効なAPIキー
- 音声記録エラー
- APIコール失敗
- ファイルの読み書きエラー
まとめ
このボットを使って、音声ベースのインタラクティブなアプリケーションを簡単に作成してみてください。
ご質問やフィードバックがあれば、コメントでお知らせください!