🗣️
Perplexity APIとElevenLabsを組み合わせて質問に音声で答えてくれるシステムを作る
概要
質問を投げたら、回答を文字と音声両方で返してくれるWebアプリをサクッと作る。
使う技術
- 質問に答える→Perplexity API(Llamaindex経由)
- 回答を読み上げる→ElevenLabs(Langchain経由)
- Webアプリ→gradio
Perplexity API
Perplexityが提供しているAPI(以下のモデルの中から好きなLLMを選べる。)
ElevenLabs
テキストの読み上げが可能。
gradio
pythonで簡単にWebアプリを作成できる。
実践
手順1
必要なパッケージを入れる
cli
!pip install langchain
!pip install elevenlabs
!pip install llama-index
!pip install gradio
手順2
-
Elevenlabsのアカウントを作成して、APIKEYを作成する
https://elevenlabs.io/ -
Perplexityのアカウントを作成して、APIKEYを作成する(課金が必要かも?)
https://www.perplexity.ai/
手順3
pythonファイルを作成して、以下のコードを記述。
test.py
import os
import json
from langchain.tools import ElevenLabsText2SpeechTool
import gradio as gr
from llama_index.llms import Perplexity
from llama_index.llms.base import ChatMessage
# API_KEY
os.environ["ELEVEN_API_KEY"] = "YOUR_API_KEY"
os.environ["PPLX_API_KEY"] = "YOUR_API_KEY"
def chat_with_pplx_model(user_input):
messages_dict = [
{"role": "system", "content": "Be precise and concise."},
{"role": "user", "content": user_input}
]
messages = [ChatMessage(**msg) for msg in messages_dict]
# 今回はmistralを使う
llm = Perplexity(
api_key=os.environ["PPLX_API_KEY"], model="mistral-7b-instruct", temperature=0.5
)
response = llm.chat(messages)
# 回答のメッセージ部分のみ抽出
text_to_speak = json.loads(response.json())["message"]["content"]
# 読み上げを行う
tts = ElevenLabsText2SpeechTool()
speech_file = tts.run(text_to_speak)
tts.play(speech_file)
return text_to_speak
# Webアプリ化
iface = gr.Interface(fn=chat_with_pplx_model, inputs="text", outputs="text")
iface.launch()
手順4
作成したファイルを実行し、表示されたURLにアクセス
cli
python test.py
Running on local URL: http://127.0.0.1:7860
手順5
簡単な質問をしてみる。
音声と文字で回答が返ってくることを確認
以上
Discussion