🗣️

Perplexity APIとElevenLabsを組み合わせて質問に音声で答えてくれるシステムを作る

2023/11/30に公開

概要

質問を投げたら、回答を文字と音声両方で返してくれるWebアプリをサクッと作る。

使う技術

  • 質問に答える→Perplexity API(Llamaindex経由)
  • 回答を読み上げる→ElevenLabs(Langchain経由)
  • Webアプリ→gradio

Perplexity API

Perplexityが提供しているAPI(以下のモデルの中から好きなLLMを選べる。)

https://docs.perplexity.ai/docs
https://docs.llamaindex.ai/en/latest/examples/llm/perplexity.html

ElevenLabs

テキストの読み上げが可能。
https://elevenlabs.io/
https://python.langchain.com/docs/integrations/tools/eleven_labs_tts

gradio

pythonで簡単にWebアプリを作成できる。
https://www.gradio.app/

実践

手順1

必要なパッケージを入れる

cli
!pip install langchain
!pip install elevenlabs

!pip install llama-index
!pip install gradio

手順2

手順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